#!/bin/bash puts() { echo "[$1] $2" } error() { puts "ERROR" "$1" r if [ -n "$2" ] then exit $2 else exit 1 fi } message() { puts "TIKZTOSVG" "$1" g } showHelp() { man tikztosvg exit 0 } showVersion() { echo 0.1.0 exit 0 } if [ -z "$(which xelatex)" ] then error "xelatex could not be found" fi if [ -z "$(which pdf2svg)" ] then error "pdf2svg could not be found" fi # Parsing the arguments PACKAGES=() while [ $# -gt 1 ] do case "$1" in -h|--help) showHelp ;; -v|--version) showVersion ;; -p|--package) if [ -z "$2" ] then error "Unnexpected EOF" else PACKAGES+=("$2") shift shift fi ;; -o|--output) if [ -n "$OUTPUT" ] then error "The output path was specified multiple times" else if [ -z "$2" ] then error "Unexpected EOF" exit 1 else OUTPUT="$2" shift shift fi fi ;; -q|--quit) QUIET=1 shift ;; *) error "Unexpected token: \"$1\"" ;; esac done case "$1" in -h|--help) showHelp ;; -v|--version) showVersion ;; "") error "No input path provided" ;; *) INPUT="$1" esac if [ -z "$OUTPUT" ] then OUTPUT="$(echo $(basename $INPUT) | cut -d "." -f1)" fi TEMP_DIR="$(mktemp -d)" TEX_FILE="$TEMP_DIR/tmp.tex" # Generate the LaTeX document echo "\documentclass[crop,tikz,multi=false]{standalone}" > $TEX_FILE for PACKAGE in "${PACKAGES[@]}" do echo "\usepackage{$PACKAGE}" >> $TEX_FILE done echo "\begin{document}" >> $TEX_FILE echo "\huge" >> $TEX_FILE cat $INPUT >> $TEX_FILE if [ $? -ne 0 ] then rm $TEMP_DIR -r error "File not found: $INPUT" fi echo "\end{document}" >> $TEX_FILE if [ -z "$QUIET" ] then message "Rendering the LaTeX document. . ." xelatex -output-directory=$TEMP_DIR $TEX_FILE else xelatex -halt-on-error -output-directory=$TEMP_DIR $TEX_FILE 1> /dev/null 2>&1 fi S=$? if [ $S -ne 0 ] then rm $TEMP_DIR -r if [ -z "$QUIET" ] then error "xelatex exited with code $S" $S else exit $S fi fi if [ -z "$QUIET" ] then message "Converting the output to SVG. . ." fi pdf2svg "$TEMP_DIR/tmp.pdf" $OUTPUT 1 S=$? if [ $S -ne 0 ] then rm $TEMP_DIR -r if [ -z "$QUIET" ] then error "pdf2svg exited with code $S" $S else exit $S fi fi if [ -z "$QUIET" ] then message "Done!" fi rm "$TEMP_DIR" -r