From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- graphics/epix/elaps.in | 485 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 485 insertions(+) create mode 100644 graphics/epix/elaps.in (limited to 'graphics/epix/elaps.in') diff --git a/graphics/epix/elaps.in b/graphics/epix/elaps.in new file mode 100644 index 0000000000..6e8041f3d3 --- /dev/null +++ b/graphics/epix/elaps.in @@ -0,0 +1,485 @@ +#! /bin/bash +# +# elaps: Convert an epix file to encapsulated Postscript, i.e. epix2eps +# +# Options: --help for usage, --version for version and license +# +# Compiler flags may be specified on the command line or in the config +# file ~/.epixrc. The script attempts to deal intelligently with missing +# or multiple extensions. If the input file has a recognized extension, +# there's no issue. If only the root name is given, the script +# searches for completions in the order of preference dictated by the +# variable EPIX_EXTENSIONS. A warning is issued for multiple matches. +# +# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 +# Andrew D. Hwang +# + +. "@pkglibdir@/epix-lib.sh" + +EPIX_CONFIG_FILE="$HOME/.epixrc" +# Search these extensions in order of preference +ELAPS_EXTENSIONS="eepic xp flx cc c C cpp" # or NULL +ELAPS_DOT_EXT=".${ELAPS_EXTENSIONS// /|.}" # for usage message + +# default options +ELAPS_PKGS="latexsym,amsmath,rotating" +declare ELAPS_PSTCOL +ELAPS_SIZE=12 # figure compiled in [12pt]{article} + +ELAPS_PDF="no" # Create PDF file? +ELAPS_PS="no" # Create PS file instead of EPS? + +declare -a EPIX_OPTS +declare -a DVIPS_OPTS + +LATEX_BIN=latex # elaps only uses [huge]latex, not pdflatex or pslatex +LATEX_INTERACT="scrollmode" + +# auxiliary programs +PS2EPS="ps2epsi" + +# internal filenames +PID=$$ +ELAPS_TEMP_EEPIC="$PROG-$PID".eepic +ELAPS_TEMP_LATEX="$PROG-$PID".tex +ELAPS_TEMP_DVI="$PROG-$PID".dvi +ELAPS_TEMP_PS="$PROG-$PID".ps +ELAPS_TEMP_EPSI="$PROG-$PID".epsi + +# globals to pass tokens +ELAPS_USER_OUT="no" # user specified output file? + +declare -a ELAPS_FILE_LIST +declare -a TMP_CMD + +declare -a TEMPFILES +trap '[ -n "${TEMPFILES[*]}" ] && rm -f "${TEMPFILES[@]}"' 0 1 2 3 7 10 13 15 + +TEMPFILES=("$ELAPS_TEMP_EEPIC" "$ELAPS_TEMP_LATEX" "$ELAPS_TEMP_DVI" \ + "$ELAPS_TEMP_PS" "$ELAPS_TEMP_EPSI" ) + +function elaps_help() +{ +cat <<"HELP" +Options: + -h, --help + Show this message and exit + + -V, --version, --gpl + Show version and license + + -v, --verbose + Show success/failure messages + + -H, --huge + Use hugelatex (if available) + + -i, --interactive + Run LaTeX interactively (implies verbose) + + -n, --no-config + Ignore $(HOME)/.dvipsrc + + -o, --output + Specify output file (ONLY for use with a single input file) + + --pst + Write eepic file using PSTricks macros + + --tikz + Write eepic file using tikz macros + + --eepic + Write eepic file using eepic macros + + -p, --pkg + Use an additional LaTeX package in the temporary LaTeX file, e.g. + "-p floatflt". Multiple packages are specified one per "-p" flag. + + -pdf, --pdf + Create PDF file instead of EPS + + -ps, --ps + Create standalone PostScript file (overrides --pdf) + + --pstcol + Use (obsolete) pstcol package instead of pstricks + + -P + dvips printer options, e.g. "-Pamz", may be given on the command + line. They are also read from ~/.dvipsrc if this file exists. + + --size + Set default font size: 10, 11, or 12 (default) + + Other options are passed to epix (q.v.). + +HELP +ePiX_bugreport + +} # End of elaps_help + +# Generate US letter-friendly LaTeX file +function elaps_make_latex () +{ + ALL_LATEX_PKGS="$ELAPS_PKGS" + +# Get LATEX_PKGS from input file + ePiX_usepackages $2 + if [ ! -z "$LATEX_PKGS" ]; then # should always be true... + ALL_LATEX_PKGS="$ALL_LATEX_PKGS,$LATEX_PKGS" + else # compatibility fallback + ALL_LATEX_PKGS="$ALL_LATEX_PKGS,epic,eepic,pstricks" + fi + +# Clear global + unset LATEX_PKGS + +# No effect unless file requires pstricks + if [ ! -z "$ELAPS_PSTCOL" ]; then + ALL_LATEX_PKGS="${ALL_LATEX_PKGS/pstricks/$ELAPS_PSTCOL/}" + fi + +cat <> $1 +\documentclass[${ELAPS_SIZE}pt]{article} +\usepackage{$ALL_LATEX_PKGS} +\setlength{\textwidth}{7.5in} +\setlength{\textheight}{9.5in} +\setlength{\oddsidemargin}{-0.5in} +\setlength{\topmargin}{0in} +\pagestyle{empty} + +\begin{document} +\vfil +\begin{center} +\input{$2} +\end{center} +\vfil +\end{document} + +LaTeX +} # End of elaps_make_latex + + +function elaps_parse_options () +{ + while [ "$1" != "${1#-}" ]; do + case "$1" in + + -h|--help) + ePiX_usage elaps $ELAPS_DOT_EXT + elaps_help + exit 0 + ;; + + -H|--huge) + if [ $(which hugelatex 2> /dev/null) ]; then + LATEX_BIN=hugelatex + else + ePiX_warn " hugelatex not available, ignoring \"$1\" option" + fi + shift + ;; + + -i|--interactive) + EPIX_STDOUT="$SYSTEM_STDOUT" + LATEX_INTERACT="errorstopmode" + shift + ;; + + -n|--no-config) # do not use ~/.dvipsrc + export DVIPSRC="$SYSTEM_DEVNULL" + shift + ;; + + -o|--output) + if [ "$2" = "${2%%.eps}.eps" ]; then + EPIX_OUTROOT="${2%%.eps}" + + elif [ "$2" = "${2%%.pdf}.pdf" ]; then + ELAPS_PDF="yes" + EPIX_OUTROOT="${2%%.pdf}" + + else + EPIX_OUTROOT="$2" + fi + ELAPS_USER_OUT="yes" + shift 2 + ;; + + --pst) + EPIX_OPTS=("${EPIX_OPTS[@]}" "-DEPIX_FMT_PSTRICKS") + shift; continue + ;; + + --tikz) + EPIX_OPTS=("${EPIX_OPTS[@]}" "-DEPIX_FMT_TIKZ") + shift; continue + ;; + + --eepic) + EPIX_OPTS=("${EPIX_OPTS[@]}" "-DEPIX_FMT_EEPIC") + shift; continue + ;; + + -P) + DVIPS_OPTS=("${DVIPS_OPTS[@]}" "-P$2") + shift 2 + ;; + + -P*) + DVIPS_OPTS=("${DVIPS_OPTS[@]}" "$1") + shift + ;; + + -pdf|--pdf) + ELAPS_PDF="yes" + shift + ;; + + -ps|--ps) + ELAPS_PS="yes" + ELAPS_PDF="no" # redundant; enforced by logic later + shift + ;; + + --pstcol) + ELAPS_PSTCOL="pstcol,xcolor" + shift + ;; + + -p|--pkg) + if [ "$2" != "${2#-}" ]; then + ePiX_warn "\"$1\" cannot be followed by \"$2\"; skipping" + shift 1 + else + ELAPS_PKGS="$ELAPS_PKGS,$2" + shift 2 + fi + ;; + + -p*) + ELAPS_PKGS="$ELAPS_PKGS,${1#-p}" + shift + ;; + + # Deliberately undocumented; run silently, no log file + -q|--quiet) + EPIX_STDOUT="$SYSTEM_DEVNULL" + EPIX_STDERR="$SYSTEM_DEVNULL" + LATEX_INTERACT="batchmode" + shift; continue + ;; + + --size) + ELAPS_SIZE="$2" + shift 2 + ;; + + -V|--version|--gpl) + ePiX_version elaps + ePiX_license + exit 0 + ;; + + -v|--verbose) + if [ -z "$2" ]; then + echo "Please use -V for version" + exit 0 + fi + EPIX_STDOUT="$SYSTEM_STDOUT" + shift + ;; + + -vv) + echo "Discontinued option -vv; please use -v for verbose output" + exit 0 + ;; + + + # pass other options to epix + -i*|-u|-x|-I|-L|-l|-W) + EPIX_OPTS=("${EPIX_OPTS[@]}" "$1" "$2") + shift 2 + ;; + + -b) + ePiX_warn "Skipping option \"$1 $2\"" + shift 2 + ;; + + *) + EPIX_OPTS=("${EPIX_OPTS[@]}" "$1") + shift + ;; + esac + done + + # Assume remaining parameters are input files + INFILE_COUNT=$# + + if [ "$ELAPS_USER_OUT" = "yes" -a $INFILE_COUNT -gt 1 ]; then + shift $(($INFILE_COUNT - 1)) + ePiX_warn "Output file specified with multiple input files. Skipping all but \"$*\"" + fi + + ELAPS_FILE_LIST=("$@") +} # end of elaps_parse_options() + + +function elaps_process_files() +{ + if [ -z "$1" ]; then + ePiX_die "No input file specified" + fi + + # file counts + local processed=0 + local success=0 + local failure=0 + + for EPIX_INFILE in "${ELAPS_FILE_LIST[@]}"; do + + # sets EPIX_INROOT, EPIX_SUFFIX, EPIX_NOTFOUND, touches EPIX_LOGFILE + epix_parse_filename "$EPIX_INFILE" "$ELAPS_EXTENSIONS" + let processed=processed+1 + + if [ "$EPIX_NOTFOUND" = "yes" ]; then + let failure=failure+1 + continue + fi + + : ${EPIX_OUTROOT:=$EPIX_INROOT} + EPIX_OUTFILE="$EPIX_OUTROOT".eepic + + # Create eepic file if necessary + if [ "$EPIX_SUFFIX" != "eepic" ]; then + if [ -f "$EPIX_OUTFILE" ]; then # back up existing file + mv -f "$EPIX_OUTFILE" "${EPIX_OUTFILE}~" + fi + + TMP_CMD=(@bindir@/epix "${EPIX_OPTS[@]}" -o "$EPIX_OUTFILE" "$EPIX_INFILE") + + ePiX_command "${TMP_CMD[@]}" + echo "---" | tee -a "$EPIX_LOGFILE" > "$EPIX_STDOUT" + + if [ "$EPIX_INFILE" -nt "$EPIX_OUTFILE" ]; then + ePiX_warn "\"${TMP_CMD[*]}\" failed" + unset EPIX_OUTFILE + unset EPIX_OUTROOT + let failure=failure+1 + continue + + else + ln -s "$EPIX_OUTFILE" "$ELAPS_TEMP_EEPIC" + fi + + else # we were passed an eepic file name + ln -s "$EPIX_INFILE" "$ELAPS_TEMP_EEPIC" + fi + + elaps_make_latex "$ELAPS_TEMP_LATEX" "$ELAPS_TEMP_EEPIC" + + # Create $ELAPS_TEMP_PS + TMP_CMD=($LATEX_BIN -interaction=$LATEX_INTERACT "$ELAPS_TEMP_LATEX") + + ePiX_command "${TMP_CMD[@]}" + + if [ "$ELAPS_TEMP_LATEX" -nt "$ELAPS_TEMP_DVI" ]; then + # Report informative (but fake) command line + ePiX_warn "\"$LATEX_BIN -interaction=$LATEX_INTERACT ${EPIX_INROOT}.tex\" failed" + rm -f "$ELAPS_TEMP_LATEX" "$ELAPS_TEMP_EEPIC" # clean temps + unset EPIX_OUTFILE + unset EPIX_OUTROOT + let failure=failure+1 + continue + else + echo "---" | tee -a "$EPIX_LOGFILE" > "$EPIX_STDOUT" + fi + + TMP_CMD=(dvips "${DVIPS_OPTS[@]}" -f -o "$ELAPS_TEMP_PS" "$ELAPS_TEMP_DVI") + + ePiX_command "${TMP_CMD[@]}" + + if [ "$ELAPS_TEMP_DVI" -nt "$ELAPS_TEMP_PS" ]; then + # Report informative (but fake) command line + ePiX_warn "\"dvips ${DVIPS_OPTS[@]} -f -o ${EPIX_INROOT}.ps ${EPIX_INROOT}.dvi\" failed" + + unset EPIX_OUTFILE + unset EPIX_OUTROOT + let failure=failure+1 + continue + else + echo "---" | tee -a "$EPIX_LOGFILE" > "$EPIX_STDOUT" + fi + + if [ "$ELAPS_PS" = "yes" ]; then + # fix title; can't conveniently put sed command into ePiX_command + echo -n "sed \"s/$PROG-$PID/$EPIX_INROOT/g\" \"$ELAPS_TEMP_PS\"" \ + | tee -a "$EPIX_LOGFILE" > "$EPIX_STDOUT" + echo " > \"$EPIX_OUTROOT.ps\"" \ + | tee -a "$EPIX_LOGFILE" > "$EPIX_STDOUT" + + sed "s/$PROG-$PID/$EPIX_INROOT/g" "$ELAPS_TEMP_PS" \ + > "$EPIX_OUTROOT.ps" + + else + # Create eps file, + TMP_CMD=("$PS2EPS" "$ELAPS_TEMP_PS") + ePiX_command "${TMP_CMD[@]}" + + # fix title, + echo -n "sed \"s/$PROG-$PID/$EPIX_INROOT/g\" \"$ELAPS_TEMP_EPSI\""\ + | tee -a "$EPIX_LOGFILE" > "$EPIX_STDOUT" + echo " > \"$EPIX_OUTROOT.eps\"" \ + | tee -a "$EPIX_LOGFILE" > "$EPIX_STDOUT" + + sed "s/$PROG-$PID/$EPIX_INROOT/g" \ + "$ELAPS_TEMP_EPSI" > "$EPIX_OUTROOT.eps" && + rm -f "$ELAPS_TEMP_EPSI" + + # create pdf if requested, + if [ "$ELAPS_PDF" = "yes" ]; then + echo -n "grep -v \"^%%Orientation:\" \"$EPIX_OUTROOT.eps\"" \ + | tee -a "$EPIX_LOGFILE" > "$EPIX_STDOUT" + echo " | epstopdf --filter --outfile=\"$EPIX_OUTROOT.pdf\"" \ + | tee -a "$EPIX_LOGFILE" > "$EPIX_STDOUT" + # avoid ghostscript rotation bug + grep -v "^%%Orientation:" "$EPIX_OUTROOT.eps" \ + | epstopdf --filter --outfile="$EPIX_OUTROOT.pdf" + rm -f "$EPIX_OUTROOT.eps" # clean up eps + fi + fi + + let success=success+1 + unset EPIX_OUTFILE + unset EPIX_OUTROOT + + # and clean up + rm -f "$ELAPS_TEMP_LATEX" "$ELAPS_TEMP_DVI" "$ELAPS_TEMP_PS" \ + "$ELAPS_TEMP_EEPIC" "$PROG-$PID.aux" "$PROG-$PID.log" + + echo -e "\nTranscript written on $EPIX_LOGFILE" > "$EPIX_STDOUT" + + done # for EPIX_INFILE in $INFILE_LIST + + if [ $processed -gt 1 ]; then + echo "$processed files processed: $success successfully, $failure failed" > "$EPIX_STDERR" + fi +} # elaps_process_files() + + +## Script proper starts here ## + +if [ $# -eq 0 ]; then + ePiX_usage elaps $ELAPS_DOT_EXT + elaps_help + exit 0 +fi + +elaps_parse_options "$@" + +elaps_process_files "${ELAPS_FILE_LIST[@]}" + +exit 0 -- cgit v1.2.3