Add utility scripts collection with auto-generated documentation
This commit introduces a comprehensive collection of utility scripts for shell automation, color manipulation, and documentation generation: Core Scripts: - artifact_github_download.sh: Download GitHub Action artifacts via CLI - css_color_filter.sh: Generate CSS filter values using SPSA algorithm - css_color_palette.sh: Generate comprehensive color palettes (monochromatic, triadic, etc.) - css_json_convert.sh: Convert CSS variables to JSON/YAML formats - doc_bash_generate.sh: Auto-generate README.md with animated GIF demos - doc_rust_generate.sh: Generate Rust project documentation - jinja_template_render.sh: Render Jinja2 templates from CLI - mime_mp4_gif.sh: Convert MP4 videos to GIF format Documentation Features: - Comprehensive README.md with table of contents - 8 animated GIF demos showing real command examples - Sandboxed demo execution in temporary directories - 15-second timeout protection for intensive computations - Automatic example extraction from --help output Technical Implementation: - Pure bash color utilities using only bc for arithmetic - tput-based color codes for portability - IFS-safe string parsing using parameter expansion - Stdout/stderr isolation to prevent contamination - Base64 encoding for multi-line text preservation All scripts include detailed --help documentation with usage examples. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
90
assets/doc_rust_generate/theme/header.html.jinja
Normal file
90
assets/doc_rust_generate/theme/header.html.jinja
Normal file
@@ -0,0 +1,90 @@
|
||||
<script type="module">
|
||||
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
|
||||
|
||||
mermaid.initialize({
|
||||
startOnLoad: false,
|
||||
theme: 'dark',
|
||||
themeVariables: {
|
||||
primaryColor: '{{primaryColor}}',
|
||||
primaryTextColor: '{{primaryTextColor}}',
|
||||
primaryBorderColor: '{{primaryBorderColor}}',
|
||||
lineColor: '{{lineColor}}',
|
||||
secondaryColor: '#{{secondaryColor}}',
|
||||
tertiaryColor: '{{secondaryColor}}',
|
||||
background: '{{background}}',
|
||||
mainBkg: '{{mainBkg}}',
|
||||
secondBkg: '{{secondBkg}}',
|
||||
border1: '{{border1}}',
|
||||
border2: '{{border2}}',
|
||||
note: '{{note}}',
|
||||
noteBkgColor: '{{noteBkgColor}}',
|
||||
noteTextColor: '{{noteTextColor}}',
|
||||
noteBorderColor: '{{noteBorderColor}}',
|
||||
arrowheadColor: '{{arrowheadColor}}',
|
||||
fontFamily: '{{fontFamily}}',
|
||||
fontSize: '{{fontSize}}',
|
||||
darkMode: '{{darkMode}}',
|
||||
edgeLabelBackground: '{{edgeLabelBackground}}',
|
||||
clusterBkg: '{{clusterBkg}}',
|
||||
clusterBorder: '{{clusterBorder}}',
|
||||
defaultLinkColor: '{{defaultLinkColor}}',
|
||||
titleColor: '{{titleColor}}',
|
||||
nodeTextColor: '{{nodeTextColor}}'
|
||||
},
|
||||
flowchart: {
|
||||
htmlLabels: true,
|
||||
curve: 'basis',
|
||||
useMaxWidth: true,
|
||||
padding: 20
|
||||
},
|
||||
securityLevel: 'loose'
|
||||
});
|
||||
|
||||
// Use both DOMContentLoaded and load events for better compatibility
|
||||
function initMermaid() {
|
||||
const mermaidBlocks = document.querySelectorAll(
|
||||
'pre.language-mermaid code'
|
||||
);
|
||||
|
||||
if (mermaidBlocks.length === 0) {
|
||||
console.log('No mermaid blocks found');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(`Found ${mermaidBlocks.length} mermaid blocks, converting...`);
|
||||
|
||||
mermaidBlocks.forEach((block, index) => {
|
||||
const mermaidDiv = document.createElement('div');
|
||||
mermaidDiv.className = 'mermaid';
|
||||
mermaidDiv.id = `mermaid-diagram-${index}`;
|
||||
mermaidDiv.textContent = block.textContent;
|
||||
block.parentElement.replaceWith(mermaidDiv);
|
||||
});
|
||||
|
||||
setTimeout(() => {
|
||||
mermaid
|
||||
.run()
|
||||
.then(() => {
|
||||
console.log('Mermaid diagrams rendered successfully');
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('Mermaid rendering error:', err);
|
||||
});
|
||||
}, 100);
|
||||
}
|
||||
|
||||
// Try multiple event listeners to ensure it runs
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener('DOMContentLoaded', initMermaid);
|
||||
} else {
|
||||
// DOM already loaded
|
||||
initMermaid();
|
||||
}
|
||||
|
||||
window.addEventListener('load', () => {
|
||||
// Failsafe: run again on window load if diagrams still missing
|
||||
if (document.querySelectorAll('.mermaid svg').length === 0) {
|
||||
initMermaid();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
25
assets/doc_rust_generate/theme/mermaid.yaml
Normal file
25
assets/doc_rust_generate/theme/mermaid.yaml
Normal file
@@ -0,0 +1,25 @@
|
||||
primaryColor: '#ff69b4'
|
||||
primaryTextColor: '#1e272e'
|
||||
primaryBorderColor: '#ff1493'
|
||||
lineColor: '#ff69b4'
|
||||
secondaryColor: '#2f3542'
|
||||
tertiaryColor: '#1e272e'
|
||||
background: '#1e272e'
|
||||
mainBkg: '#2f3542'
|
||||
secondBkg: '#1e272e'
|
||||
border1: '#ff69b4'
|
||||
border2: '#ff1493'
|
||||
note: '#2f3542'
|
||||
noteBkgColor: '#2f3542'
|
||||
noteTextColor: '#ffffff'
|
||||
noteBorderColor: '#ff69b4'
|
||||
arrowheadColor: '#ff69b4'
|
||||
fontFamily: 'Inter system-ui -apple-system sans-serif'
|
||||
fontSize: '16px'
|
||||
darkMode: true
|
||||
edgeLabelBackground: '#1e272e'
|
||||
clusterBkg: '#2f3542'
|
||||
clusterBorder: '#ff69b4'
|
||||
defaultLinkColor: '#ff69b4'
|
||||
titleColor: '#ffffff'
|
||||
nodeTextColor: '#e8eaed'
|
||||
28
assets/doc_rust_generate/theme/theme.css
Normal file
28
assets/doc_rust_generate/theme/theme.css
Normal file
@@ -0,0 +1,28 @@
|
||||
.mermaid {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
padding: 14px;
|
||||
background-color: var(--code-block-background-color);
|
||||
border-radius: var(--code-block-border-radius);
|
||||
}
|
||||
|
||||
.version {
|
||||
color: var(--quote-color);
|
||||
}
|
||||
|
||||
.sidebar-crate h2 a {
|
||||
color: var(--link-color);
|
||||
}
|
||||
|
||||
a.doc-anchor {
|
||||
color: var(--link-color-alternative);
|
||||
}
|
||||
|
||||
pre {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
.docblock :not(pre) > code {
|
||||
font-size: 0.8em;
|
||||
padding: 1px 6px;
|
||||
}
|
||||
152
assets/doc_rust_generate/theme/theme.yaml
Normal file
152
assets/doc_rust_generate/theme/theme.yaml
Normal file
@@ -0,0 +1,152 @@
|
||||
main-background-color: "#2f3542"
|
||||
main-color: "#e8eaed"
|
||||
settings-input-color: "#e8eaed"
|
||||
settings-input-border-color: "#57606f"
|
||||
settings-button-color: "#ff69b4"
|
||||
settings-button-border-focus: "#ff1493"
|
||||
link-color: "#ff69b4"
|
||||
code-highlight-kw-color: "#ff69b4"
|
||||
code-highlight-kw-2-color: "#ff1493"
|
||||
code-highlight-kw-3-color: "#ec407a"
|
||||
sidebar-background-color: "#1e272e"
|
||||
sidebar-background-color-hover: "#24272e"
|
||||
sidebar-elems-color: "#e8eaed"
|
||||
sidebar-border-color: "#57606f"
|
||||
sidebar-link-color: "#e8eaed"
|
||||
sidebar-current-link-background-color: rgba(255, 105, 180, 0.15)
|
||||
search-input-focused-border-color: "#ff69b4"
|
||||
search-results-alias-color: "#ff69b4"
|
||||
search-results-grey-color: "#747d8c"
|
||||
search-tab-title-count-color: "#ff69b4"
|
||||
search-background-color: "#2f3542"
|
||||
search-color: "#e8eaed"
|
||||
search-error-code-background-color: "#1e272e"
|
||||
search-results-border-color: "#57606f"
|
||||
search-tab-button-not-selected-border-top-color: "#57606f"
|
||||
search-tab-button-not-selected-background: "#24272e"
|
||||
search-tab-button-selected-border-top-color: "#ff69b4"
|
||||
search-tab-button-selected-background: "#2f3542"
|
||||
search-result-link-focus-background-color: rgba(255, 105, 180, 0.1)
|
||||
search-result-border-color: "#57606f"
|
||||
search-input-border-color: "#57606f"
|
||||
code-block-background-color: "#1e272e"
|
||||
codeblock-error-hover-color: rgba(255, 105, 180, 0.1)
|
||||
codeblock-error-color: rgba(255, 20, 147, 0.8)
|
||||
codeblock-ignore-hover-color: "#ffffff"
|
||||
codeblock-ignore-color: "#e8eaed"
|
||||
codeblock-link-background: "#1e272e"
|
||||
codeblock-link-hover-background: "#24272e"
|
||||
scrollbar-track-background-color: "#1e272e"
|
||||
scrollbar-thumb-background-color: "#ff69b4"
|
||||
scrollbar-color: "#ff69b4 #1e272e"
|
||||
heading-color: "#ff69b4"
|
||||
title-color: "#ff69b4"
|
||||
subtitle-color: "#ff1493"
|
||||
headings-border-bottom-color: "#ff69b4"
|
||||
border-color: "#57606f"
|
||||
table-border-color: "#57606f"
|
||||
table-head-background-color: "#1e272e"
|
||||
button-background-color: "#1e272e"
|
||||
button-border-color: "#57606f"
|
||||
right-side-color: "#e8eaed"
|
||||
tr-even-background-color: "#24272e"
|
||||
tr-odd-background-color: "#2f3542"
|
||||
table-alt-row-background-color: "#24272e"
|
||||
quote-color: "#747d8c"
|
||||
quote-border-color: "#ff69b4"
|
||||
type-link-color: "#ff69b4"
|
||||
trait-link-color: "#ff1493"
|
||||
assoc-item-link-color: "#ec407a"
|
||||
fn-link-color: "#ff69b4"
|
||||
function-link-color: "#ff69b4"
|
||||
macro-link-color: "#f06292"
|
||||
keyword-link-color: "#ff69b4"
|
||||
mod-link-color: "#ff1493"
|
||||
docblock-table-border-color: "#57606f"
|
||||
docblock-code-background-color: "#1e272e"
|
||||
mobile-sidebar-menu-filter: none
|
||||
mobile-sidebar-menu-hover-filter: invert(100%) brightness(1.2)
|
||||
src-line-numbers-span-color: "#57606f"
|
||||
src-line-number-highlighted-background-color: rgba(255, 105, 180, 0.1)
|
||||
src-sidebar-background-selected: rgba(255, 105, 180, 0.15)
|
||||
src-sidebar-background-hover: rgba(255, 105, 180, 0.1)
|
||||
item-table-header-background-color: "#1e272e"
|
||||
item-table-header-border-color: "#57606f"
|
||||
scraped-example-title-color: "#ff69b4"
|
||||
scraped-example-help-border-color: "#57606f"
|
||||
scraped-example-help-color: "#e8eaed"
|
||||
scraped-example-help-hover-border-color: "#ff69b4"
|
||||
scraped-example-help-hover-color: "#ffffff"
|
||||
scraped-example-code-line-highlight: rgba(255, 105, 180, 0.1)
|
||||
scraped-example-code-line-highlight-focus: rgba(255, 105, 180, 0.2)
|
||||
scrape-example-code-line-highlight: rgba(255, 105, 180, 0.1)
|
||||
scrape-example-code-line-highlight-focus: rgba(255, 105, 180, 0.2)
|
||||
scrape-example-help-border-color: "#57606f"
|
||||
scrape-example-help-color: "#e8eaed"
|
||||
scrape-example-help-hover-border-color: "#ff69b4"
|
||||
scrape-example-help-hover-color: "#ffffff"
|
||||
scrape-example-toggle-line-background: rgba(255, 105, 180, 0.05)
|
||||
scrape-example-toggle-line-hover-background: rgba(255, 105, 180, 0.1)
|
||||
scrape-example-code-wrapper-background-start: rgba(30, 39, 46, 0.9)
|
||||
scrape-example-code-wrapper-background-end: rgba(30, 39, 46, 0.6)
|
||||
toggle-filter: invert(100%) brightness(0.8)
|
||||
toggle-plus-minus-background-color: rgba(255, 105, 180, 0.1)
|
||||
notable-trait-tooltip-background-color: "#1e272e"
|
||||
notable-trait-tooltip-border-color: "#ff69b4"
|
||||
copy-button-color: "#e8eaed"
|
||||
copy-button-background-color: "#1e272e"
|
||||
copy-button-hover-color: "#ffffff"
|
||||
copy-button-hover-background-color: "#24272e"
|
||||
copy-button-border-color: "#57606f"
|
||||
copy-path-button-color: "#e8eaed"
|
||||
code-attribute-color: "#ff69b4"
|
||||
code-highlight-lifetime-color: "#f06292"
|
||||
code-highlight-prelude-color: "#ff69b4"
|
||||
code-highlight-prelude-val-color: "#ff1493"
|
||||
code-highlight-number-color: "#f06292"
|
||||
code-highlight-string-color: "#ec407a"
|
||||
code-highlight-literal-color: "#ff69b4"
|
||||
code-highlight-attribute-color: "#ff69b4"
|
||||
code-highlight-self-color: "#ff1493"
|
||||
code-highlight-macro-color: "#f06292"
|
||||
code-highlight-question-mark-color: "#ff69b4"
|
||||
code-highlight-comment-color: "#747d8c"
|
||||
code-highlight-doc-comment-color: "#747d8c"
|
||||
stab-background-color: "#1e272e"
|
||||
stab-code-color: "#e8eaed"
|
||||
stab-unstable-background-color: rgba(255, 105, 180, 0.2)
|
||||
stab-unstable-code-color: "#ff69b4"
|
||||
stab-deprecated-background-color: rgba(255, 69, 0, 0.2)
|
||||
stab-deprecated-code-color: "#ff4500"
|
||||
stab-portability-background-color: rgba(116, 125, 140, 0.2)
|
||||
stab-portability-code-color: "#747d8c"
|
||||
kbd-color: "#e8eaed"
|
||||
kbd-background: "#1e272e"
|
||||
kbd-box-shadow-color: "#57606f"
|
||||
rust-logo-filter: brightness(0) saturate(100%) invert(75%) sepia(100%) saturate(1000%) hue-rotate(290deg) brightness(100%) contrast(100%)
|
||||
crate-search-div-filter: invert(100%)
|
||||
crate-search-div-hover-filter: invert(100%)
|
||||
crate-search-hover-border: "#ff69b4"
|
||||
target-background-color: rgba(255, 105, 180, 0.1)
|
||||
target-border-color: "#ff69b4"
|
||||
code-example-button-color: "#e8eaed"
|
||||
code-example-button-background-color: "#1e272e"
|
||||
code-example-button-hover-background-color: "#24272e"
|
||||
code-example-button-hover-color: "#ffffff"
|
||||
settings-menu-filter: brightness(0.9) invert(65%) sepia(67%) saturate(3704%) hue-rotate(300deg) brightness(108%) contrast(101%)
|
||||
settings-menu-hover-background-color: rgba(255, 105, 180, 0.1)
|
||||
settings-menu-hover-filter: brightness(1.1) invert(65%) sepia(67%) saturate(3704%) hue-rotate(300deg) brightness(108%) contrast(101%)
|
||||
help-border-color: "#57606f"
|
||||
help-background-color: "#2f3542"
|
||||
help-color: "#e8eaed"
|
||||
warning-border-color: "#f59e0b"
|
||||
warning-background-color: rgba(245, 158, 11, 0.1)
|
||||
note-background-color: rgba(59, 130, 246, 0.1)
|
||||
note-border-color: "#3b82f6"
|
||||
toggles-color: "#e8eaed"
|
||||
sidebar-resizer-hover: "#ff69b4"
|
||||
sidebar-resizer-active: "#ff1493"
|
||||
font-family: "'Inter', 'Fira Sans', Arial, sans-serif"
|
||||
font-family-code: "'JetBrains Mono', 'Fira Mono', monospace"
|
||||
link-color-alternative: "#6495ed"
|
||||
|
||||
Reference in New Issue
Block a user