specifications

Specification and standard documents
git clone git://git.finwo.net/misc/specifications
Log | Files | Refs | README | LICENSE

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