# Barcode Writer in Pure PostScript
# https://bwipp.terryburton.co.uk
#
# Copyright (c) 2004-2026 Terry Burton
#
# $Id$

# Run from wikidocs directory:
#   make -f __pandoc/Makefile
# Or from repo root:
#   make -C wikidocs -f __pandoc/Makefile

PANDOC_DIR = __pandoc

PANDOC_TEMPLATE_LATEX       = $(PANDOC_DIR)/templates/template.latex
PANDOC_TEMPLATE_HTML        = $(PANDOC_DIR)/templates/template.html
PANDOC_TEMPLATE_SCRIBUS     = $(PANDOC_DIR)/templates/template-scribus.html
PANDOC_TEMPLATE_PST_BARCODE = $(PANDOC_DIR)/templates/template-pst-barcode.latex

INTRO_FILE_LATEX = $(PANDOC_DIR)/__introduction.latex
INTRO_FILE_HTML  = $(PANDOC_DIR)/__introduction.html

# Lua filters (no external dependencies)
FILTER_LINKS   = $(PANDOC_DIR)/filters/rewrite-links.lua
FILTER_IMAGES  = $(PANDOC_DIR)/filters/rewrite-images.lua
FILTER_SHIELDS = $(PANDOC_DIR)/filters/remove-shields.lua
FILTER_SCALE   = $(PANDOC_DIR)/filters/scale-images.lua
FILTER_SCRIBUS = $(PANDOC_DIR)/filters/scribus-links.lua
FILTER_ADOCXRF = $(PANDOC_DIR)/filters/asciidoc-xrefs.lua

define SYMBOLOGY_FILES
  $(PANDOC_DIR)/__symbology-reference.md \
  $(PANDOC_DIR)/__symbology-pos.md \
  symbologies/EAN-13.md \
  symbologies/EAN-8.md \
  symbologies/UPC-A.md \
  symbologies/UPC-E.md \
  symbologies/ISBN.md \
  symbologies/ISMN.md \
  symbologies/ISSN.md \
  $(PANDOC_DIR)/__symbology-2d.md \
  symbologies/Aztec-Code.md \
  symbologies/Compact-Aztec-Code.md \
  symbologies/Aztec-Runes.md \
  symbologies/Data-Matrix.md \
  symbologies/Data-Matrix-Rectangular.md \
  symbologies/Data-Matrix-Rectangular-Extension.md \
  symbologies/Han-Xin-Code.md \
  symbologies/MicroPDF417.md \
  symbologies/PDF417.md \
  symbologies/Compact-PDF417.md \
  symbologies/QR-Code.md \
  symbologies/Micro-QR-Code.md \
  symbologies/Rectangular-Micro-QR-Code.md \
  symbologies/Swiss-QR-Code.md \
  symbologies/JAB-Code.md \
  $(PANDOC_DIR)/__symbology-1d.md \
  symbologies/Code-128.md \
  symbologies/Code-39.md \
  symbologies/Code-39-Extended.md \
  symbologies/Code-93.md \
  symbologies/Code-93-Extended.md \
  symbologies/Interleaved-2-of-5.md \
  $(PANDOC_DIR)/__symbology-supplychain.md \
  symbologies/EAN-14.md \
  symbologies/ITF-14.md \
  symbologies/SSCC-18.md \
  symbologies/GS1-DataMatrix.md \
  symbologies/GS1-QR-Code.md \
  symbologies/GS1-Digital-Link-Data-Matrix.md \
  symbologies/GS1-Digital-Link-QR-Code.md \
  symbologies/GS1-128.md \
  symbologies/GS1-DotCode.md \
  $(PANDOC_DIR)/__symbology-gs1db.md \
  symbologies/GS1-DataBar-Omnidirectional.md \
  symbologies/GS1-DataBar-Stacked-Omnidirectional.md \
  symbologies/GS1-DataBar-Expanded.md \
  symbologies/GS1-DataBar-Expanded-Stacked.md \
  symbologies/GS1-DataBar-Truncated.md \
  symbologies/GS1-DataBar-Stacked.md \
  symbologies/GS1-DataBar-Limited.md \
  symbologies/GS1-North-American-Coupon-Code.md \
  $(PANDOC_DIR)/__symbology-postal.md \
  symbologies/Australia-Post.md \
  symbologies/Deutsche-Post-Identcode.md \
  symbologies/Deutsche-Post-Leitcode.md \
  symbologies/Japan-Post.md \
  symbologies/MaxiCode.md \
  symbologies/Royal-Mail.md \
  symbologies/Mailmark.md \
  symbologies/Royal-TNT-Post.md \
  symbologies/USPS-Intelligent-Mail.md \
  symbologies/USPS-POSTNET.md \
  symbologies/USPS-PLANET.md \
  symbologies/USPS-FIM-symbols.md \
  $(PANDOC_DIR)/__symbology-pharma.md \
  symbologies/Italian-Pharmacode.md \
  symbologies/Pharmacode.md \
  symbologies/Two-track-Pharmacode.md \
  symbologies/PZN.md \
  symbologies/HIBC-Symbols.md \
  $(PANDOC_DIR)/__symbology-lessused.md \
  symbologies/BC412.md \
  symbologies/Channel-Code.md \
  symbologies/Codabar.md \
  symbologies/Codablock-F.md \
  symbologies/Code-11.md \
  symbologies/Code-16K.md \
  symbologies/Code-25.md \
  symbologies/DotCode.md \
  symbologies/Ultracode.md \
  symbologies/IATA-2-of-5.md \
  symbologies/Matrix-2-of-5.md \
  symbologies/Datalogic-2-of-5.md \
  symbologies/COOP-2-of-5.md \
  symbologies/Code-49.md \
  symbologies/Code-One.md \
  symbologies/MSI-Plessey.md \
  symbologies/Marks-Spencer.md \
  symbologies/Plessey.md \
  symbologies/PosiCode.md \
  symbologies/Telepen.md \
  symbologies/Telepen-Numeric.md \
  symbologies/GS1-Composite-Symbols.md \
  $(PANDOC_DIR)/__symbology-rawtype.md \
  symbologies/DAFT.md \
  symbologies/Flattermarken.md \
  symbologies/Raw.md \
  $(PANDOC_DIR)/__symbology-partial.md \
  symbologies/EAN-2.md \
  symbologies/EAN-5.md
