#!/usr/local/bin/bash ## ############################################################# ## Constructs a latex file with all Adresses in ## ~/.adressen ## ## By default, the resulting file is ## ~/out/ads.ps ## ------------------------------------------------------------------------- ## ## Usage: ## printads [switches] arg ## ## Frozen Versions: ## ## Relies on: (see help description) ## ## ############################################################# ## @TABLE OF CONTENTS: [TOCD: 20:22 30 May 2003] ## ## [1] -- FUNCTIONS -------------------------------------------------- ## [1.1] Usage and Help -------------------------- ## [1.2] General Aux functions ------------------- ## [1.3] -- other aux functions ------------------ ## [2] -- READ OPTIONS ----------------------------------------------- ## [2.1] -- REQUIRED SUB-SCRIPTS and UNIX FUNCTIONS ## [2.2] -- PROPAGATE OPTIONS -------------------- ## [2.3] SPAM: Show all settings ----------------- ## [2.4] -- Sanity checks ------------------------ ## [3] == START MAIN ================================================= ## [3.1] Compile LaTeX ## [3.2] End ## ########################################################## ## @FILE: printads ## @PLACE: *unkown* ## @FORMAT: Bash Script ## @AUTHOR: M. Oliver M'o'ller ## @BEGUN: Sun May 25 14:56:06 2003 ## @VERSION: V1.0alpha Fri May 30 21:07:18 2003 ## ############################################################# ## SHELL=/usr/local/bin/bash ## -- ELEMENTARIES -------------------------------------------------------- ## ## Shell settings INFILE="${HOME}/.adressen"; WORKING_DIR="${HOME}/out"; VERBOSE=false; QUIET=false; HERE=`dirname $0`; ## ---------------------------------------------------- VERSION_NUMBER="V1.0alpha "; VERSION_DATE="Fri May 30 21:07:18 2003" ; VERSION="${VERSION_NUMBER} ${VERSION_DATE}"; ## ---------------------------------------------------- TEX_FILENAME="printads_tmp.$$.tex" OUT_FILENAME="ads.ps" FONTSIZE="3pt" WIDTH_FRACTION=0.08 MAX_LENGTH_SINGLE_LINE=40 IGNORE_PHONE_NUMBERS=false; COLUMNS_PER_LINE=6; LINE_SKIP=-5pt; SELECT=false; EXCLUDE=false; REMOVE_TMP_FILES=true; PRINT_IMMEDIATELY=false; GHOSTVIEW=ghostview; ## ################################################################### ## [1] -- FUNCTIONS -------------------------------------------------- ## ################################################################### ## ############################################### ## [1.1] Usage and Help -------------------------- ## ############################################### function print_usage { echo "printads (${VERSION})" 1>&2; echo "" 1>&2; echo "usage: printads [hv] " 1>&2; echo " -f FILE : use FILE for input addresses" 1>&2; echo " -c CHARS : truncate every line after CHARS characters (default: ${MAX_LENGTH_SINGLE_LINE})" 1>&2; echo " -C COLUMNS : sets the number of colums per line to COLUMNS (default: ${COLUMNS_PER_LINE})" 1>&2; echo " -w WIDTH : width fraction of a column (default: ${WIDTH_FRACTION})" 1>&2; echo " -l LDIST : basic lines distance (default: ${LINE_SKIP})" 1>&2; echo " -fs FONTSIZE : use FONTSIZE font (default: ${FONTSIZE}" 1>&2; echo " -s : select - take only entries marked with +" 1>&2; echo " -e : exclude - ignore entries marked with -" 1>&2; echo " -ip : ignore phone numbers (default: take)" 1>&2; echo " -nr : do not remove temporary files" 1>&2; echo " -p : sent to printer immediately (default: no)" 1>&2; echo " -h : print help" 1>&2; echo " -v : verbose on" 1>&2; echo " --version : print version" 1>&2; } function print_help { print_usage; echo "description:"; echo " A textual input file (by default ${IN_FILE}) is converted into a LaTeX"; echo " file, where each entry is typeset in small box with tiny font"; echo " "; echo " [OPTIONAL MARKER: -|+]"; echo " NAME SURNAME"; echo " (ADDRESS LINE)*"; echo " [OPTIONAL PHONE NUMBER]"; echo " "; echo " The options are mainly to adjust the text box size and offsets."; echo " "; echo " If option -e is set, entries marked with - are excluded"; echo " If option -s is set, only entries marked with + are taken"; echo " If ignore phone numbers is set, every line not containing an alphabetic char"; echo " is ignored."; echo " "; echo " By default, the resulting .ps file is opened in a viewer; if -p is set,"; echo " the result is sent to the standard printer instead."; echo " "; echo "relies on: bc sed head latex dvips"; echo ""; echo "author: M. Oliver M'o'ller "; exit 1; } ## ############################################### ## [1.2] General Aux functions ------------------- ## ############################################### function abort { ## -- clear the temp files -- echo "$0: ERROR: $1" 1>&2; echo "** printads aborted." 1>&2; echo "** consider removing tmp files: rm ${WORKING_DIR}/${RAW_FILENAME}.*" 1>&2; exit 1; } function confirm() { echo -n "$1 (y/N)? " >&2 read CONFIRM_QUERY_ANSWER case $CONFIRM_QUERY_ANSWER in y ) true;; Y ) true;; yes ) true;; YES ) true;; * ) false;; esac } function get_version_number_of_script { ## 0.00: nonexistent! PROG=$(which $1 2>/dev/null); if [ ! -z "${PROG}" ] && [ -x "${PROG}" ]; then $PROG --version 2>/dev/null |sed -e "s/@//g" |sed -e "s/\\./@/1" | sed -e "s/[^0123456789@]//g" | sed -e "s/@/./g" ; else echo "0.00"; fi } function compute_minus { ## minus, scaled (used for comparison of floats) echo "10000000.0*(($1)-($2))" | bc -l | cut -d'.' -f 1; } function set_noswitch_arguments { abort "surplus argument: $1"; } ## ############################################### ## [1.3] -- other aux functions ------------------ ## ############################################### function pushout_line { ## uses values of ## LAST_WAS_SEPARATION ## VSQUEEZE ## SEP_STRING_MARKER ## BACKSLASH ## f ## and all paramters if ${IGNORE_PHONE_NUMBERS} && ( [ -z "$(echo $f | grep '[a-yA-Z]')" ] || [ ! -z "$(echo $f | grep '^[+]')" ] ); then : else echo "TAKING: $f"; # if ${LAST_WAS_SEPARATION}; then # echo "${BACKSLASH}vspace*{${VSQUEESE}}%" >> ${TEX_FILENAME}; # fi; echo $f \ |head -c ${MAX_LENGTH_SINGLE_LINE} \ |sed 's/~/ /g' \ |sed 's/&/\\&/g' \ |sed 's/#/\\#/g' \ |sed 's//\\frq{}/g' \ >> ${TEX_FILENAME} ; echo "${BACKSLASH}${BACKSLASH}[${VDIST}]" >> ${TEX_FILENAME} ; fi } ## ################################################################### ## [2] -- READ OPTIONS ----------------------------------------------- ## ################################################################### AWAIT=""; for switch in $@; do case $AWAIT in -f ) AWAIT=""; INFILE=$switch;; -c ) AWAIT=""; MAX_LENGTH_SINGLE_LINE=$switch;; -l ) AWAIT=""; LINE_SKIP=$switch;; -w ) AWAIT=""; WIDTH_FRACTION=$switch;; -C ) AWAIT=""; COLUMNS_PER_LINE=$switch;; -fs ) AWAIT=""; FONTSIZE=$switch;; * ) case $switch in --help ) print_help;; -help ) print_help;; -c ) AWAIT="-c";; -w ) AWAIT="-w";; -l ) AWAIT="-l";; -C ) AWAIT="-C";; -f ) AWAIT="-f";; -s ) SELECT=true;; -e ) EXCLUDE=true;; -h ) print_help;; -ip ) IGNORE_PHONE_NUMBERS=true;; -nr ) REMOVE_TMP_FILES=false;; -fs ) AWAIT="-fs";; -p ) PRINT_IMMEDIATELY=true;; -v ) VERBOSE=true;; -q ) QUIET=true;; --version ) echo "Version: $VERSION";exit 0;; -* ) echo "Unknown switch: $switch";print_usage;exit 1;; * ) set_noswitch_arguments $switch;; esac esac done; ## ############################################### ## [2.1] -- REQUIRED SUB-SCRIPTS and UNIX FUNCTIONS ## ############################################### #SCRIPT_VERSION=$(get_version_number_of_script fig2eps); #if [ $(compute_minus $SCRIPT_VERSION 1.0) -lt 0 ]; then # echo "$0: Need SCRIPT 1.0 or higher. " 1>&2; # echo "Sorry. " 1>&2; # exit 1; #fi; ## ############################################### ## [2.2] -- PROPAGATE OPTIONS -------------------- ## ############################################### RAW_FILENAME=${TEX_FILENAME:0:$((${#TEX_FILENAME}-4))} ; case ${INFILE} in [^/]*) INFILE=${PWD}/${INFILE};; esac if which ${GHOSTVIEW}; then : else if which gv >/dev/null 2>/dev/null; then GHOSTVIEW=`which gv`; else GHOSTVIEW=""; fi fi; ## ############################################### ## [2.3] SPAM: Show all settings ----------------- ## ############################################### if $VERBOSE; then echo "== paramter settings as used: =================" ; echo "INFILE: ${INFILE}" ; echo "COLUMNS_PER_LINE: ${COLUMNS_PER_LINE}" ; echo "WIDTH_FRACTION: ${WIDTH_FRACTION}" ; echo "LINE_SKIP: ${LINE_SKIP}" ; echo "MAX_LENGTH_SINGLE_LINE: ${MAX_LENGTH_SINGLE_LINE}" ; echo "FONTSIZE: ${FONTSIZE}" ; echo "IGNORE_PHONE_NUMBERS: ${IGNORE_PHONE_NUMBERS}" ; echo "SELECT: ${SELECT}" ; echo "EXCLUDE: ${EXCLUDE}" ; echo "WORKING_DIR: ${WORKING_DIR}" ; echo "TEX_FILENAME: ${TEX_FILENAME}" ; echo "RAW_FILENAME: ${RAW_FILENAME}" ; echo "REMOVE_TMP_FILES: ${REMOVE_TMP_FILES}" ; echo "PRINT_IMMEDIATELY: ${PRINT_IMMEDIATELY}" ; echo "QUIET: $QUIET" ; echo "VERBOSE: $VERBOSE" ; echo "VERSION: $VERSION" ; echo "===============================================" ; fi; ## ############################################### ## [2.4] -- Sanity checks ------------------------ ## ############################################### if [ ! -e ${INFILE} ]; then abort "Source file ${INFILE} does not exist."; fi if [ ! -d ${WORKING_DIR} ]; then abort "working directory ${WORKING_DIR} does not exist."; fi ## ################################################################### ## [3] == START MAIN ================================================= ## ################################################################### BACKSLASH="\\" SEP_STRING_MARKER="%--next-entry" MINIPAGE_WIDTH="${WIDTH_FRACTION}${BACKSLASH}linewidth"; DIST="${BACKSLASH}hspace*{1pt}" VSQUEESE="-2.5mm" VSQUEESE_END="0mm" VDIST="0mm" HEAD_STRING="${BACKSLASH}begin{minipage}[t]{${MINIPAGE_WIDTH}}${BACKSLASH}setlength{${BACKSLASH}baselineskip}{${LINE_SKIP}}${BACKSLASH}vspace*{${VSQUEESE}}%" TAIL_STRING="${BACKSLASH}vspace*{${VSQUEESE_END}}% ${BACKSLASH}end{minipage}" pushd ${WORKING_DIR} COUNT=0; LAST_WAS_SEPARATION=true; IGNORE=false; ## -- LaTex Preamble ------------------------------------------- echo "%% document source created by printads on `date`" > ${TEX_FILENAME} ; echo "${BACKSLASH}documentclass{article}" >> ${TEX_FILENAME} ; echo "${BACKSLASH}usepackage{fullpage}" >> ${TEX_FILENAME} ; echo "${BACKSLASH}usepackage[latin1]{inputenc} %% -- accepting umlauts (öäüßøåæ, etc.)" >> ${TEX_FILENAME} ; echo "${BACKSLASH}usepackage[german]{babel}" >> ${TEX_FILENAME} ; echo "${BACKSLASH}usepackage{longtable}" >> ${TEX_FILENAME} ; echo "" >> ${TEX_FILENAME} ; echo "${BACKSLASH}usepackage{verbatim} %% -- gives ${BACKSLASH}verbatiminput" >> ${TEX_FILENAME} ; echo "${BACKSLASH}pagestyle{empty}" >> ${TEX_FILENAME} ; echo "${BACKSLASH}newfont{${BACKSLASH}verytiny }{cmr10 at ${FONTSIZE}}" >> ${TEX_FILENAME} ; echo "${BACKSLASH}begin{document}" >> ${TEX_FILENAME} ; echo "${BACKSLASH}verytiny" >> ${TEX_FILENAME} ; echo -n "${BACKSLASH}begin{tabular}{@{${DIST}}|@{${DIST}}" >> ${TEX_FILENAME} ; I=0; while [ $I -lt ${COLUMNS_PER_LINE} ]; do echo -n "l@{${DIST}}|@{${DIST}}" >> ${TEX_FILENAME} ; I=$(($I+1)); done echo "@{}} ${BACKSLASH}hline%" >> ${TEX_FILENAME} echo ${HEAD_STRING} |sed 's/\\\\/\\/g' >> ${TEX_FILENAME} ; for f in $(cat ${INFILE} \ | sed 's/ /~/g' \ | sed 's/^#.*$//g' \ | sed 's/^[~][~]*$//g' \ | sed "s/^$/${SEP_STRING_MARKER}/g" \ ); do ## ----------------------------------------------------------- if [ ! -z $(echo $f | grep "${SEP_STRING_MARKER}") ]; then if ${LAST_WAS_SEPARATION} || ${IGNORE}; then echo "SKIPPPED: $f"; IGNORE=false; LAST_WAS_SEPARATION=true; else echo "SEPARATING: $f"; for f in ${TAIL_STRING}; do echo $f |sed 's/\\\\/\\/g' >> ${TEX_FILENAME} ; done COUNT=$(((1+${COUNT}) % ${COLUMNS_PER_LINE})); if [ ${COUNT} == 0 ]; then echo "${BACKSLASH}${BACKSLASH}${BACKSLASH}hline%" >> ${TEX_FILENAME} ; else echo "&%" >> ${TEX_FILENAME} ; fi echo "${SEP_STRING_MARKER}" >> ${TEX_FILENAME} ; echo "${HEAD_STRING}" >> ${TEX_FILENAME} ; LAST_WAS_SEPARATION=true; fi else ## -- hit regular entry ------------------------------------ if ${LAST_WAS_SEPARATION}; then IGNORE=${SELECT}; case $f in -) if ${EXCLUDE}; then echo "----- excluding";IGNORE=true; fi;; +) echo "+++++ starting selected";IGNORE=false;; *) if ! ${IGNORE}; then pushout_line; fi;; esac LAST_WAS_SEPARATION=false; else ## -- take it or leave it ---------- if ! ${IGNORE}; then pushout_line; LAST_WAS_SEPARATION=false; fi fi fi ## ----------------------------------------------------------- done for f in ${TAIL_STRING}; do echo $f |sed 's/\\\\/\\/g' >> ${TEX_FILENAME} ; done ## -- fill empty fields ---------------------------------------------------- while [ ${COUNT} -lt $((${COLUMNS_PER_LINE}-1)) ]; do echo "& " >> ${TEX_FILENAME}; COUNT=$((1+${COUNT})); done ## -- end table and document ----------------------------------------------- echo "${BACKSLASH}${BACKSLASH}${BACKSLASH}hline ${BACKSLASH}end{tabular}" >> ${TEX_FILENAME} ; echo "${BACKSLASH}end{document}" >> ${TEX_FILENAME} ; ## ############################################### ## [3.1] Compile LaTeX ## ############################################### if latex ${TEX_FILENAME}; then if dvips -o${OUT_FILENAME} ${RAW_FILENAME}.dvi; then ## ------------------------------------------------ echo "** Succesfully created ${WORKING_DIR}/${OUT_FILENAME}"; if ${PRINT_IMMEDIATELY}; then echo "** sending to printer..."; lpr ${WORKING_DIR}/${OUT_FILENAME} ; sleep 1; lpq else if which ${GHOSTVIEW}; then echo "** viewing ....(press q to quit)"; ${GHOSTVIEW} ${WORKING_DIR}/${OUT_FILENAME} ; else echo "** no viewer found."; fi fi ## --------------------------------- if ${REMOVE_TMP_FILES}; then rm ${TEX_FILENAME}; rm ${RAW_FILENAME}.dvi; rm ${RAW_FILENAME}.log; rm ${RAW_FILENAME}.aux; else echo "** consider removing tmp files: rm ${WORKING_DIR}/${RAW_FILENAME}.*" 1>&2; fi ## ------------------------------------------------ else abort "dvips failed." fi else abort "Trouble with tex-ing; missing package?" fi ## ############################################### ## [3.2] End ## ############################################### popd >/dev/null 2>/dev/null ; ## ---------------------------------------------------- if ! ${QUIET}; then echo "** $0: done."; fi; exit 0; ## --- OK ------------------------------------- ### Local Variables: *** ### mode: lisp *** ### eval: (defun update-global-date () (let ((pos (point-marker))) (goto-char (point-min)) (if (search-forward-regexp "^VERSION_DATE=" (point-max) t) (progn (kill-line) (insert (format "\"%s\" ;" (current-time-string))) (basic-save-buffer) (message "** Version Date Updated."))) (goto-char pos))) *** ### eval: (defun new-global-hh-insert-disclaimer () (interactive) (insert-disclaimer) (update-global-date) (ksh-mode)(font-lock-mode) (local-set-key [f4] #'new-global-hh-insert-disclaimer)) *** ### eval: (progn (ksh-mode)(font-lock-mode) (local-set-key [f4] #'new-global-hh-insert-disclaimer)) *** ### comment-column:0 *** ### comment-start: "### " *** ### comment-end:"***" *** ### End: ***