diff --git a/tools/add_libconcept.sh b/tools/add_libconcept.sh new file mode 100755 index 0000000000..ff32695e1a --- /dev/null +++ b/tools/add_libconcept.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +usage() { + cat < + +Greedy application of \\libconcept and \\exposconcept macros to anything that +looks like a concept. +EOF +} + +case "$1" in + -h|--help|"") + usage + exit 1 + ;; +esac + +source_dir="${0%/*}/../source" + +concepts=$(grep -oh 'deflibconcept{[a-z_:]*}' "$source_dir"/*.tex \ + | sed -e 's/^deflibconcept{\(.*\)}$/\1/' \ + | sed -e ':a; N; $!ba; s/\n/\\|/g' +) + +exposconcepts=$(grep -oh 'defexposconceptn\?c\?{[a-z-]*}' "$source_dir"/*.tex \ + | sed -e 's/^defexposconceptn\?c\?{\(.*\)}$/\1/' \ + | sed -e ':a; N; $!ba; s/\n/\\|/g' +) + +sed -e 's,\([^\\{.-]\)\<\('"$concepts"'\)\>\([^-]\),\1@\\libconcept{\2}@\3,g' \ + -e 's,\([^\\{.-]\)\<\('"$exposconcepts"'\)\>\([^-]\),\1@\\exposconcept{\2}@\3,g' \ + -e 's,\\exposid\(nc\)\?{\('"$concepts"'\)},\\libconcept{\2},g' \ + -e 's,\\exposid\(nc\)\?{\('"$exposconcepts"'\)},\\exposconcept\1{\2},g' \ + -e 's,\<\(The\|the\|or\|valid\|supplied\) @\\libconcept{range}@,\1 range,g' \ + -e 's,\<\(The\|the\|following\|equivalence\) @\\libconcept{relation}@,\1 relation,g' \ + -e 's,\<\(The\|the\|calling\) @\\libconcept{regular}@,\1 regular,g' \ + -e 's,\<\(trivially\) @\\libconcept{copyable}@,\1 copyable,g' \ + -e 's,@\\libconcept{integral}@ \(promotion\|value\|of\|constant\|constants\|type\|types\)\>,integral \1,g' \ + -e 's,@\\libconcept{view}@ \(the\|of\)\>,view \1,g' \ + "$@" diff --git a/tools/bs_to_tex.sh b/tools/bs_to_tex.sh new file mode 100755 index 0000000000..ac133588a7 --- /dev/null +++ b/tools/bs_to_tex.sh @@ -0,0 +1,51 @@ +#!/bin/zsh + +itemize=0 +empty=0 + +sed -e 's,
,\\begin{itemdecl},g' \
+    -e 's,
,\\end{itemdecl},g' \ + -e 's,,,g' \ + -e 's,,`,g' \ + -e 's,// exposition only,// \\expos,g' \ + -e 's,implementation-defined,@\\impdefx{TODO}@,g' \ + -e 's,see below,@\\seebelow@,g' \ + -e 's,concept \([a-z]\+-[a-z-]\+\),concept @\\defexposconcept{\1}@,g' \ + -e 's,\([a-z]\+-[a-z-]\+\),@\\exposid{\1}@,g' \ + -e 's,Constraints:,\\pnum\n\\constraints,g' \ + -e 's,Effects:,\\pnum\n\\effects,g' \ + -e 's,Mandates:,\\pnum\n\\mandates,g' \ + -e 's,Preconditions:,\\pnum\n\\expects,g' \ + -e 's,Remarks:,\\pnum\n\\remarks,g' \ + -e 's,Returns:,\\pnum\n\\returns,g' \ + -e 's,Throws:,\\pnum\n\\throws,g' \ + -e 's,,,g' \ + -e 's,<,<,g' \ + -e 's,`i`th,#iiiiiiiiith#,g' \ + -e 's,`i`,i,g' \ + -e 's,// \[\([.a-z]\+\)],// \\ref{\1},g' \ + -e 's, *(\[\([.a-z]\+\)]),\\iref{\1},g' \ + -e 's,\,$i$,g' \ + -e 's,#iiiiiiiiith#,$i^\\text{th}$,g' \ + -e 's,`\[\([^\,]\+\)\, *\([^`]\+\))`,\\range{\1}{\2},' \ + -e 's,`\[\([^\,]\+\)\, *\([^`]\+\)]`,\\crange{\1}{\2},' \ + -e 's,`\([^`]\+\)`,\\tcode{\1},g' \ + $1 | while IFS='' read -r line; do + if [[ "$line" =~ '^- ' ]]; then + if ((!itemize)); then + itemize=1 + echo -E '\begin{itemize}' + fi + echo -E "\item${line#-}" + continue + elif ((itemize)); then + echo -E '\end{itemize}' + itemize=0 + elif [[ -z "$line" ]]; then + ((empty)) && continue + empty=1 + elif ((empty)); then + empty=0 + fi + echo -E "$line" + done