#!/bin/bash # A script to compile any (here defined) type of text file to a target format # Depends on: bash, basename, pdflatex, pandoc, asciidoctor # By David Penkowoj, 2021/08/02 # Function to compile .md to .pdf files ADOC_TO_HTML() { asciidoctor "$1" && printf "Successfully compiled %s to %s\n" "$1" "$2.pdf" || printf "[ Error ] Couldn't compile %s\n" "$1" } # Function to compile .tex to .pdf files without making a mess TEX_TO_PDF() { printf "If the script seems to hang, try pressing \n" pdflatex -shell-escape "$1" > /dev/null && pdflatex -shell-escape "$1" > /dev/null && # This is to ensure certain tex elements being drawn rm -rf "$2.toc" "$2.log" "$2.aux" && printf "Successfully compiled %s to %s\n" "$2.tex" "$2.pdf" || printf "[ Error ] Couldn't compile %s\n" "$2.tex" } # Function to compile .lp to .pdf files LP_TO_PDF() { lilypond "$1" --pdf -s -o "$2.pdf" && printf "Successfully compiled %s to %s\n" "$1" "$2.pdf" || printf "[ Error ] Couldn't compile %s\n" "$1" } # Function to compile .md to .pdf files MD_TO_PDF() { TMP="/tmp/compilemd" sed '/^!.*/d' "$1" > "$TMP" && # This enables comments with "!" sed 's/^\\!/!/g' "$TMP" "$TMP" && # This enables escaping with "\!" pandoc "$TMP" -o "$2.pdf" && printf "Successfully compiled %s to %s\n" "$1" "$2.pdf" || printf "[ Error ] Couldn't compile %s\n" "$1" } # Check if file exists if [[ -e "$1" ]]; then # Determine filename and extension FILENAME="$(basename -- "$1")" EXTENSION="${FILENAME##*.}" # Check if there is a extension at all if [[ "$FILENAME" == "$EXTENSION" ]]; then printf "[ Error ] The specified file has no extension\n" exit 1 fi # Do the respective compile actions case "$EXTENSION" in "adoc") ADOC_TO_HTML "$1" "${FILENAME%.*}" ;; "tex") TEX_TO_PDF "$1" "${FILENAME%.*}" ;; "pov") povray "$1" ;; "lp") MD_TO_PDF "$1" "${FILENAME%.*}" ;; "md") MD_TO_PDF "$1" "${FILENAME%.*}" ;; *) printf "[ Error ] There is no entry on how to handle '%s' files.\n" "$EXTENSION" exit 1 esac else printf "[ Error ] No file specified!\n" fi exit 0