Makefile 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. # Makefile for generating "manual.txt" and "manual.pdf" from "manual.pmd" and "zint.1" from "zint.1.pmd" using pandoc
  2. # Copyright (C) 2022-2024 <rstuart114@gmail.com>
  3. # vim: set ts=4 sw=4 noet :
  4. #
  5. # Requires a recent version of pandoc, plus pandoc-tablenos, xelatex and various other packages - see "README"
  6. # .svg images generated by "zint_images.sh"
  7. SOURCE = manual.pmd
  8. OUT_PDF = manual.pdf
  9. OUT_TXT = manual.txt
  10. INC_HEADER_PDF = inc_header_pdf.tex
  11. INC_BEFORE_BODY_PDF = inc_before_body_pdf.tex
  12. INC_PDF = --include-in-header $(INC_HEADER_PDF) --include-before-body $(INC_BEFORE_BODY_PDF)
  13. INCLUDES_TXT = inc_header_txt.tex
  14. INC_TXT = --include-in-header $(INCLUDES_TXT)
  15. SOURCE_MAN_PAGE = zint.1.pmd
  16. OUT_MAN_PAGE = zint.1
  17. IMAGES = \
  18. images/zint.png \
  19. images/zint-qt.png \
  20. images/gui_main.png \
  21. images/gui_delete.png \
  22. images/gui_zap.png \
  23. images/gui_menus.png \
  24. images/gui_composite.png \
  25. images/gui_segs.png \
  26. images/gui_c25inter.png \
  27. images/gui_aztec.png \
  28. images/gui_appearance.png \
  29. images/gui_scaling.png \
  30. images/gui_set_printing_scale.png \
  31. images/gui_black_eye.png \
  32. images/gui_white_eye.png \
  33. images/gui_swap.png \
  34. images/gui_colour.png \
  35. images/gui_data_dialog.png \
  36. images/gui_sequence.png \
  37. images/gui_export.png \
  38. images/gui_cli_equivalent.png \
  39. images/tcl_demo.png \
  40. images/pdf417_heightperrow.svg \
  41. images/code128_box.svg \
  42. images/qrcode_box.svg \
  43. images/code128_green.svg \
  44. images/code128_green_alpha.svg \
  45. images/code128_rotate90.svg \
  46. images/datamatrix_euro.svg \
  47. images/datamatrix_big5.svg \
  48. images/qrcode_binary_utf8.svg \
  49. images/codeone_s_dotty.svg \
  50. images/aztec_segs.svg \
  51. images/datamatrix_structapp.svg \
  52. images/code128_small_bold.svg \
  53. images/code11.svg \
  54. images/c25standard.svg \
  55. images/c25iata.svg \
  56. images/c25ind.svg \
  57. images/c25inter.svg \
  58. images/c25logic.svg \
  59. images/itf14.svg \
  60. images/itf14_border0.svg \
  61. images/dpleit.svg \
  62. images/dpident.svg \
  63. images/upca.svg \
  64. images/upca_5.svg \
  65. images/upce.svg \
  66. images/eanx13.svg \
  67. images/eanx5.svg \
  68. images/eanx8_5.svg \
  69. images/isbnx.svg \
  70. images/plessey.svg \
  71. images/msi_plessey.svg \
  72. images/telepen.svg \
  73. images/telepen_num.svg \
  74. images/code39.svg \
  75. images/excode39.svg \
  76. images/code93.svg \
  77. images/pzn.svg \
  78. images/logmars.svg \
  79. images/code32.svg \
  80. images/hibc_39.svg \
  81. images/vin.svg \
  82. images/codabar.svg \
  83. images/pharma.svg \
  84. images/code128.svg \
  85. images/code128ab.svg \
  86. images/gs1_128.svg \
  87. images/ean14.svg \
  88. images/nve18.svg \
  89. images/hibc_128.svg \
  90. images/dpd.svg \
  91. images/upu_s10.svg \
  92. images/dbar_omn.svg \
  93. images/dbar_truncated.svg \
  94. images/dbar_ltd.svg \
  95. images/dbar_exp.svg \
  96. images/koreapost.svg \
  97. images/channel.svg \
  98. images/bc412.svg \
  99. images/code128_stacked.svg \
  100. images/code128_stacked_sep2.svg \
  101. images/codablockf.svg \
  102. images/code16k.svg \
  103. images/pdf417.svg \
  104. images/pdf417comp.svg \
  105. images/micropdf417.svg \
  106. images/dbar_stk.svg \
  107. images/dbar_omnstk.svg \
  108. images/dbar_expstk.svg \
  109. images/code49.svg \
  110. images/eanx_cc_a.svg \
  111. images/eanx_cc_b.svg \
  112. images/gs1_128_cc_c.svg \
  113. images/pharma_two.svg \
  114. images/postnet.svg \
  115. images/planet.svg \
  116. images/auspost.svg \
  117. images/ausroute.svg \
  118. images/ausreply.svg \
  119. images/ausredirect.svg \
  120. images/kix.svg \
  121. images/rm4scc.svg \
  122. images/mailmark_4s.svg \
  123. images/usps_imail.svg \
  124. images/japanpost.svg \
  125. images/hibc_dm.svg \
  126. images/mailmark_2d.svg \
  127. images/qrcode.svg \
  128. images/microqr.svg \
  129. images/rmqr.svg \
  130. images/upnqr.svg \
  131. images/maxicode.svg \
  132. images/aztec.svg \
  133. images/azrune.svg \
  134. images/codeone.svg \
  135. images/gridmatrix.svg \
  136. images/dotcode.svg \
  137. images/hanxin.svg \
  138. images/ultra.svg \
  139. images/fim.svg \
  140. images/flat.svg \
  141. images/daft_rm4scc.svg
  142. MAIN_FONT = mainfont="TeX Gyre Pagella"
  143. MONO_FONT = monofont="Liberation Mono"
  144. CJK_FONT = CJKmainfont="WenQuanYi Micro Hei Mono"
  145. PDF_OPTS = --pdf-engine=xelatex --filter pandoc-tablenos -M tablenos-warning-level=0 \
  146. --highlight-style=haddock -V colorlinks -V geometry:margin=20mm -V papersize=a4 -V csquotes=true --dpi=300
  147. TEX_MAN_PAGE = zint.1.tex
  148. TXT_OPTS = --filter pandoc-tablenos -M tablenos-warning-level=0 --columns 80 --eol=lf -t plain
  149. MAN_PAGE_OPTS = -s -t man
  150. all : $(OUT_PDF) $(OUT_TXT) $(OUT_MAN_PAGE)
  151. $(OUT_PDF) : $(SOURCE) $(SOURCE_MAN_PAGE) $(INC_HEADER_PDF) $(INC_BEFORE_BODY_PDF) $(IMAGES) Makefile
  152. pandoc $(SOURCE_MAN_PAGE) -f markdown \
  153. $(PDF_OPTS) \
  154. -o $(TEX_MAN_PAGE)
  155. sed -i -e 's/section{/subsection{/' $(TEX_MAN_PAGE) # Convert man page sections to subsections
  156. pandoc $(SOURCE) -f markdown $(INC_PDF) --toc --toc-depth=4 \
  157. -V $(MAIN_FONT) -V $(MONO_FONT) -V $(CJK_FONT) -V block-headings \
  158. $(PDF_OPTS) \
  159. --include-after-body $(TEX_MAN_PAGE) \
  160. -o $(OUT_PDF)
  161. $(OUT_TXT) : $(SOURCE) $(SOURCE_MAN_PAGE) $(INCLUDES_TXT) Makefile
  162. pandoc $(SOURCE) $(SOURCE_MAN_PAGE) -f markdown $(INC_TXT) --toc --toc-depth=4 \
  163. -V $(MAIN_FONT) -V $(MONO_FONT) -V $(CJK_FONT) \
  164. $(TXT_OPTS) \
  165. -o $(OUT_TXT)
  166. # Indent Man Page sections in TOC, remove trailing spaces, echoed image tags, tbl: hashes
  167. # & clean up Table captions
  168. sed -i \
  169. -e 's/^\(- [A-Z][A-Z ]*\)$$/ \1/' \
  170. -e 's/ *$$//' \
  171. -e '/^\[.*\]$$/{N;N;s/\[\(.*\)\]\n\n\1/[\1]/;p;d}' \
  172. -e 's/ *{#tbl:[^}]*}//' \
  173. -e 's/: Table\xC2\xA0: \([^:]*\):/Table : \1/' \
  174. $(OUT_TXT)
  175. # Wrap
  176. sed -i '/.\{81\}/{s/.\{80\}/&\n/}' $(OUT_TXT)
  177. $(OUT_MAN_PAGE) : $(SOURCE_MAN_PAGE) Makefile
  178. pandoc $(SOURCE_MAN_PAGE) -f markdown \
  179. $(MAN_PAGE_OPTS) \
  180. -o $(OUT_MAN_PAGE)
  181. # For debugging
  182. manual.tex : $(SOURCE) $(SOURCE_MAN_PAGE) $(INC_HEADER_PDF) $(INC_BEFORE_BODY_PDF) $(IMAGES) Makefile
  183. pandoc $(SOURCE_MAN_PAGE) -f markdown \
  184. $(PDF_OPTS) \
  185. -o $(TEX_MAN_PAGE)
  186. sed -i -e 's/section{/subsection{/' $(TEX_MAN_PAGE) # Convert man page sections to subsections
  187. pandoc $(SOURCE) -f markdown $(INC_PDF) --toc --toc-depth=4 \
  188. -V $(MAIN_FONT) -V $(MONO_FONT) -V $(CJK_FONT) -V block-headings \
  189. $(PDF_OPTS) \
  190. --include-after-body $(TEX_MAN_PAGE) \
  191. -s -o manual.tex
  192. # HTML one-page (uses modified "templates/styles.html", unchanged "templates/default.html")
  193. OUT_HTML = manual.html
  194. HTML_OPTS = --filter pandoc-tablenos -M tablenos-warning-level=0 --highlight-style=haddock \
  195. --template=templates/default.html --eol=lf -s -t html
  196. INC_BEFORE_BODY_HTML = inc_before_body_html.html
  197. INC_HTML = --include-before-body $(INC_BEFORE_BODY_HTML)
  198. TEMPLATES_HTML = templates/default.html templates/styles.html
  199. $(OUT_HTML) : $(SOURCE) $(SOURCE_MAN_PAGE) $(INC_BEFORE_BODY_HTML) $(TEMPLATES_HTML) Makefile
  200. pandoc $(SOURCE) $(SOURCE_MAN_PAGE) -f markdown+link_attributes $(INC_HTML) --toc --toc-depth=4 \
  201. -V $(MAIN_FONT) -V $(MONO_FONT) -V $(CJK_FONT) \
  202. $(HTML_OPTS) \
  203. -o $(OUT_HTML)
  204. # Indent Man Page sections in TOC, change Man Page sections h1 -> h2, remove Man Page meta, fix Table captions
  205. sed -i \
  206. -e 's/\(Man Page ZINT(1)<\/a>\)<\/li>/\1<ul>/' \
  207. -e 's/\(AUTHORS<\/a><\/li>\)/\1<\/ul><\/li>/' \
  208. -e 's/^<h1\([^>]*>[A-Z][A-Z ]*<\/\)h1>$$/<h2\1h2>/' \
  209. -e 's/^<p>% ZINT(1)[^<]*<\/p>//' \
  210. -e 's/<caption><span>Table\(.:[^:]*\):/<caption><span>Table\1/' \
  211. $(OUT_HTML)