88385a0c6d
Tested it on a project with this structure: ``` - root |- test | - Test.java ``` The user must call `compiler` from the root of the project, but that should not be an inconvenience because usually the working directory is the project's root. Nonetheless, it also works for java files in the current working directory, in case someone just wants to test some code quickly.
57 lines
2.1 KiB
Bash
Executable file
57 lines
2.1 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# This script will compile or run another finishing operation on a document. I
|
|
# have this script run via vim.
|
|
#
|
|
# Compiles .tex. groff (.mom, .ms), .rmd, .md, .org. Opens .sent files as sent
|
|
# presentations. Runs scripts based on extention or shebang.
|
|
#
|
|
# Note that .tex files which you wish to compile with XeLaTeX should have the
|
|
# string "xelatex" somewhere in a comment/command in the first 5 lines.
|
|
|
|
file=$(readlink -f "$1")
|
|
dir=${file%/*}
|
|
base="${file%.*}"
|
|
ext="${file##*.}"
|
|
|
|
cd "$dir" || exit 1
|
|
|
|
textype() { \
|
|
command="pdflatex"
|
|
( head -n5 "$file" | grep -qi 'xelatex' ) && command="xelatex"
|
|
$command --output-directory="$dir" "$base" &&
|
|
grep -qi addbibresource "$file" &&
|
|
biber --input-directory "$dir" "$base" &&
|
|
$command --output-directory="$dir" "$base" &&
|
|
$command --output-directory="$dir" "$base"
|
|
}
|
|
|
|
case "$ext" in
|
|
# Try to keep these cases in alphabetical order.
|
|
[0-9]) preconv "$file" | refer -PS -e | groff -mandoc -T pdf > "$base".pdf ;;
|
|
c) cc "$file" -o "$base" && "$base" ;;
|
|
cpp) g++ "$file" -o "$base" && "$base" ;;
|
|
cs) mcs "$file" && mono "$base".exe ;;
|
|
go) go run "$file" ;;
|
|
h) sudo make install ;;
|
|
java) javac -d classes "$file" && java -cp classes "${1%.*}" ;;
|
|
m) octave "$file" ;;
|
|
md) if [ -x "$(command -v lowdown)" ]; then
|
|
lowdown -d nointem -e super "$file" -Tms | groff -mpdfmark -ms -kept > "$base".pdf
|
|
elif [ -x "$(command -v groffdown)" ]; then
|
|
groffdown -i "$file" | groff > "$base.pdf"
|
|
else
|
|
pandoc "$file" --pdf-engine=xelatex -o "$base".pdf
|
|
fi ; ;;
|
|
mom) preconv "$file" | refer -PS -e | groff -mom -kept -T pdf > "$base".pdf ;;
|
|
ms) preconv "$file" | refer -PS -e | groff -me -ms -kept -T pdf > "$base".pdf ;;
|
|
org) emacs "$file" --batch -u "$USER" -f org-latex-export-to-pdf ;;
|
|
py) python "$file" ;;
|
|
[rR]md) Rscript -e "rmarkdown::render('$file', quiet=TRUE)" ;;
|
|
rs) cargo build ;;
|
|
sass) sassc -a "$file" "$base.css" ;;
|
|
scad) openscad -o "$base".stl "$file" ;;
|
|
sent) setsid -f sent "$file" 2>/dev/null ;;
|
|
tex) textype "$file" ;;
|
|
*) head -n1 "$file" | grep "^#!/" | sed "s/^#!//" | xargs -r -I % "$file" ;;
|
|
esac
|