From a75d18cc0e58ba911c2e8402b12a6fbddd7116fe Mon Sep 17 00:00:00 2001 From: Matthew Krupcale Date: Wed, 13 Mar 2019 13:15:16 -0400 Subject: Add support for LaTeX documentation. * doc/.gitignore: Ignore .tex output * doc/cli.sh: Generate LaTeX man pages and documentation and run through pdflatex * doc/{doc,man}-{prologue,epilogue}.tex: Symlink to prologues and epilogues --- doc/.gitignore | 5 +++ doc/cli.sh | 115 ++++++++++++++++++++++++++++++++++++++++++++++----- doc/doc-epilogue.tex | 1 + doc/doc-prologue.tex | 1 + doc/man-epilogue.tex | 1 + doc/man-prologue.tex | 1 + 6 files changed, 114 insertions(+), 10 deletions(-) create mode 120000 doc/doc-epilogue.tex create mode 120000 doc/doc-prologue.tex create mode 120000 doc/man-epilogue.tex create mode 120000 doc/man-prologue.tex diff --git a/doc/.gitignore b/doc/.gitignore index 7b6d42a..da1819d 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -1,5 +1,10 @@ bpkg*.xhtml +bpkg*.tex bpkg*.1 build2-package-manager-manual*.ps build2-package-manager-manual*.pdf build2-package-manager-manual.xhtml +build2-package-manager-manual*.tex +*.ps +*.pdf + diff --git a/doc/cli.sh b/doc/cli.sh index 013f0fa..87925b5 100755 --- a/doc/cli.sh +++ b/doc/cli.sh @@ -12,10 +12,11 @@ function error () { info "$*"; exit 1; } while [ $# -gt 0 ]; do case $1 in --clean) - rm -f bpkg*.xhtml bpkg*.1 + rm -f bpkg*.xhtml bpkg*.tex bpkg*.1 rm -f build2-package-manager-manual*.ps \ - build2-package-manager-manual*.pdf \ - build2-package-manager-manual.xhtml + build2-package-manager-manual*.pdf \ + build2-package-manager-manual.xhtml \ + build2-package-manager-manual.tex exit 0 ;; *) @@ -36,14 +37,28 @@ function compile () shift done + for i in "${!o[@]}"; do + case "${o[$i]}" in + --output-prefix) + local prefix="${o[$((i+1))]}" + ;; + --output-suffix) + local suffix="${o[$((i+1))]}" + ;; + esac + done + cli -I .. -v project="bpkg" -v version="$version" -v date="$date" \ --include-base-last "${o[@]}" --generate-html --html-prologue-file \ - man-prologue.xhtml --html-epilogue-file man-epilogue.xhtml --html-suffix .xhtml \ +man-prologue.xhtml --html-epilogue-file man-epilogue.xhtml --html-suffix .xhtml \ --link-regex '%b([-.].+)%../../build2/doc/b$1%' \ --link-regex '%b(#.+)?%../../build2/doc/build2-build-system-manual.xhtml$1%' \ --link-regex '%bpkg(#.+)?%build2-package-manager-manual.xhtml$1%' \ ../bpkg/$n.cli + compile_latex "$n" "$prefix" "$suffix" "a4" "${o[@]}" + compile_latex "$n" "$prefix" "$suffix" "letter" "${o[@]}" + cli -I .. -v project="bpkg" -v version="$version" -v date="$date" \ --include-base-last "${o[@]}" --generate-man --man-prologue-file \ man-prologue.1 --man-epilogue-file man-epilogue.1 --man-suffix .1 \ @@ -52,6 +67,44 @@ man-prologue.1 --man-epilogue-file man-epilogue.1 --man-suffix .1 \ ../bpkg/$n.cli } +function compile_latex () # +{ + local n=$1; shift + local prefix=$1; shift + local suffix=$1; shift + local paper=$1; shift + local o=("$@") + + cli -I .. -v project="bpkg" -v version="$version" -v date="$date" \ +--include-base-last "${o[@]}" --generate-latex --latex-prologue-file \ +man-prologue.tex --latex-epilogue-file man-epilogue.tex \ +--latex-section-map "0=chapter*" --latex-section-map "1=chapter*" \ +--latex-section-map "H=part*" --latex-section-map "h=section*" \ +--latex-section-map "2=subsection*" \ +--link-regex '%bpkg(#.+)?%build2-package-manager-manual-'"$paper"'.pdf$1%' \ +--link-regex '%bpkg([-.].+)?\.pdf%bpkg$1-'"$paper"'.pdf%' \ +--link-regex '%b([-.].+)%../../build2/doc/b-'"$paper"'$1%' \ +--link-regex '%b(#.+)?%../../build2/doc/build2-build-system-manual-'"$paper"'.pdf$1%' \ +../bpkg/$n.cli + + run_pdflatex "$prefix$n$suffix" "$paper" +} + +function run_pdflatex () # +{ + local n="$1" + local paper="$2" + + if [ "$paper" == "letter" ]; then + sed -i 's/a4paper/letterpaper/' "$n.tex" + fi + + pdflatex -output-format dvi -jobname="$n-$paper" "$n" + dvips "$n-$paper.dvi" + pdflatex -output-format pdf -jobname="$n-$paper" "$n" + rm -f "$n-$paper".{aux,dvi,log,out,toc} +} + o="--output-prefix bpkg- --class-doc bpkg::common_options=short" # A few special cases. @@ -73,7 +126,25 @@ done # Manual. # -cli -I .. \ + +function compile_doc () # +{ + local f="$1" + local prefix="$2" + local suffix="$3" + + compile_html_doc "$f" "$prefix" "$suffix" + compile_latex_doc "$f" "$prefix" "$suffix" "a4" + compile_latex_doc "$f" "$prefix" "$suffix" "letter" +} + +function compile_html_doc () # +{ + local f="$1" + local prefix="$2" + local suffix="$3" + + cli -I .. \ -v version="$(echo "$version" | sed -e 's/^\([^.]*\.[^.]*\).*/\1/')" \ -v date="$date" \ --generate-html --html-suffix .xhtml \ @@ -81,10 +152,34 @@ cli -I .. \ --html-epilogue-file doc-epilogue.xhtml \ --link-regex '%b([-.].+)%../../build2/doc/b$1%' \ --link-regex '%b(#.+)?%../../build2/doc/build2-build-system-manual.xhtml$1%' \ ---output-prefix build2-package-manager- manual.cli +--output-prefix "$prefix" \ +--output-suffix "$suffix" \ +"$f" +} + +function compile_latex_doc () # +{ + local f="$1" + local prefix="$2" + local suffix="$3" + local paper="$4" -html2ps -f doc.html2ps:a4.html2ps -o build2-package-manager-manual-a4.ps build2-package-manager-manual.xhtml -ps2pdf14 -sPAPERSIZE=a4 -dOptimize=true -dEmbedAllFonts=true build2-package-manager-manual-a4.ps build2-package-manager-manual-a4.pdf + cli -I .. \ +-v version="$(echo "$version" | sed -e 's/^\([^.]*\.[^.]*\).*/\1/')" \ +-v date="$date" \ +--generate-latex \ +--latex-prologue-file doc-prologue.tex \ +--latex-epilogue-file doc-epilogue.tex \ +--link-regex '%bpkg([-.].+)?\.pdf%bpkg$1-'"$paper"'.pdf%' \ +--link-regex '%b([-.].+)%../../build2/doc/b-'"$paper"'$1%' \ +--link-regex '%b(#.+)?%../../build2/doc/build2-build-system-manual-'"$paper"'.pdf$1%' \ +--output-prefix "$prefix" \ +--output-suffix "$suffix" \ +"$f" + + local n="$2$(basename -s .cli $1)$3" + + run_pdflatex "$n" "$paper" +} -html2ps -f doc.html2ps:letter.html2ps -o build2-package-manager-manual-letter.ps build2-package-manager-manual.xhtml -ps2pdf14 -sPAPERSIZE=letter -dOptimize=true -dEmbedAllFonts=true build2-package-manager-manual-letter.ps build2-package-manager-manual-letter.pdf +compile_doc manual.cli 'build2-package-manager-' diff --git a/doc/doc-epilogue.tex b/doc/doc-epilogue.tex new file mode 120000 index 0000000..b17b5d1 --- /dev/null +++ b/doc/doc-epilogue.tex @@ -0,0 +1 @@ +style/doc-epilogue.tex \ No newline at end of file diff --git a/doc/doc-prologue.tex b/doc/doc-prologue.tex new file mode 120000 index 0000000..b5d4e00 --- /dev/null +++ b/doc/doc-prologue.tex @@ -0,0 +1 @@ +style/doc-prologue.tex \ No newline at end of file diff --git a/doc/man-epilogue.tex b/doc/man-epilogue.tex new file mode 120000 index 0000000..4793611 --- /dev/null +++ b/doc/man-epilogue.tex @@ -0,0 +1 @@ +style/man-epilogue.tex \ No newline at end of file diff --git a/doc/man-prologue.tex b/doc/man-prologue.tex new file mode 120000 index 0000000..258684a --- /dev/null +++ b/doc/man-prologue.tex @@ -0,0 +1 @@ +style/man-prologue.tex \ No newline at end of file -- cgit