| #!/bin/bash |
| set -e |
|
|
| SCRIPTS_DIR="$GITHUB_WORKSPACE/.github/workflows/scripts" |
|
|
| echo "Converting MD files to PDF..." |
| find . -name "*.md" -not -path "./.git/*" | while read file; do |
| dir="$(dirname "$file")" |
| filename="$(basename "$file" .md)" |
| pdf_path="$dir/$filename.pdf" |
| |
| echo "Processing $file..." |
| echo "Directory: $dir" |
| echo "Filename (without extension): $filename" |
| echo "Target PDF path: $pdf_path" |
| |
| if [ ! -f "$file" ]; then |
| echo "ERROR: File $file does not exist" |
| continue |
| fi |
| |
| if [ ! -r "$file" ]; then |
| echo "ERROR: File $file is not readable" |
| continue |
| fi |
| |
| echo "File size: $(wc -c < "$file") bytes" |
| |
| |
| cd "$dir" |
| processed_file=$(python3 "$SCRIPTS_DIR/preprocess_markdown.py" "$(basename "$file")" 2>&1) || { |
| echo "Preprocessing failed, using original file" |
| processed_file="$(basename "$file")" |
| } |
| |
| if [ ! -f "$processed_file" ]; then |
| echo "Processed file $processed_file does not exist, using original" |
| processed_file="$(basename "$file")" |
| fi |
| |
| echo "Using file for conversion: $processed_file" |
| |
| |
| pandoc "$processed_file" \ |
| -o "$pdf_path" \ |
| --pdf-engine=xelatex \ |
| --include-in-header="$SCRIPTS_DIR/latex-header.tex" \ |
| --variable mainfont="DejaVu Sans" \ |
| --variable sansfont="DejaVu Sans" \ |
| --variable monofont="DejaVu Sans Mono" \ |
| --variable colorlinks=true \ |
| --variable linkcolor=blue \ |
| --variable urlcolor=blue \ |
| --variable toccolor=gray \ |
| --resource-path="$dir:$SCRIPTS_DIR" \ |
| --standalone \ |
| --toc \ |
| --number-sections \ |
| --highlight-style=pygments \ |
| --wrap=auto \ |
| --dpi=300 \ |
| --verbose 2>&1 || { |
| |
| echo "XeLaTeX failed, trying HTML->PDF conversion..." |
| |
| |
| pandoc "$processed_file" \ |
| -t html5 \ |
| --standalone \ |
| --embed-resources \ |
| --css="$SCRIPTS_DIR/styles.css" \ |
| --toc \ |
| --number-sections \ |
| --highlight-style=pygments \ |
| -o "$dir/$filename.html" 2>&1 |
| |
| if [ -f "$dir/$filename.html" ]; then |
| weasyprint "$dir/$filename.html" "$pdf_path" --presentational-hints 2>&1 || { |
| wkhtmltopdf \ |
| --page-size A4 \ |
| --margin-top 0.5in \ |
| --margin-right 0.5in \ |
| --margin-bottom 0.5in \ |
| --margin-left 0.5in \ |
| --encoding UTF-8 \ |
| --no-outline \ |
| --enable-local-file-access \ |
| "$dir/$filename.html" "$pdf_path" 2>&1 || { |
| echo "All conversion methods failed for $file" |
| continue |
| } |
| } |
| rm -f "$dir/$filename.html" |
| else |
| echo "Failed to create HTML file for $file" |
| continue |
| fi |
| } |
| |
| |
| if [ "$processed_file" != "$(basename "$file")" ]; then |
| rm -f "$processed_file" |
| fi |
| rm -f mermaid_*.png mermaid_*.svg mermaid_*.mmd |
| |
| if [ -f "$pdf_path" ]; then |
| echo "β
Successfully converted $file to $pdf_path" |
| echo "PDF file size: $(wc -c < "$pdf_path") bytes" |
| else |
| echo "β Failed to convert $file" |
| fi |
| |
| cd "$GITHUB_WORKSPACE" |
| done |