git: 85c27ded1277 - main - print/publisher-devel: new port: development version of print/publisher
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 11 Sep 2026 13:00:24 UTC
The branch main has been updated by fuz:
URL: https://cgit.FreeBSD.org/ports/commit/?id=85c27ded12777aefd0c9f73017b739086bed8cb0
commit 85c27ded12777aefd0c9f73017b739086bed8cb0
Author: Mister D <misterd@renderdata.pro>
AuthorDate: 2026-07-23 14:53:41 +0000
Commit: Robert Clausecker <fuz@FreeBSD.org>
CommitDate: 2026-09-11 12:58:39 +0000
print/publisher-devel: new port: development version of print/publisher
speedata Publisher is a professional, non-interactive layout engine for
database publishing. It generates high-quality PDF files from XML data
and XML layout instructions, making it well suited for product catalogs,
price lists, and other documents with demanding layout requirements.
The layout description language allows complex, nearly arbitrary page
designs while keeping the job as straightforward as possible. It can be
thought of as "XSL-FO on steroids" or a server-side alternative to
desktop publishing tools like InDesign. It is production-proven and used
in commercial environments worldwide.
The core typesetting engine is LuaTeX (not included; must be provided
separately via download.speedata.de or the official packages). The Go
front-end binary (sp) drives the build process and handles XML parsing,
resource loading, and orchestration of the LuaTeX process.
This version follows the development branch which add fixing and new
features, useful to get new functionalities or to test your layouts
against the next stable.
WWW: https://www.speedata.de/
PR: 293791
---
print/Makefile | 1 +
print/publisher-devel/Makefile | 175 ++++++++++++++++++++++++++++++++
print/publisher-devel/distinfo | 55 ++++++++++
print/publisher-devel/files/modules.txt | 114 +++++++++++++++++++++
print/publisher-devel/modules.txt | 114 +++++++++++++++++++++
print/publisher-devel/pkg-descr | 16 +++
print/publisher-devel/pkg-help | 60 +++++++++++
print/publisher-devel/pkg-plist | 136 +++++++++++++++++++++++++
8 files changed, 671 insertions(+)
diff --git a/print/Makefile b/print/Makefile
index cb3e72353a8a..007b0cc51401 100644
--- a/print/Makefile
+++ b/print/Makefile
@@ -170,6 +170,7 @@
SUBDIR += pstotext
SUBDIR += psutils
SUBDIR += publisher
+ SUBDIR += publisher-devel
SUBDIR += py-PyMuPDF
SUBDIR += py-collidoscope
SUBDIR += py-dehinter
diff --git a/print/publisher-devel/Makefile b/print/publisher-devel/Makefile
new file mode 100644
index 000000000000..b571bc4e29bf
--- /dev/null
+++ b/print/publisher-devel/Makefile
@@ -0,0 +1,175 @@
+PORTNAME= publisher
+DISTVERSIONPREFIX= v
+DISTVERSION= 5.7.5
+CATEGORIES= print
+PKGNAMESUFFIX= -devel
+
+MAINTAINER= misterd@renderdata.pro
+COMMENT= Non-interactive layout engine and typesetting system ${${FLAVOR}_COMMENT}
+WWW= https://www.speedata.de/
+
+LICENSE= AGPLv3
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+# Go does not support -buildmode=c-shared on freebsd/arm64 (only on
+# freebsd/amd64). See internal/platform/supported.go in the Go source.
+# When Go gains arm64 support, the application could also be refactored
+# upstream to avoid c-shared entirely.
+ONLY_FOR_ARCHS= amd64
+ONLY_FOR_ARCHS_REASON= requires Go -buildmode=c-shared, not supported on this architecture
+
+RUN_DEPENDS= luahbtex:print/tex-luatex
+
+# Flavors: default (community) and pro
+FLAVORS= default pro
+FLAVOR?= ${FLAVORS:[1]}
+
+pro_PKGNAMESUFFIX= -pro
+default_COMMENT= (community)
+pro_COMMENT= (pro)
+
+USES= go:modules,no_targets lua:53,build,run
+USE_GITHUB= yes
+GH_ACCOUNT= speedata
+GH_TUPLE= \
+ Masterminds:semver:v1.5.0:masterminds_semver/src/go/vendor/github.com/Masterminds/semver \
+ PuerkitoBio:goquery:v1.9.1:puerkitobio_goquery/src/go/vendor/github.com/PuerkitoBio/goquery \
+ alecthomas:chroma:v2.13.0:alecthomas_chroma_v2/src/go/vendor/github.com/alecthomas/chroma/v2 \
+ andybalholm:cascadia:v1.3.2:andybalholm_cascadia/src/go/vendor/github.com/andybalholm/cascadia \
+ dlclark:regexp2:v1.11.0:dlclark_regexp2/src/go/vendor/github.com/dlclark/regexp2 \
+ fsnotify:fsnotify:v1.7.0:fsnotify_fsnotify/src/go/vendor/github.com/fsnotify/fsnotify \
+ gammazero:deque:v0.2.1:gammazero_deque/src/go/vendor/github.com/gammazero/deque \
+ gammazero:workerpool:v1.1.3:gammazero_workerpool/src/go/vendor/github.com/gammazero/workerpool \
+ golang:image:v0.39.0:golang_image/src/go/vendor/golang.org/x/image \
+ golang:net:v0.53.0:golang_net/src/go/vendor/golang.org/x/net \
+ golang:sys:v0.43.0:golang_sys/src/go/vendor/golang.org/x/sys \
+ golang:text:v0.36.0:golang_text/src/go/vendor/golang.org/x/text \
+ google:btree:v1.1.2:google_btree/src/go/vendor/github.com/google/btree \
+ gorilla:mux:v1.8.1:gorilla_mux/src/go/vendor/github.com/gorilla/mux \
+ gregjones:httpcache:901d90724c79:gregjones_httpcache/src/go/vendor/github.com/gregjones/httpcache \
+ inconshreveable:mousetrap:v1.1.0:inconshreveable_mousetrap/src/go/vendor/github.com/inconshreveable/mousetrap \
+ peterbourgon:diskv:v2.0.1:peterbourgon_diskv/src/go/vendor/github.com/peterbourgon/diskv \
+ speedata:bild:dd063a632b14:speedata_bild/src/go/vendor/github.com/speedata/bild \
+ speedata:config:3a3f44982ec4:speedata_config/src/go/vendor/github.com/speedata/config \
+ speedata:css:68d469dc62c4:speedata_css_scanner/src/go/vendor/github.com/speedata/css \
+ speedata:go-lua:v0.1.8:speedata_go_lua/src/go/vendor/github.com/speedata/go-lua \
+ speedata:goxlsx:v1.0.2:speedata_goxlsx/src/go/vendor/github.com/speedata/goxlsx \
+ speedata:hotfolder:5f743a840a92:speedata_hotfolder/src/go/vendor/github.com/speedata/hotfolder \
+ speedata:optionparser:v1.2.1:speedata_optionparser/src/go/vendor/github.com/speedata/optionparser \
+ yuin:goldmark-highlighting:37449abec8cc:yuin_goldmark_highlighting_v2/src/go/vendor/github.com/yuin/goldmark-highlighting/v2 \
+ yuin:goldmark:v1.7.1:yuin_goldmark/src/go/vendor/github.com/yuin/goldmark
+
+USE_LDCONFIG= ${SP_LIBDIR}
+
+# JAR location for JAVA_TOOLS option (matches what textproc/saxon-he etc. install).
+# Not using USES=java so we set this ourselves.
+JAVAJARDIR= ${LOCALBASE}/share/java/classes
+
+# Paths compiled into sp binary at build time (final install paths, no STAGEDIR)
+SP_LIBDIR= ${PREFIX}/lib/speedata-publisher
+SP_SHAREDIR= ${PREFIX}/share/speedata-publisher
+SP_SWDIR= ${SP_SHAREDIR}/sw
+
+# pro flavor: pass -X main.pro=yes at link time
+.if ${FLAVOR} == pro
+SP_LDFLAGS_PRO= -X main.pro=yes
+.endif
+
+# ldflags for sp binary: compile install paths and version into the binary.
+# Set before bsd.port.mk includes go.mk so go.mk's default -ldflags=-s is skipped.
+GO_BUILDFLAGS+= -ldflags="-X main.dest=custom \
+ -X main.version=${DISTVERSION} \
+ -X main.libdir=${SP_LIBDIR} \
+ -X main.srcdir=${SP_SWDIR} \
+ ${SP_LDFLAGS_PRO} \
+ ${STRIP}"
+
+# Append Lua include path to CGO_CFLAGS so GO_ENV picks it up
+# (don't override CGO_CFLAGS inline; GO_ENV already sets it).
+CGO_CFLAGS+= -I${LUA_INCDIR}
+
+CONFLICTS_INSTALL= publisher
+
+EXTRACT_AFTER_ARGS= --exclude lib \
+ --no-same-owner --no-same-permissions
+
+# Optional Java helper tools (Saxon for XSLT, Jing for RNG validation,
+# Trang for schema conversion). Default ON; turn OFF to manage JARs
+# manually (see pkg-help).
+OPTIONS_DEFINE= JAVA_TOOLS
+OPTIONS_DEFAULT= JAVA_TOOLS
+OPTIONS_SUB= yes
+JAVA_TOOLS_DESC= XSLT/RNG support via Saxon, Jing, Trang
+JAVA_TOOLS_RUN_DEPENDS= saxon-he>0:textproc/saxon-he \
+ jing>0:textproc/jing \
+ trang>0:textproc/trang
+
+# Pre-generated vendor/modules.txt (see files/modules.txt).
+# Required because Go 1.21+ needs modules.txt in vendor/, and GH_TUPLE
+# extraction does not produce it. Generated on host with: go mod vendor
+post-extract:
+ ${CP} ${FILESDIR}/modules.txt ${WRKSRC}/src/go/vendor/modules.txt
+
+do-build:
+ # libsplib.so -- Go shared library (c-shared mode, CGO uses Lua headers via CGO_CFLAGS)
+ # Does not use GO_BUILDFLAGS because that contains sp-specific ldflags.
+ (cd ${WRKSRC}/src/go; \
+ ${SETENVI} ${WRK_ENV} ${MAKE_ENV} ${GO_ENV} \
+ GOMAXPROCS=${MAKE_JOBS_NUMBER} GOPROXY=off \
+ ${GO_CMD} build \
+ -buildmode=c-shared \
+ -mod=vendor \
+ -v -trimpath \
+ -buildvcs=false \
+ -ldflags=${STRIP} \
+ -o ${WRKDIR}/libsplib.so \
+ speedatapublisher/splib)
+
+ # luaglue.so -- C glue library
+ (cd ${WRKSRC}/src/c; \
+ ${CC} ${CFLAGS} ${CPPFLAGS} -I${LUA_INCDIR} ${LDFLAGS} \
+ -fPIC -shared \
+ -Wl,-soname,luaglue.so \
+ -o ${WRKDIR}/luaglue.so \
+ luaglue.c)
+
+ # sp binary -- dest=custom compiles paths in at link time (via GO_BUILDFLAGS)
+ (cd ${WRKSRC}/src/go; \
+ ${SETENVI} ${WRK_ENV} ${MAKE_ENV} ${GO_ENV} \
+ GOMAXPROCS=${MAKE_JOBS_NUMBER} GOPROXY=off \
+ ${GO_CMD} build ${GO_BUILDFLAGS} \
+ -o ${WRKDIR}/sp \
+ speedatapublisher/sp/sp)
+
+do-install:
+ # sp binary. 5.6.0+ has fallback logic in getExecutablePath() via the
+ # backported patch: sp searches for sdluatex first, then luahbtex.
+ # FreeBSD only ships luahbtex, so no symlink is needed.
+ ${INSTALL_PROGRAM} ${WRKDIR}/sp ${STAGEDIR}${PREFIX}/bin
+
+ # Shared libraries -> ${PREFIX}/lib/speedata-publisher/
+ ${MKDIR} ${STAGEDIR}${SP_LIBDIR}
+ ${INSTALL_LIB} ${WRKDIR}/libsplib.so ${WRKDIR}/luaglue.so \
+ ${STAGEDIR}${SP_LIBDIR}
+
+ # Schema files
+ ${MKDIR} ${STAGEDIR}${SP_SHAREDIR}/schema
+ ${INSTALL_DATA} \
+ ${WRKSRC}/schema/catalog-schema-*.xml \
+ ${WRKSRC}/schema/layoutschema-*.* \
+ ${STAGEDIR}${SP_SHAREDIR}/schema
+
+ # Runtime resource files (sw/)
+ (cd ${WRKSRC}/src && \
+ ${COPYTREE_SHARE} "colorprofiles hyphenation lua metapost tex" \
+ ${STAGEDIR}${SP_SWDIR})
+ (cd ${WRKSRC} && ${COPYTREE_SHARE} "fonts img" ${STAGEDIR}${SP_SWDIR})
+
+# JAVA_TOOLS option: install a sample config that points sp at the FreeBSD
+# JAR location. Requires Publisher 5.5.24+. No symlinks, no version pin.
+post-install-JAVA_TOOLS-on:
+ ${MKDIR} ${STAGEDIR}${PREFIX}/etc/speedata
+ ${ECHO_CMD} "jardir = ${JAVAJARDIR}" > \
+ ${STAGEDIR}${PREFIX}/etc/speedata/publisher.cfg.sample
+
+.include <bsd.port.mk>
diff --git a/print/publisher-devel/distinfo b/print/publisher-devel/distinfo
new file mode 100644
index 000000000000..8692ed92a7e4
--- /dev/null
+++ b/print/publisher-devel/distinfo
@@ -0,0 +1,55 @@
+TIMESTAMP = 1784739178
+SHA256 (speedata-publisher-v5.7.5_GH0.tar.gz) = 1f2c333b02b3279e448038126d13972467611d4d030a5ab8b152949aebd9d62c
+SIZE (speedata-publisher-v5.7.5_GH0.tar.gz) = 27341822
+SHA256 (Masterminds-semver-v1.5.0_GH0.tar.gz) = c9140eddfb03dc862f826e7761561260b9a840afa7519cc0919e89a43b5be5ba
+SIZE (Masterminds-semver-v1.5.0_GH0.tar.gz) = 21188
+SHA256 (PuerkitoBio-goquery-v1.9.1_GH0.tar.gz) = ad303bf30070c34fa0f05d2701b7bd024642e0183708a96ed0d2b837b21f4d1a
+SIZE (PuerkitoBio-goquery-v1.9.1_GH0.tar.gz) = 107417
+SHA256 (alecthomas-chroma-v2.13.0_GH0.tar.gz) = f3538d9db5df0d0325f3eaab7e3d465a6ec9ad6067051863ac52241f070824a0
+SIZE (alecthomas-chroma-v2.13.0_GH0.tar.gz) = 1032348
+SHA256 (andybalholm-cascadia-v1.3.2_GH0.tar.gz) = f30ebb75a9f43a30478c870dd6e372ac7ef64549f621eceb3b13fd91bfde80cb
+SIZE (andybalholm-cascadia-v1.3.2_GH0.tar.gz) = 35370
+SHA256 (dlclark-regexp2-v1.11.0_GH0.tar.gz) = c380209bd67b67859014f9bfd155aec4bfc4beb65f4a6aec37683b80186b18f7
+SIZE (dlclark-regexp2-v1.11.0_GH0.tar.gz) = 212532
+SHA256 (fsnotify-fsnotify-v1.7.0_GH0.tar.gz) = ca8175ba6bd3d0cc992200c2f44acabec05367575dc0478c5902971fe7453f35
+SIZE (fsnotify-fsnotify-v1.7.0_GH0.tar.gz) = 57502
+SHA256 (gammazero-deque-v0.2.1_GH0.tar.gz) = 3d10140363eba10646b965386221167842cb946e4363689d19f427c47badeba0
+SIZE (gammazero-deque-v0.2.1_GH0.tar.gz) = 10170
+SHA256 (gammazero-workerpool-v1.1.3_GH0.tar.gz) = b9d11203a8e544c67471fbba86dcb5243634d8cac2d7610650cb68a3546c7e63
+SIZE (gammazero-workerpool-v1.1.3_GH0.tar.gz) = 12951
+SHA256 (golang-image-v0.39.0_GH0.tar.gz) = ab04677a73a91745a2bf7f08e32104adaccda9987511897e6258c09b96d2f911
+SIZE (golang-image-v0.39.0_GH0.tar.gz) = 5120844
+SHA256 (golang-net-v0.53.0_GH0.tar.gz) = dde4377de949f539eb137ec1ff2bf2e15f4063f9e20427616e5fbcbc8b45c231
+SIZE (golang-net-v0.53.0_GH0.tar.gz) = 1561839
+SHA256 (golang-sys-v0.43.0_GH0.tar.gz) = 180ea0b92c2392afe123273fa0d650eb376a23aa5befed795601341adb64e5a0
+SIZE (golang-sys-v0.43.0_GH0.tar.gz) = 1538751
+SHA256 (golang-text-v0.36.0_GH0.tar.gz) = e4afcc00931e641196193b149ff9130a29aabd72cab620721dd6d84698a7d5fe
+SIZE (golang-text-v0.36.0_GH0.tar.gz) = 6772591
+SHA256 (google-btree-v1.1.2_GH0.tar.gz) = b8722a430b40035f04001ca62bb858abe931a781f76bd37d6a3e1bb23273ba2d
+SIZE (google-btree-v1.1.2_GH0.tar.gz) = 19771
+SHA256 (gorilla-mux-v1.8.1_GH0.tar.gz) = c2a09e78d1886abb2d291b472eba3ac9185acb35234c1f5616669664ba893d6d
+SIZE (gorilla-mux-v1.8.1_GH0.tar.gz) = 47033
+SHA256 (gregjones-httpcache-901d90724c79_GH0.tar.gz) = 2280e11c0ac820bc32717ccb8f74c95a151789c8db86d7a70b7f8f475ae0cc26
+SIZE (gregjones-httpcache-901d90724c79_GH0.tar.gz) = 14164
+SHA256 (inconshreveable-mousetrap-v1.1.0_GH0.tar.gz) = ab23e7c5cbf42564eb0190ee051b7217c04fd2599d2f26e9ebe205db75963141
+SIZE (inconshreveable-mousetrap-v1.1.0_GH0.tar.gz) = 5338
+SHA256 (peterbourgon-diskv-v2.0.1_GH0.tar.gz) = e3b15d57dfe5b4aacf506d256c595b95523c51756459aae04579d35c85bad184
+SIZE (peterbourgon-diskv-v2.0.1_GH0.tar.gz) = 16077
+SHA256 (speedata-bild-dd063a632b14_GH0.tar.gz) = 585082b73fe2e25d45d804dedbffae7d1757f45f0a65259f5d1f20749dc25a8f
+SIZE (speedata-bild-dd063a632b14_GH0.tar.gz) = 3998419
+SHA256 (speedata-config-3a3f44982ec4_GH0.tar.gz) = 558a20825de8de484cf3cfaa07d420746d8ec3d6d2d864922060f997f324cf6f
+SIZE (speedata-config-3a3f44982ec4_GH0.tar.gz) = 14090
+SHA256 (speedata-css-68d469dc62c4_GH0.tar.gz) = 4a93a680c75651cf1288f6f7fa8028e3feab0b91a56528d9a1cf1bb8894d9dc6
+SIZE (speedata-css-68d469dc62c4_GH0.tar.gz) = 13462
+SHA256 (speedata-go-lua-v0.1.8_GH0.tar.gz) = a2ecfd0383c3de5e605c56e13940a3ecce30116b5fcadc81ebdb7a4380d90ea6
+SIZE (speedata-go-lua-v0.1.8_GH0.tar.gz) = 645299
+SHA256 (speedata-goxlsx-v1.0.2_GH0.tar.gz) = 289e1568abc198ea6316e3109bcb5a557bcd7b61bcff332a42cdc338d7c5807c
+SIZE (speedata-goxlsx-v1.0.2_GH0.tar.gz) = 67107
+SHA256 (speedata-hotfolder-5f743a840a92_GH0.tar.gz) = a9178fe99f0c164f21a6cf96f5cb9d3ecc15e1bb0d33f8c8fccde3360e6c9d2f
+SIZE (speedata-hotfolder-5f743a840a92_GH0.tar.gz) = 1380
+SHA256 (speedata-optionparser-v1.2.1_GH0.tar.gz) = 640e58d4e4193ce3e7d31b9611f0fb80ee70961321fe1978a8fb01978e24c7b6
+SIZE (speedata-optionparser-v1.2.1_GH0.tar.gz) = 13203
+SHA256 (yuin-goldmark-highlighting-37449abec8cc_GH0.tar.gz) = 9f49d339602c96284cc6b2dc51641fe37efe2346326f0b9755705aa6f20e6bf2
+SIZE (yuin-goldmark-highlighting-37449abec8cc_GH0.tar.gz) = 10298
+SHA256 (yuin-goldmark-v1.7.1_GH0.tar.gz) = e1159c456d6d5c8fdfeb61534aa23ef6f4108bbf74a21016199debfdde82590a
+SIZE (yuin-goldmark-v1.7.1_GH0.tar.gz) = 252103
diff --git a/print/publisher-devel/files/modules.txt b/print/publisher-devel/files/modules.txt
new file mode 100644
index 000000000000..645500096bbf
--- /dev/null
+++ b/print/publisher-devel/files/modules.txt
@@ -0,0 +1,114 @@
+# github.com/Masterminds/semver v1.5.0
+## explicit
+github.com/Masterminds/semver
+# github.com/PuerkitoBio/goquery v1.9.1
+## explicit; go 1.18
+github.com/PuerkitoBio/goquery
+# github.com/alecthomas/chroma/v2 v2.13.0
+## explicit; go 1.19
+github.com/alecthomas/chroma/v2
+github.com/alecthomas/chroma/v2/formatters/html
+github.com/alecthomas/chroma/v2/lexers
+github.com/alecthomas/chroma/v2/styles
+# github.com/andybalholm/cascadia v1.3.2
+## explicit; go 1.16
+github.com/andybalholm/cascadia
+# github.com/dlclark/regexp2 v1.11.0
+## explicit; go 1.13
+github.com/dlclark/regexp2
+github.com/dlclark/regexp2/syntax
+# github.com/fsnotify/fsnotify v1.7.0
+## explicit; go 1.17
+github.com/fsnotify/fsnotify
+# github.com/gammazero/deque v0.2.1
+## explicit; go 1.18
+github.com/gammazero/deque
+# github.com/gammazero/workerpool v1.1.3
+## explicit; go 1.18
+github.com/gammazero/workerpool
+# github.com/google/btree v1.1.2
+## explicit; go 1.18
+github.com/google/btree
+# github.com/gorilla/mux v1.8.1
+## explicit; go 1.20
+github.com/gorilla/mux
+# github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79
+## explicit
+github.com/gregjones/httpcache
+github.com/gregjones/httpcache/diskcache
+# github.com/inconshreveable/mousetrap v1.1.0
+## explicit; go 1.18
+github.com/inconshreveable/mousetrap
+# github.com/peterbourgon/diskv v2.0.1+incompatible
+## explicit
+github.com/peterbourgon/diskv
+# github.com/speedata/bild v0.0.0-20240628091728-dd063a632b14
+## explicit; go 1.21
+github.com/speedata/bild/clone
+github.com/speedata/bild/imgio
+github.com/speedata/bild/math/f64
+github.com/speedata/bild/parallel
+github.com/speedata/bild/transform
+# github.com/speedata/config v0.0.0-20181203093101-3a3f44982ec4
+## explicit
+github.com/speedata/config
+# github.com/speedata/css/scanner v0.0.0-20250825095519-68d469dc62c4
+## explicit; go 1.14
+github.com/speedata/css/scanner
+# github.com/speedata/go-lua v0.1.8
+## explicit; go 1.22
+github.com/speedata/go-lua
+# github.com/speedata/goxlsx v1.0.2
+## explicit
+github.com/speedata/goxlsx
+# github.com/speedata/hotfolder v0.0.0-20181204121114-5f743a840a92
+## explicit
+github.com/speedata/hotfolder
+# github.com/speedata/optionparser v1.2.1
+## explicit; go 1.17
+github.com/speedata/optionparser
+# github.com/yuin/goldmark v1.7.1
+## explicit; go 1.19
+github.com/yuin/goldmark
+github.com/yuin/goldmark/ast
+github.com/yuin/goldmark/extension
+github.com/yuin/goldmark/extension/ast
+github.com/yuin/goldmark/parser
+github.com/yuin/goldmark/renderer
+github.com/yuin/goldmark/renderer/html
+github.com/yuin/goldmark/text
+github.com/yuin/goldmark/util
+# github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
+## explicit; go 1.13
+github.com/yuin/goldmark-highlighting/v2
+# golang.org/x/image v0.39.0
+## explicit; go 1.25.0
+golang.org/x/image/bmp
+# golang.org/x/net v0.53.0
+## explicit; go 1.25.0
+golang.org/x/net/html
+golang.org/x/net/html/atom
+golang.org/x/net/html/charset
+# golang.org/x/sys v0.43.0
+## explicit; go 1.25.0
+golang.org/x/sys/unix
+golang.org/x/sys/windows
+# golang.org/x/text v0.36.0
+## explicit; go 1.25.0
+golang.org/x/text/encoding
+golang.org/x/text/encoding/charmap
+golang.org/x/text/encoding/htmlindex
+golang.org/x/text/encoding/internal
+golang.org/x/text/encoding/internal/identifier
+golang.org/x/text/encoding/japanese
+golang.org/x/text/encoding/korean
+golang.org/x/text/encoding/simplifiedchinese
+golang.org/x/text/encoding/traditionalchinese
+golang.org/x/text/encoding/unicode
+golang.org/x/text/internal/language
+golang.org/x/text/internal/language/compact
+golang.org/x/text/internal/tag
+golang.org/x/text/internal/utf8internal
+golang.org/x/text/language
+golang.org/x/text/runes
+golang.org/x/text/transform
diff --git a/print/publisher-devel/modules.txt b/print/publisher-devel/modules.txt
new file mode 100644
index 000000000000..645500096bbf
--- /dev/null
+++ b/print/publisher-devel/modules.txt
@@ -0,0 +1,114 @@
+# github.com/Masterminds/semver v1.5.0
+## explicit
+github.com/Masterminds/semver
+# github.com/PuerkitoBio/goquery v1.9.1
+## explicit; go 1.18
+github.com/PuerkitoBio/goquery
+# github.com/alecthomas/chroma/v2 v2.13.0
+## explicit; go 1.19
+github.com/alecthomas/chroma/v2
+github.com/alecthomas/chroma/v2/formatters/html
+github.com/alecthomas/chroma/v2/lexers
+github.com/alecthomas/chroma/v2/styles
+# github.com/andybalholm/cascadia v1.3.2
+## explicit; go 1.16
+github.com/andybalholm/cascadia
+# github.com/dlclark/regexp2 v1.11.0
+## explicit; go 1.13
+github.com/dlclark/regexp2
+github.com/dlclark/regexp2/syntax
+# github.com/fsnotify/fsnotify v1.7.0
+## explicit; go 1.17
+github.com/fsnotify/fsnotify
+# github.com/gammazero/deque v0.2.1
+## explicit; go 1.18
+github.com/gammazero/deque
+# github.com/gammazero/workerpool v1.1.3
+## explicit; go 1.18
+github.com/gammazero/workerpool
+# github.com/google/btree v1.1.2
+## explicit; go 1.18
+github.com/google/btree
+# github.com/gorilla/mux v1.8.1
+## explicit; go 1.20
+github.com/gorilla/mux
+# github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79
+## explicit
+github.com/gregjones/httpcache
+github.com/gregjones/httpcache/diskcache
+# github.com/inconshreveable/mousetrap v1.1.0
+## explicit; go 1.18
+github.com/inconshreveable/mousetrap
+# github.com/peterbourgon/diskv v2.0.1+incompatible
+## explicit
+github.com/peterbourgon/diskv
+# github.com/speedata/bild v0.0.0-20240628091728-dd063a632b14
+## explicit; go 1.21
+github.com/speedata/bild/clone
+github.com/speedata/bild/imgio
+github.com/speedata/bild/math/f64
+github.com/speedata/bild/parallel
+github.com/speedata/bild/transform
+# github.com/speedata/config v0.0.0-20181203093101-3a3f44982ec4
+## explicit
+github.com/speedata/config
+# github.com/speedata/css/scanner v0.0.0-20250825095519-68d469dc62c4
+## explicit; go 1.14
+github.com/speedata/css/scanner
+# github.com/speedata/go-lua v0.1.8
+## explicit; go 1.22
+github.com/speedata/go-lua
+# github.com/speedata/goxlsx v1.0.2
+## explicit
+github.com/speedata/goxlsx
+# github.com/speedata/hotfolder v0.0.0-20181204121114-5f743a840a92
+## explicit
+github.com/speedata/hotfolder
+# github.com/speedata/optionparser v1.2.1
+## explicit; go 1.17
+github.com/speedata/optionparser
+# github.com/yuin/goldmark v1.7.1
+## explicit; go 1.19
+github.com/yuin/goldmark
+github.com/yuin/goldmark/ast
+github.com/yuin/goldmark/extension
+github.com/yuin/goldmark/extension/ast
+github.com/yuin/goldmark/parser
+github.com/yuin/goldmark/renderer
+github.com/yuin/goldmark/renderer/html
+github.com/yuin/goldmark/text
+github.com/yuin/goldmark/util
+# github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
+## explicit; go 1.13
+github.com/yuin/goldmark-highlighting/v2
+# golang.org/x/image v0.39.0
+## explicit; go 1.25.0
+golang.org/x/image/bmp
+# golang.org/x/net v0.53.0
+## explicit; go 1.25.0
+golang.org/x/net/html
+golang.org/x/net/html/atom
+golang.org/x/net/html/charset
+# golang.org/x/sys v0.43.0
+## explicit; go 1.25.0
+golang.org/x/sys/unix
+golang.org/x/sys/windows
+# golang.org/x/text v0.36.0
+## explicit; go 1.25.0
+golang.org/x/text/encoding
+golang.org/x/text/encoding/charmap
+golang.org/x/text/encoding/htmlindex
+golang.org/x/text/encoding/internal
+golang.org/x/text/encoding/internal/identifier
+golang.org/x/text/encoding/japanese
+golang.org/x/text/encoding/korean
+golang.org/x/text/encoding/simplifiedchinese
+golang.org/x/text/encoding/traditionalchinese
+golang.org/x/text/encoding/unicode
+golang.org/x/text/internal/language
+golang.org/x/text/internal/language/compact
+golang.org/x/text/internal/tag
+golang.org/x/text/internal/utf8internal
+golang.org/x/text/language
+golang.org/x/text/runes
+golang.org/x/text/transform
diff --git a/print/publisher-devel/pkg-descr b/print/publisher-devel/pkg-descr
new file mode 100644
index 000000000000..19e4e1a6d13e
--- /dev/null
+++ b/print/publisher-devel/pkg-descr
@@ -0,0 +1,16 @@
+speedata Publisher is a professional, non-interactive layout engine for
+database publishing. It generates high-quality PDF files from XML data
+and XML layout instructions, making it well suited for product catalogs,
+price lists, and other documents with demanding layout requirements.
+The layout description language allows complex, nearly arbitrary page
+designs while keeping the job as straightforward as possible. It can be
+thought of as "XSL-FO on steroids" or a server-side alternative to
+desktop publishing tools like InDesign. It is production-proven and used
+in commercial environments worldwide.
+The core typesetting engine is LuaTeX (not included; must be provided
+separately via download.speedata.de or the official packages). The Go
+front-end binary (sp) drives the build process and handles XML parsing,
+resource loading, and orchestration of the LuaTeX process.
+This version follows the development branch which add fixing and new
+features, useful to get new functionalities or to test your layouts
+against the next stable.
diff --git a/print/publisher-devel/pkg-help b/print/publisher-devel/pkg-help
new file mode 100644
index 000000000000..2bba16e65538
--- /dev/null
+++ b/print/publisher-devel/pkg-help
@@ -0,0 +1,60 @@
+JAVA_TOOLS option
+-----------------
+
+By selection the JAVA_TOOLS option, the following ports are installed
+as runtime dependencies:
+
+ textproc/saxon-he (XSLT/XPath/XQuery, also provides xmlresolver)
+ textproc/jing (RELAX NG validator)
+ textproc/trang (schema converter)
+
+A Java runtime (openjdk25) is pulled in transitively.
+
+XSLT/RNG support (Saxon, Jing, Trang) is enabled via a config file.
+This port installs /usr/local/etc/speedata/publisher.cfg.sample. To
+activate it, copy it into place:
+
+ cp /usr/local/etc/speedata/publisher.cfg.sample \
+ /usr/local/etc/speedata/publisher.cfg
+
+The config points sp at ${JAVAJARDIR} where FreeBSD's saxon-he, jing,
+and trang install their JAR files. No symlinks or manual JAR management
+is required.
+
+To override globally, edit /usr/local/etc/speedata/publisher.cfg.
+To override per-user, create ~/.publisher.cfg.
+
+To build without these dependencies (for example to use the upstream
+JARs at specific versions, or to skip the Java toolchain entirely):
+
+ cd /usr/ports/print/publisher-devel
+ make config # uncheck JAVA_TOOLS
+ make install clean
+
+Without JAVA_TOOLS the following files would normally need to be placed
+manually at the indicated paths:
+
+ /usr/local/lib/speedata-publisher/saxon-he-12.9.jar
+ /usr/local/lib/speedata-publisher/jing.jar
+ /usr/local/lib/speedata-publisher/trang.jar
+ /usr/local/lib/speedata-publisher/lib/xmlresolver-5.3.3.jar
+ /usr/local/lib/speedata-publisher/lib/xmlresolver-5.3.3-data.jar
+
+Upstream download URLs:
+
+ https://repo1.maven.org/maven2/net/sf/saxon/Saxon-HE/12.9/Saxon-HE-12.9.jar
+ https://github.com/relaxng/jing-trang/releases/download/V20220510/jing-20220510.jar
+ https://github.com/relaxng/jing-trang/releases/download/V20220510/trang-20220510.jar
+ https://repo1.maven.org/maven2/org/xmlresolver/xmlresolver/5.3.3/xmlresolver-5.3.3.jar
+ https://repo1.maven.org/maven2/org/xmlresolver/xmlresolver/5.3.3/xmlresolver-5.3.3-data.jar
+
+A Java runtime must also be installed (pkg install openjdk25).
+
+Pro flavor
+----------
+
+This port has two flavors: default (community) and pro. To build the
+pro flavor from source:
+
+ cd /usr/ports/print/publisher-devel
+ make FLAVOR=pro install clean
diff --git a/print/publisher-devel/pkg-plist b/print/publisher-devel/pkg-plist
new file mode 100644
index 000000000000..eb7521a6cc9f
--- /dev/null
+++ b/print/publisher-devel/pkg-plist
@@ -0,0 +1,136 @@
+bin/sp
+%%JAVA_TOOLS%%etc/speedata/publisher.cfg.sample
+lib/speedata-publisher/libsplib.so
+lib/speedata-publisher/luaglue.so
+share/speedata-publisher/schema/catalog-schema-de.xml
+share/speedata-publisher/schema/catalog-schema-en.xml
+share/speedata-publisher/schema/layoutschema-de.rng
+share/speedata-publisher/schema/layoutschema-de.xsd
+share/speedata-publisher/schema/layoutschema-en.rng
+share/speedata-publisher/schema/layoutschema-en.xsd
+share/speedata-publisher/sw/colorprofiles/ISOcoated_v2_eci.icc
+share/speedata-publisher/sw/fonts/camingocode/CamingoCode-Bold.ttf
+share/speedata-publisher/sw/fonts/camingocode/CamingoCode-BoldItalic.ttf
+share/speedata-publisher/sw/fonts/camingocode/CamingoCode-Italic.ttf
+share/speedata-publisher/sw/fonts/camingocode/CamingoCode-Regular.ttf
+share/speedata-publisher/sw/fonts/crimsonpro/CrimsonPro-Bold.ttf
+share/speedata-publisher/sw/fonts/crimsonpro/CrimsonPro-BoldItalic.ttf
+share/speedata-publisher/sw/fonts/crimsonpro/CrimsonPro-Italic.ttf
+share/speedata-publisher/sw/fonts/crimsonpro/CrimsonPro-Regular.ttf
+share/speedata-publisher/sw/fonts/texgyreheros/texgyreheros-bold.otf
+share/speedata-publisher/sw/fonts/texgyreheros/texgyreheros-bolditalic.otf
+share/speedata-publisher/sw/fonts/texgyreheros/texgyreheros-italic.otf
+share/speedata-publisher/sw/fonts/texgyreheros/texgyreheros-regular.otf
+share/speedata-publisher/sw/hyphenation/hyph-bg.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-ca.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-cs.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-cy.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-da.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-de-1996.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-el-monoton.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-en-gb.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-en-us.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-eo.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-es.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-et.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-eu.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-fi.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-fr.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-ga.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-gl.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-grc.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-gu.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-hi.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-hr.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-hu.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-hy.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-id.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-is.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-it.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-kmr.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-kn.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-lt.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-lv.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-ml.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-nb.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-nl.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-nn.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-pl.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-pt.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-ro.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-ru.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-sa.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-sk.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-sl.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-sr-cyrl.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-sr.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-sv.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-tr.pat.txt
+share/speedata-publisher/sw/hyphenation/hyph-uk.pat.txt
+share/speedata-publisher/sw/img/_samplea.pdf
+share/speedata-publisher/sw/img/_sampleb.pdf
+share/speedata-publisher/sw/img/filenotfound.pdf
+share/speedata-publisher/sw/lua/.gitignore
+share/speedata-publisher/sw/lua/barcodes/barcodes.lua
+share/speedata-publisher/sw/lua/barcodes/qrencode.lua
+share/speedata-publisher/sw/lua/box.lua
+share/speedata-publisher/sw/lua/common/lua-visual-debug.lua
+share/speedata-publisher/sw/lua/common/sd-callbacks.lua
+share/speedata-publisher/sw/lua/common/sd-debug.lua
+share/speedata-publisher/sw/lua/css.lua
+share/speedata-publisher/sw/lua/dimexpr.lua
+share/speedata-publisher/sw/lua/fonts/fontloader.lua
+share/speedata-publisher/sw/lua/html.lua
+share/speedata-publisher/sw/lua/html/fonts.lua
+share/speedata-publisher/sw/lua/html/images.lua
+share/speedata-publisher/sw/lua/html/inherit.lua
+share/speedata-publisher/sw/lua/html/inline_images.lua
+share/speedata-publisher/sw/lua/html/inline_options.lua
+share/speedata-publisher/sw/lua/html/inline_utils.lua
+share/speedata-publisher/sw/lua/html/lists.lua
+share/speedata-publisher/sw/lua/html/pages.lua
+share/speedata-publisher/sw/lua/html/strings.lua
+share/speedata-publisher/sw/lua/html/styles.lua
+share/speedata-publisher/sw/lua/html/tables.lua
+share/speedata-publisher/sw/lua/html/tree.lua
+share/speedata-publisher/sw/lua/html/units.lua
+share/speedata-publisher/sw/lua/luxor.lua
+share/speedata-publisher/sw/lua/lxpath.lua
+share/speedata-publisher/sw/lua/par.lua
+share/speedata-publisher/sw/lua/publisher.lua
+share/speedata-publisher/sw/lua/publisher/attributes.lua
+share/speedata-publisher/sw/lua/publisher/colors.lua
+share/speedata-publisher/sw/lua/publisher/commands.lua
+share/speedata-publisher/sw/lua/publisher/dispatch.lua
+share/speedata-publisher/sw/lua/publisher/drawing.lua
+share/speedata-publisher/sw/lua/publisher/fontfamilies.lua
+share/speedata-publisher/sw/lua/publisher/fonts.lua
+share/speedata-publisher/sw/lua/publisher/grid.lua
+share/speedata-publisher/sw/lua/publisher/images.lua
+share/speedata-publisher/sw/lua/publisher/language.lua
+share/speedata-publisher/sw/lua/publisher/layout_functions.lua
+share/speedata-publisher/sw/lua/publisher/layout_functions_lxpath.lua
+share/speedata-publisher/sw/lua/publisher/links.lua
+share/speedata-publisher/sw/lua/publisher/metadata.lua
+share/speedata-publisher/sw/lua/publisher/metapost.lua
+share/speedata-publisher/sw/lua/publisher/nodes.lua
+share/speedata-publisher/sw/lua/publisher/page.lua
+share/speedata-publisher/sw/lua/publisher/pages.lua
+share/speedata-publisher/sw/lua/publisher/spinit.lua
+share/speedata-publisher/sw/lua/publisher/structure_tree.lua
+share/speedata-publisher/sw/lua/publisher/tabular.lua
+share/speedata-publisher/sw/lua/publisher/utilities.lua
+share/speedata-publisher/sw/lua/publisher/xml_helpers.lua
+share/speedata-publisher/sw/lua/sampler.lua
+share/speedata-publisher/sw/lua/sdini.lua
+share/speedata-publisher/sw/lua/sdscripts.lua
+share/speedata-publisher/sw/lua/shalocal.lua
+share/speedata-publisher/sw/lua/socket_url.lua
+share/speedata-publisher/sw/lua/spotcolors.lua
+share/speedata-publisher/sw/lua/uuid.lua
+share/speedata-publisher/sw/lua/xmlbuilder.lua
+share/speedata-publisher/sw/lua/xpath.lua
+share/speedata-publisher/sw/metapost/csscolors.mp
+share/speedata-publisher/sw/metapost/plain.mp
+share/speedata-publisher/sw/metapost/sp.mp
+share/speedata-publisher/sw/tex/publisher.tex