#!/bin/bash # Simple script for compiling/converting documents with pandoc because I can never remember how to use it # Usage: # pandoc-make html *.md usage() { cat <<-EOF Usage: $0 [output_type] [pandoc_args for file 1] [pandoc_args for file 1] [input_files] Examples: $0 pdf *.md $0 .docx *.md # leading .'s are automatically removed from the output format Note: 1) To put a file in pandoc arguments without having it be compiled to its own document, put a './' or '../' at the start of the path to it - You can have as many arg/file combinations you want - The argument array is cleared between input files EOF # TODO: # 2) You can set default arguments in the array PANDOC_DEFAULT_ARGS and export them for this script to use } confirm() { echo -n "$@" while true; do read -r YN case "$YN" in [Yy]) return 0 ;; *) return 1 ;; esac done } # Help menu (yes, I forget how to use my own programs sometimes) if [[ -z "$1" ]]; then usage && exit 1 fi if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then usage && exit fi if [[ -z "$2" ]]; then echo "error: no files specified" usage && exit 1 fi OUTPUT_FORMAT="$1" SKIP=true # don't process the first argument, it is the output format for FILE in "$@";do $SKIP && SKIP=false && continue # PANDOC_ARGS="${PANDOC_DEFAULT_ARGS[*]:-"$PANDOC_ARGS"}" if [[ -f "$FILE" ]] && { [[ "${FILE:0:2}" != "./" ]] || [[ "${FILE:0:3}" != "../" ]]; }; then OUTPUT_FILE="${FILE%.*}.${OUTPUT_FORMAT##.}" # Guard against overwriting md files and tex files if { [[ "$OUTPUT_FORMAT" = md ]] || [[ "$OUTPUT_FORMAT" = tex ]]; } && [[ -f "$OUTPUT_FILE" ]]; then if confirm "Overwrite $FILE? [y/N]: "; then # Make new file names until there is no overwriting while [[ -f "$OUTPUT_FILE" ]]; do OUTPUT_FILE="${FILE%.*}-$((FILE_NUM++)).${OUTPUT_FORMAT##.}" done echo "Not overwriting, new name: '$OUTPUT_FILE'" else # Give some time to ctrl-c before overwrite… SLEEP_DURATION=1 echo -n "'$FILE' will be overwritten in" for N in {3..1};do echo -n " $N" && sleep $SLEEP_DURATION done echo fi fi pandoc "${PANDOC_ARGS[@]}" -o "$OUTPUT_FILE" "$FILE" PANDOC_ARGS=() else PANDOC_ARGS+=("$FILE") fi done # vim:et ts=3 sw=3