summaryrefslogtreecommitdiff
path: root/support/pdftex-quiet/pdftex-quiet
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/pdftex-quiet/pdftex-quiet
Initial commit
Diffstat (limited to 'support/pdftex-quiet/pdftex-quiet')
-rwxr-xr-xsupport/pdftex-quiet/pdftex-quiet120
1 files changed, 120 insertions, 0 deletions
diff --git a/support/pdftex-quiet/pdftex-quiet b/support/pdftex-quiet/pdftex-quiet
new file mode 100755
index 0000000000..7bf4599c71
--- /dev/null
+++ b/support/pdftex-quiet/pdftex-quiet
@@ -0,0 +1,120 @@
+#!/bin/bash
+#
+# pdftex-quiet
+# Copyright (C) 2018 Jiří Kozlovský <pdftex-quiet@jkozlovsky.cz>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+VERSION="v1.1.0"
+
+# Do not ignore failures within the pipe
+set -o pipefail
+
+# Get the script name
+BASENAME=`basename "$0"`
+
+# Remove the script's name '-quiet' suffix to get the underlying program to wrap
+WRAPPED_PROGRAM=${BASENAME/%-quiet}
+
+# Assert the wrapped program is either pdflatex or pdftex
+[[ "$WRAPPED_PROGRAM" =~ ^pdf(la)?tex$ ]] || {
+ echo "ERROR: Unsupported program to be wrapped!";
+ echo " - only pdftex & pdflatex is allowed, but '$WRAPPED_PROGRAM' was provided.";
+ exit 101;
+}
+
+# Assert the underlying program is installed
+hash "$WRAPPED_PROGRAM" 2>/dev/null || {
+ echo "ERROR: You need to install $WRAPPED_PROGRAM first!";
+ exit 102;
+}
+
+# Print version if required
+[[ "$@" =~ -v ]] && {
+ echo "pdfTeX-quiet $VERSION";
+ "$WRAPPED_PROGRAM" --version;
+ exit $?;
+}
+
+# Print help if required (let's print it even if only -h is specified
+# although it's ambiguous because of -halt-on-error, but the regex should take care of that)
+[[ "$@" =~ -h([^a]|$) ]] && {
+ echo -e "Usage: $BASENAME [OPTION]... TEXNAME[.tex]\n";
+
+ # Print only arguments from the pdftex|pdflatex help
+ "$WRAPPED_PROGRAM" --help | grep --color=never -E '^[\[-]' -A500;
+ exit $?;
+}
+
+# FILENAME is always the last argument for pdftex|pdflatex
+# Create FILENAME variable only if there was provided some argument
+test $# -gt 0 && eval FILENAME=\${$#}
+
+# Test that the filename was provided
+test -z "$FILENAME" && {
+ echo "It's mandatory to provide the filename of tex source as first argument!";
+ exit 103;
+}
+
+# Test the existence of the file provided
+test -f "$FILENAME" || test -f "$FILENAME.tex" || {
+ echo "Last argument must be a file! Provided file '$FILENAME' doesn't exist!";
+ exit 104;
+}
+
+# Run pdftex|pdflatex on the file.
+# Use -halt-on-error because grep basically disables the interactive mode.
+# Using $@ we also allow to pass all other arguments to the pdftex|pdflatex.
+
+# Use grep to show only errors that occur with another 200 lines followed by the error.
+# Errors start with '!' at the line start. We match whole line to mark it in red bold color.
+
+# Finally, let's inverse the grep command result so the command is considered failed
+# only if grep have found something.
+
+# Also make sure we provide no stdin by piping program with no output ':'
+# We have to do this, because grep basically disables program <-> user dialog by not printing
+# characters without finishing newline character (which is usually printed after user's input).
+
+: | \
+ "$WRAPPED_PROGRAM" --halt-on-error $@ | \
+ { ! grep --color=auto '^!.*' -A200; }
+
+EVERYTHING_SUCCEEDED=$?
+
+# And finally, print the result accordingly
+if ! test $EVERYTHING_SUCCEEDED -eq 0; then
+ # But first let's print empty line to improve readability
+ echo
+ echo "---------------------------------------------"
+ echo "- Failed to compile the provided TEX file! --"
+ echo "---------------------------------------------"
+
+ # The compilation has actually failed, so exit with failure status code
+ exit $EVERYTHING_SUCCEEDED
+else
+ echo "The compilation was successful!"
+
+ # Finally, we are about to print the result pdf/dvi file name, so parse the arguments provided (if any)
+ [[ "$@" =~ -output-format(=|[ ]*)dvi($|[ ]*) ]] && EXTENSION=dvi || EXTENSION=pdf
+ [[ "$@" =~ -output-directory(=|[ ]*)([^ $]*) ]] && OUTPUT_DIRECTORY="${BASH_REMATCH[2]}/"
+
+ # Replace whatever extension we provided to pdftex|pdflatex with either dvi or pdf (based on arguments provided)
+ OUTPUT_FILENAME="${FILENAME/%.*/.${EXTENSION}}"
+
+ echo "Output file: '${OUTPUT_DIRECTORY}${OUTPUT_FILENAME}'"
+
+ # The compilation has succeeded, so exit with success status code
+ exit $EVERYTHING_SUCCEEDED
+fi