guix_mirror_bot pushed a commit to branch master
in repository guix.
commit 139558fa9e4e1b9cc6aac5f65b7a89dccc6a29c5
Author: Arun Isaac <[email protected]>
AuthorDate: Mon Mar 9 16:23:17 2026 +0000
gnu: Add docbook-xsltng.
* gnu/packages/docbook.scm (docbook-xsltng): New variable.
Change-Id: Ic2a41ffa2bcc922aab03c5a38594efad35f66ac3
---
gnu/packages/docbook.scm | 193 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 193 insertions(+)
diff --git a/gnu/packages/docbook.scm b/gnu/packages/docbook.scm
index 91e2da2599..870ac6318f 100644
--- a/gnu/packages/docbook.scm
+++ b/gnu/packages/docbook.scm
@@ -9,6 +9,7 @@
;;; Copyright © 2021 Efraim Flashner <[email protected]>
;;; Copyright © 2021 Andrew Whatson <[email protected]>
;;; Copyright © 2023 Bruno Victal <[email protected]>
+;;; Copyright © 2026 Arun Isaac <[email protected]>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -31,6 +32,8 @@
#:use-module (gnu packages bash)
#:use-module (gnu packages compression)
#:use-module (gnu packages groff)
+ #:use-module (gnu packages java)
+ #:use-module (gnu packages java-xml)
#:use-module (gnu packages imagemagick)
#:use-module (gnu packages inkscape)
#:use-module (gnu packages tex)
@@ -38,6 +41,7 @@
#:use-module (gnu packages perl)
#:use-module (gnu packages python)
#:use-module (gnu packages python-build)
+ #:use-module (gnu packages python-xyz)
#:use-module (gnu packages base)
#:use-module (gnu packages web)
#:use-module (gnu packages web-browsers)
@@ -50,6 +54,7 @@
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
+ #:use-module (guix build-system ant)
#:use-module (guix build-system copy)
#:use-module (guix build-system gnu)
#:use-module (guix build-system pyproject)
@@ -503,6 +508,194 @@ V4.1.2 that adds support for MathML in equation markup.")
"This package provides XSL style sheets for DocBook.")
(license (license:x11-style "" "See 'COPYING' file.")))))
+(define-public docbook-xsltng
+ ;; docbook-xsltng 1.4.0 is the last version that does not depend on
+ ;; org.xmlresolver.
+ (package
+ (name "docbook-xsltng")
+ ;; When updating this package, also update the gitref in the build phase.
+ (version "1.4.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://codeberg.org/DocBook/xslTNG")
+ ;; The Codeberg repo does not have the tag for the 1.4.0
+ ;; release; only the older GitHub repo does.
+ (commit "f5c8bd9930d75191d029a3f01d3b58d8bb873551")))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0assl9p52lhrscyd47j1dq9r48j6d8jcl4a75350x5d20qc5f6yy"))
+ (snippet
+ #~(begin
+ ;; Delete bundled CSS and javascript files.
+ (for-each delete-file
+ (list "src/main/web/css/prism.css"
+ "src/main/web/js/prism.js"))))))
+ (build-system ant-build-system)
+ ;; Upstream uses gradle to build and run the tests. Since we don't have a
+ ;; gradle package yet, we translate many of the build steps to scheme. For
+ ;; simplicity, we skip the tests for now.
+ (arguments
+ (list
+ #:tests? #f
+ #:jar-name "docbook-xsltng.jar"
+ #:source-dir "src/main/java"
+ #:modules '((guix build ant-build-system)
+ (guix build utils)
+ (ice-9 match))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'rearrange-sources
+ (lambda _
+ ;; Unify all sources under the same directory tree.
+ (rename-file
"buildSrc/src/main/java/org/docbook/xsltng/extensions"
+ "src/main/java/org/docbook/xsltng/extensions")
+ ;; From line 29 of buildSrc/build.gradle
+ (call-with-output-file
"src/main/java/org/docbook/xsltng/BuildConfig.java"
+ (lambda (port)
+ (format port
+ "package org.docbook.xsltng;
+
+public final class BuildConfig {
+ public static final String TITLE = \"DocBook xslTNG\";
+ public static final String VERSION = \"~a\";
+ public static final String SAXON_VERSION = \"~a\";
+ private BuildConfig() {}
+}
+"
+ #$version
+ #$(package-version java-saxon-he-10))))
+ ;; We have not packaged com.nwalsh.xslt and
+ ;; org.iso_relax.verifier. Hence we cannot compile these
+ ;; extensions; delete them for now.
+ (substitute*
"src/main/java/org/docbook/xsltng/extensions/Register.java"
+ (("config\\.registerExtensionFunction\\(new
XInclude\\(\\)\\);")
+ "")
+ (("config\\.registerExtensionFunction\\(new
ValidateRNG\\(\\)\\);")
+ ""))
+ (for-each delete-file
+ (list
"src/main/java/org/docbook/xsltng/extensions/ValidateRNG.java"
+
"src/main/java/org/docbook/xsltng/extensions/XInclude.java"))))
+ (add-after 'build 'build-stylesheets
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; Build XSLT stylesheets using saxon.
+ (let ((saxon (search-input-file inputs
"share/java/saxon-he.jar")))
+ (for-each (match-lambda
+ ((source stylesheet output params ...)
+ (format #t "SAXON ~a + ~a -> ~a ~a~%"
+ source stylesheet output params)
+ (apply invoke
+ "java"
+ "-classpath" saxon
+ "net.sf.saxon.Transform"
+ (string-append "-s:" source)
+ (string-append "-xsl:" stylesheet)
+ (string-append "-o:" output)
+ params)))
+ `(("src/main/xslt/param.xsl"
+ "tools/parameter-maps.xsl"
+ "src/main/xslt/parameter-maps.xsl")
+ ("tools/version.xsl"
+ "tools/version.xsl"
+ "src/main/xslt/VERSION.xsl"
+ ,(string-append "version=" #$version)
+ ;; When updating this package, update this gitref
+ ;; to the commit corresponding to the release.
+ "gitref=f5c8bd993")
+ ,@(map (lambda (xml)
+ (list xml
+ "tools/xform-locale.xsl"
+ (string-append
"src/main/xslt/locale/"
+ (basename xml))))
+ (find-files "src/main/locales/locale"
+ "\\.xml$")))))
+ ;; Substitute in TITLE and VERSION.
+ (substitute* (append (find-files "src/main/web/css" "\\.css$")
+ (find-files "src/main/web/js" "\\.js$"))
+ (("@@TITLE@@") "DocBook xslTNG")
+ (("@@VERSION@@") #$version))
+ ;; ;; Generate pygments CSS file.
+ (invoke "python3" "tools/generate-pygments.py"
+ "--version" #$version
+ "--title" "DocBook xslTNG"
+ "--output" "src/main/web/css/pygments.css")))
+ (add-after 'install 'install-bin
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ ;; Install XSLT stylesheets.
+ (copy-recursively "src/main/xslt"
+ (string-append #$output
+ "/xml/xsl/docbook-xsltng-"
+ #$version))
+ ;; Install CSS and javascript files.
+ (copy-recursively "src/main/web"
+ (string-append #$output "/share/web"))
+ ;; Configure paths in docbook script.
+ (let ((bin (string-append #$output "/bin")))
+ (mkdir-p bin)
+ (substitute* "src/bin/docbook.py"
+ ;; Path to java
+ (("self._java = None")
+ (string-append "self._java = \""
+ (search-input-file inputs "bin/java")
+ "\""))
+ ;; Path to docbook.xsl
+ (("\\{self\\.root\\}/xslt/docbook.xsl")
+ (search-input-file outputs
+ (string-append "xml/xsl/docbook-xsltng-"
+ #$version
+ "/docbook.xsl")))
+ ;; Path to web resources
+ (("\\{self\\.root\\}/resources")
+ (search-input-directory outputs "share/web"))
+ ;; Disable computing classpath.
+ (("docbook\\.compute_dependencies\\(\\)") "")
+ ;; Set classpath explicitly.
+ (("cp = self\\.classpath\\(\\)")
+ (let ((docbook-xsltng
+ (search-input-file outputs
+ "share/java/docbook-xsltng.jar"))
+ (metadata-extractor
+ (search-input-file inputs
+
"share/java/metadata-extractor.jar"))
+ (saxon
+ (search-input-file inputs
+ "share/java/saxon-he.jar")))
+ (string-append "cp = \""
+ (list->search-path-as-string
+ (list docbook-xsltng
+ metadata-extractor
+ saxon)
+ ":")
+ "\"")))
+ ;; Disable references to org.xmlresolver dependencies that
+ ;; have not been packaged yet.
+ (("\"-x:org.xmlresolver.tools.ResolvingXMLReader\",") "")
+ (("\"-y:org.xmlresolver.tools.ResolvingXMLReader\",") "")
+ (("\"-r:org.xmlresolver.Resolver\",") ""))
+ ;; Install docbook script.
+ (copy-file "src/bin/docbook.py"
+ (string-append bin "/docbook"))
+ ;; Wrap docbook script in python environment.
+ (wrap-program (string-append bin "/docbook")
+ `("GUIX_PYTHONPATH" ":" prefix
+ (,(getenv "GUIX_PYTHONPATH"))))))))))
+ (inputs
+ (list bash-minimal
+ java-metadata-extractor
+ java-saxon-he-10
+ python
+ python-click
+ python-pygments))
+ (home-page "https://xsltng.docbook.org/")
+ (synopsis "XSLT 3.0 stylesheets for DocBook")
+ (description "This package provides XSLT 3.0 stylesheets for DocBook.
+They transform DocBook XML documents into clean, semantically rich HTML5. CSS
+stylesheet and javascript suitable for online presentation is included.
+Producing high quality print output with a paged media capable CSS processor
+is also supported.")
+ (license license:expat)))
+
(define-public docbook-dsssl
(package
(name "docbook-dsssl")