build.sh (3977B)
1 #!/usr/bin/env bash 2 3 echo "Building specifications" 4 ORGDIR=$(pwd)/src/spec 5 SPECDIR=$(pwd)/docs/spec 6 7 # Write readme & html headers 8 cat src/html/index.html.head > docs/index.html 9 cat src/markdown/README.md.head > README.md 10 11 FIND=$(command -v gfind find | head -1) 12 13 ${FIND} ${ORGDIR} -maxdepth 1 -type d -regextype posix-egrep -regex '.*[0-9]{4}' | sort | while read spec; do 14 15 # Read specification document data 16 declare -A DATA 17 while read line; do 18 key=${line%%=*} 19 value=${line#*=} 20 if [ -z "$key" ]; then continue; fi 21 DATA["$key"]="$value" 22 done <<< "$(tool/ini.sh ${spec}/data.ini)" 23 24 # Show we're actually working 25 echo " ${DATA[identifier]}: ${DATA[title]}" 26 27 # Render readme & html entries 28 tool/template.sh -c ${spec}/data.ini src/html/index.html.entry >> docs/index.html 29 tool/template.sh -c ${spec}/data.ini src/markdown/README.md.entry >> README.md 30 31 # Skip rendering already-existing files 32 if [ -f "${SPECDIR}/${DATA[identifier]}.pdf" ]; then 33 continue; 34 fi 35 36 # Check how to render the document itself 37 filename=$(ls ${spec}/document.* | head -1) 38 case "${filename##*.}" in 39 tex) 40 pdflatex ${filename} >/dev/null 41 pdflatex ${filename} >/dev/null 42 cp document.pdf ${SPECDIR}/${DATA[identifier]}.pdf 43 rm -f *.pdf 44 rm -f *.aux 45 rm -f *.log 46 rm -f *.toc 47 ;; 48 txt) 49 # Include render data 50 tool/template.sh -c ${spec}/data.ini -p src/partial ${filename} > ${filename}.rendered 51 52 # Font: Courier 53 # 10pt font 54 # 12pt line height 55 # 80 characters per line 56 # 8 spaces per tab 57 # Based on A4 paper 58 59 # <0003 = 60 lines per page 60 # >=0003 = 63 lines per page 61 LPP=60 62 if [ "${DATA[identifier]}" -ge "3" ]; then 63 LPP=63 64 fi 65 66 # -c 81 because of a minor bug in text2pdf 67 text2pdf -f Courier -s 10 -v 12 -l $LPP -c 81 -t 8 -A 4 -T "${DATA[identifier]} - ${DATA[title]}" < ${filename}.rendered > ${SPECDIR}/${DATA[identifier]}.pdf 68 69 # Remove rendered version 70 rm ${filename}.rendered 71 ;; 72 md) 73 MD=$(command -v cmark smu | head -1) 74 MDFLAGS= 75 HDFLAGS= 76 if [ "cmark" = "$(basename ${MD})" ]; then MDFLAGS="${MDFLAGS} --unsafe"; fi 77 if [ "${DATA[identifier]}" -ge "1" ]; then HDFLAGS="${HDFLAGS} --left 1cm --top 1cm --right 1cm --bottom 1cm --links --firstpage p1"; fi 78 if [ -f "${spec}/abstract.md" ]; then 79 tool/template.sh -c ${spec}/data.ini -p src/partial ${spec}/abstract.md | ${MD} ${MDFLAGS} > ${spec}/abstract.html 80 HDFLAGS="${HDFLAGS} --titlefile ${spec}/abstract.html"; 81 else 82 HDFLAGS="${HDFLAGS} --no-title"; 83 fi 84 tool/template.sh -c ${spec}/data.ini -p src/partial ${filename} | ${MD} ${MDFLAGS} > ${filename}.html 85 htmldoc ${HDFLAGS} --charset utf-8 --textfont sans --size A4 -f ${SPECDIR}/${DATA[identifier]}.pdf ${filename}.html 86 rm -f "${spec}/abstract.html" 87 rm -f "${filename}.html" 88 ;; 89 hbs) 90 HDFLAGS= 91 if [ "${DATA[identifier]}" -ge "1" ]; then HDFLAGS="${HDFLAGS} --left 1cm --top 1cm --right 1cm --bottom 1cm --links --firstpage p1"; fi 92 if [ -f "${spec}/abstract.hbs" ]; then 93 tool/template.sh -c ${spec}/data.ini -p src/partial ${spec}/abstract.hbs | ${MD} ${MDFLAGS} > ${spec}/abstract.html 94 HDFLAGS="${HDFLAGS} --titlefile ${spec}/abstract.html"; 95 else 96 HDFLAGS="${HDFLAGS} --no-title"; 97 fi 98 tool/template.sh -c ${spec}/data.ini -p src/partial ${filename} > ${filename}.html 99 htmldoc ${HDFLAGS} --charset utf-8 --textfont sans --size A4 -f ${SPECDIR}/${DATA[identifier]}.pdf ${filename}.html 100 rm -f "${spec}/abstract.html" 101 rm -f "${filename}.html" 102 ;; 103 rendered) 104 # Skip 105 ;; 106 *) 107 # echo "Unknown document type: ${filename##*.}" 1>&2 108 # exit 1 109 esac 110 done 111 112 # Write readme & html footers 113 cat src/html/index.html.tail >> docs/index.html 114 cat src/markdown/README.md.tail >> README.md