endef

define GS1AI_FILES
  symbologies/GS1-Application-Identifier-Standard-Format.md
endef

define OPTIONS_FILES
  $(PANDOC_DIR)/__options-reference.md \
  options/Check-Digits.md \
  options/Input-Processing.md \
  options/Symbol-Dimensions.md \
  options/Element-Properties.md \
  options/Text-Properties.md \
  options/Text-Positioning.md \
  options/Border-Properties.md \
  options/Symbol-Colors.md \
  options/EAN-UPC-Add-ons.md \
  options/EAN-UPC-Guards.md
endef

define REF_FILES
  $(SYMBOLOGY_FILES) \
  $(GS1AI_FILES) \
  $(OPTIONS_FILES)
endef

define MD_FILES
  ../README.md \
  kb/Quick-Guide.md \
  PostScript-Calling-Convention.md \
  ../src/README.monolithic \
  ../src/README.resource \
  \
  $(REF_FILES) \
  \
  $(PANDOC_DIR)/__knowledge-base.md \
  kb/FAQs.md \
  kb/Resizing-Symbols.md \
  kb/Named-Colors.md \
  kb/Developing-a-Frontend-to-BWIPP.md \
  \
  ../THANKS.md \
  ../cited-by.md
endef

PDF_IMAGES = $(wildcard images/*.pdf)
SVG_IMAGES = $(wildcard images/*.svg)

PDF_DOCS         = $(PANDOC_DIR)/barcodewriter.pdf
HTML_DOCS        = $(PANDOC_DIR)/barcodewriter.html
PST_BARCODE_DOCS = $(PANDOC_DIR)/pst-barcode-doc.tex
SCRIBUS_DIR      = $(PANDOC_DIR)/scribus
SCRIBUS_SYMS     = $(SCRIBUS_DIR)/bwipp-symbologies.html
SCRIBUS_GS1AI    = $(SCRIBUS_DIR)/bwipp-gs1ai.html
SCRIBUS_OPTS     = $(SCRIBUS_DIR)/bwipp-options.html
SCRIBUS_DOCS     = $(SCRIBUS_SYMS) $(SCRIBUS_GS1AI) $(SCRIBUS_OPTS)
ADOC_DIR         = $(PANDOC_DIR)/adoc
ADOC_SYMS        = $(ADOC_DIR)/bwipp-symbologies.adoc
ADOC_OPTS        = $(ADOC_DIR)/bwipp-options.adoc
ADOC_DOCS        = $(ADOC_SYMS) $(ADOC_OPTS)
FILTER_EMBED     = $(PANDOC_DIR)/filters/embed-images.lua

cleanlist += $(PDF_DOCS) $(HTML_DOCS) $(PST_BARCODE_DOCS) $(SCRIBUS_DOCS) $(ADOC_DOCS)

#------------------------------------------------------------

.PHONY: all
all: pdf html

.PHONY: pdf
pdf: $(PDF_DOCS)

.PHONY: html
html: $(HTML_DOCS)

.PHONY: scribus-docs
scribus-docs: $(SCRIBUS_DOCS)

.PHONY: adoc-docs
adoc-docs: $(ADOC_DOCS)

.PHONY: pst-barcode-docs
pst-barcode-docs: $(PST_BARCODE_DOCS)

.PHONY: clean
clean:
	$(RM) $(cleanlist)

$(PDF_DOCS): $(MD_FILES) $(PDF_IMAGES) $(PANDOC_TEMPLATE_LATEX) $(INTRO_FILE_LATEX) $(FILTER_LINKS) $(FILTER_IMAGES) $(FILTER_SHIELDS)
	pandoc \
	  -f gfm -t latex \
	  --data-dir=$(PANDOC_DIR) --template $(notdir $(PANDOC_TEMPLATE_LATEX)) \
	  --lua-filter=$(FILTER_LINKS) \
	  --lua-filter=$(FILTER_IMAGES) \
	  --lua-filter=$(FILTER_SHIELDS) \
	  -M title="Barcode Writer in Pure PostScript" \
	  -M author="https://bwipp.terryburton.co.uk" \
	  -V geometry:a4paper,margin=2cm \
	  -B $(INTRO_FILE_LATEX) \
	  --toc --toc-depth=3 \
	  --top-level-division=chapter \
	  -o $@ \
	  $(MD_FILES)

$(HTML_DOCS): $(MD_FILES) $(SVG_IMAGES) $(PANDOC_TEMPLATE_HTML) $(INTRO_FILE_HTML) $(FILTER_LINKS) $(FILTER_SHIELDS)
	pandoc \
	  -f gfm -t html \
	  --data-dir=$(PANDOC_DIR) --template $(notdir $(PANDOC_TEMPLATE_HTML)) \
	  --lua-filter=$(FILTER_LINKS) \
	  --lua-filter=$(FILTER_SHIELDS) \
	  -M title="Barcode Writer in Pure PostScript" \
	  -B $(INTRO_FILE_HTML) \
	  --toc --toc-depth=3 \
	  --self-contained \
	  -o $@ \
	  $(MD_FILES)

$(SCRIBUS_SYMS): $(SYMBOLOGY_FILES) $(SVG_IMAGES) $(PANDOC_TEMPLATE_SCRIBUS) $(FILTER_SCRIBUS) $(FILTER_SHIELDS) $(FILTER_SCALE)
	mkdir -p $(SCRIBUS_DIR)
	pandoc \
	  -f gfm -t html \
	  --data-dir=$(PANDOC_DIR) --template $(notdir $(PANDOC_TEMPLATE_SCRIBUS)) \
	  --lua-filter=$(FILTER_SCRIBUS) \
	  --lua-filter=$(FILTER_SHIELDS) \
	  --lua-filter=$(FILTER_SCALE) \
	  -M title="Symbology Reference" \
	  -M scribus-target=symbologies \
	  --toc --toc-depth=3 \
	  --self-contained \
	  -o $@ \
	  $(SYMBOLOGY_FILES)

$(SCRIBUS_GS1AI): $(GS1AI_FILES) $(PANDOC_TEMPLATE_SCRIBUS) $(FILTER_SCRIBUS) $(FILTER_SHIELDS)
	mkdir -p $(SCRIBUS_DIR)
	pandoc \
	  -f gfm -t html \
	  --data-dir=$(PANDOC_DIR) --template $(notdir $(PANDOC_TEMPLATE_SCRIBUS)) \
	  --lua-filter=$(FILTER_SCRIBUS) \
	  --lua-filter=$(FILTER_SHIELDS) \
	  -M title="GS1 AI Standard Format" \
	  -M scribus-target=gs1ai \
	  --self-contained \
	  -o $@ \
	  $(GS1AI_FILES)

$(SCRIBUS_OPTS): $(OPTIONS_FILES) $(SVG_IMAGES) $(PANDOC_TEMPLATE_SCRIBUS) $(FILTER_SCRIBUS) $(FILTER_SHIELDS) $(FILTER_SCALE)
	mkdir -p $(SCRIBUS_DIR)
	pandoc \
	  -f gfm -t html \
	  --data-dir=$(PANDOC_DIR) --template $(notdir $(PANDOC_TEMPLATE_SCRIBUS)) \
	  --lua-filter=$(FILTER_SCRIBUS) \
	  --lua-filter=$(FILTER_SHIELDS) \
	  --lua-filter=$(FILTER_SCALE) \
	  -M title="Options Reference" \
	  -M scribus-target=options \
	  --toc --toc-depth=3 \
	  --self-contained \
	  -o $@ \
	  $(OPTIONS_FILES)

$(PST_BARCODE_DOCS): $(REF_FILES) $(PDF_IMAGES) $(PANDOC_TEMPLATE_PST_BARCODE) $(FILTER_LINKS) $(FILTER_IMAGES) $(FILTER_SHIELDS)
	docker run --rm -v "$(CURDIR):/data" -w /data pandoc/latex:2.9 \
	  pandoc \
	    -f gfm -t latex \
	    --data-dir=$(PANDOC_DIR) --template $(notdir $(PANDOC_TEMPLATE_PST_BARCODE)) \
	    --lua-filter=$(FILTER_LINKS) \
	    --lua-filter=$(FILTER_IMAGES) \
	    --lua-filter=$(FILTER_SHIELDS) \
	    --top-level-division=section \
	    -o $@ \
	    $(REF_FILES)

$(ADOC_SYMS): $(SYMBOLOGY_FILES) $(GS1AI_FILES) $(SVG_IMAGES) $(FILTER_LINKS) $(FILTER_SHIELDS) $(FILTER_EMBED) $(FILTER_ADOCXRF)
	mkdir -p $(ADOC_DIR)
	pandoc \
	  -f gfm -t asciidoctor \
	  --lua-filter=$(FILTER_LINKS) \
	  --lua-filter=$(FILTER_SHIELDS) \
	  --lua-filter=$(FILTER_EMBED) \
	  --lua-filter=$(FILTER_ADOCXRF) \
	  -o $@ \
	  $(SYMBOLOGY_FILES) $(GS1AI_FILES)

$(ADOC_OPTS): $(OPTIONS_FILES) $(SVG_IMAGES) $(FILTER_LINKS) $(FILTER_SHIELDS) $(FILTER_EMBED) $(FILTER_ADOCXRF)
	mkdir -p $(ADOC_DIR)
	pandoc \
	  -f gfm -t asciidoctor \
	  --lua-filter=$(FILTER_LINKS) \
	  --lua-filter=$(FILTER_SHIELDS) \
	  --lua-filter=$(FILTER_EMBED) \
	  --lua-filter=$(FILTER_ADOCXRF) \
	  -o $@ \
	  $(OPTIONS_FILES)
