summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/photobook/scripts/cls2tex.sh
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/photobook/scripts/cls2tex.sh')
-rwxr-xr-xmacros/latex/contrib/photobook/scripts/cls2tex.sh156
1 files changed, 156 insertions, 0 deletions
diff --git a/macros/latex/contrib/photobook/scripts/cls2tex.sh b/macros/latex/contrib/photobook/scripts/cls2tex.sh
new file mode 100755
index 0000000000..8ec15ebf45
--- /dev/null
+++ b/macros/latex/contrib/photobook/scripts/cls2tex.sh
@@ -0,0 +1,156 @@
+#!/usr/bin/env bash
+#----------------------------------------------------------------------
+
+CMD="$0 $@"
+
+SCRIPT_NAME=$(basename $0)
+
+printusage(){
+ echo "Usage:"
+ echo " $SCRIPT_NAME [OPTIONS] [[INPUT] OUTPUT]"
+}
+
+printhelp(){
+ echo "Generate docs from latex package/class"
+ echo
+ printusage
+ echo
+ echo "Options:"
+ echo " -h | --help Show this message and exit"
+ echo " -p | --prefix PREFIX"
+ echo " Set the doc comment PREFIX (default: \"%\")"
+ echo " -s | --strip Strip docs out"
+ echo " -n | --no-msg Don't add the \"generated with\" message to output"
+ echo
+ echo "This will:"
+ echo " - read the INPUT"
+ echo " - keep lines starting with \\def\\<module-name>@[A-Z]\\+"
+ echo " - keep lines starting with '%%'"
+ echo " - %%%%% Text -> \\subsection(Text)"
+ echo " - %%%% Text -> \\section(Text)"
+ echo " - %% >> code -> \\begin{verbatim}code\\end{verbatim}"
+ echo " - write the result to OUTPUT"
+ echo
+ echo "If no OUTPUT is given $SCRIPT_NAME will read stdout. If no INPUT"
+ echo "is given $SCRIPT_NAME will read stdin."
+ echo
+ echo "PREFIX can replace the second \"%\" in the above patterns to make it"
+ echo "possible to integrate multiple layers of documentation in one file"
+ echo "and to integrate them in various ways, for example, in the photobook"
+ echo "document class documentation \"M\" prefix is used to indicate"
+ echo "meta-command docs, this enables us to document them in the relevant"
+ echo "location (i.e. at the implementation) in source but move the docs to"
+ echo "a unified location in docs, effectively decoupling the source and doc"
+ echo "structure when needed."
+ echo
+ echo "Strip mode is the reverse of of the default, it will strip out docs"
+ echo "and empty lines, keeping only the actual code and code comments."
+ echo
+ echo "NOTE: stripping will not remove non-doc comments."
+ echo "NOTE: the idea of keeping latex docs in a latex file is far simpler"
+ echo " than all the stuff crammed into .dtx, at least for my needs:"
+ echo " - keep the code readable"
+ echo " - keep the docs readable"
+ echo " in both the repo and in installed form, so .dtx is not used."
+}
+
+# Usage: printerror MESSAGE...
+printerror(){
+ echo Error: $@
+ echo
+ printusage
+}
+
+# Usage: printmsg TEXT
+printmsg(){
+ # print message...
+ if [ -z $NO_MSG ] ; then
+ echo "%----------------------------------------------------------------------"
+ echo "% $1 file generated by:"
+ echo "% $CMD"
+ echo "% NOTE: multiple messages indicate multiple runs."
+ echo "%----------------------------------------------------------------------"
+ fi
+}
+
+
+
+#----------------------------------------------------------------------
+# Args and defaults...
+
+PREFIX=%
+
+while true ; do
+ case $1 in
+ -h|--help)
+ printhelp
+ exit
+ ;;
+ -p|--prefix)
+ PREFIX=$2
+ shift
+ shift
+ ;;
+ -s|--strip)
+ STRIP_DOC=1
+ shift
+ ;;
+ -n|--no-msg)
+ NO_MSG=1
+ shift
+ ;;
+
+ # handle unknown options...
+ -*|--*)
+ printerror "unknown option \"$1\""
+ exit
+ ;;
+
+ # non-flag, option parsing done...
+ *)
+ break
+ ;;
+ esac
+done
+
+INPUT=${1:-/dev/stdin}
+
+OUTPUT=${2:-/dev/stdout}
+
+
+# generate the module name...
+MODULE=$(basename "$INPUT")
+MODULE=${MODULE/.*/}
+
+
+#----------------------------------------------------------------------
+# do the work...
+
+# make docs...
+if [ -z $STRIP_DOC ] ; then
+ printmsg "Documentation" \
+ > "$OUTPUT"
+ cat "$INPUT" \
+ | egrep '(^%'$PREFIX'|^\\edef\\'$MODULE'@[A-Z][A-Z]+)' \
+ | sed 's/^\(\\edef\\\)'$MODULE'@/%'$PREFIX'\1/' \
+ | sed 's/%'$PREFIX'%%%% \(.*\)/%'$PREFIX'\\subsubsection{\1}\\label{subsubsec:\1}/' \
+ | sed 's/%'$PREFIX'%%% \(.*\)/%'$PREFIX'\\subsection{\1}\\label{subsec:\1}/' \
+ | sed 's/%'$PREFIX'%% \(.*\)/%'$PREFIX'\\section{\1}\\label{sec:\1}/' \
+ | sed 's/%'$PREFIX'\s\+>>\s\+\(.*\)/%'$PREFIX'\\begin{verbatim} \1 \\end{verbatim}/' \
+ | cut -c 3- - \
+ >> "$OUTPUT"
+
+# make stripped code...
+else
+ printmsg "Stripped code" \
+ > "$OUTPUT"
+ cat "$INPUT" \
+ | egrep -v '%'$PREFIX'' \
+ | egrep -v '^(\s*%)?\s*$' \
+ >> "$OUTPUT"
+fi
+
+
+
+#----------------------------------------------------------------------
+# vim:set ts=4 sw=4 nowrap :