Subject: [bug#67549] [PATCH v2 2/2] gnu: Add latexml.

From: Steve George <[email-masked]>
Date: Thu, 11 Apr 2024 23:10:40 +0100

From: Nicolas Graves via Guix-patches via <[email-masked]>

* gnu/packages/markup.scm (latexml): New variable.

Reviewed-by: Steve George <[email-masked]>

Change-Id: If7199a8b74b990ad29718adcb905a5ed31882cf5
---
 gnu/packages/markup.scm | 117 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 116 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/markup.scm b/gnu/packages/markup.scm
index 6d891ee313..2cc3d0415d 100644
--- a/gnu/packages/markup.scm
+++ b/gnu/packages/markup.scm
@@ -12,6 +12,7 @@
 ;;; Copyright © 2022 jgart <[email-masked]>
 ;;; Copyright © 2022, 2024 Vinicius Monego <[email-masked]>
 ;;; Copyright © 2023 Zheng Junjie <[email-masked]>
+;;; Copyright © 2023 Nicolas Graves <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -44,15 +45,21 @@ (define-module (gnu packages markup)
   #:use-module (guix gexp)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages libffi)
+  #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
+  #:use-module (gnu packages perl-compression)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
-  #:use-module (gnu packages web))
+  #:use-module (gnu packages tex)
+  #:use-module (gnu packages web)
+  #:use-module (gnu packages xml))
 
 (define-public hoedown
   (package
@@ -126,6 +133,114 @@ (define-public markdown
     (license (license:non-copyleft "file://License.text"
                                    "See License.text in the distribution."))))
 
+(define-public latexml
+  (package
+    (name "latexml")
+    (version "0.8.8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/brucemiller/LaTeXML")
+              (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+         (base32
+           "0lppm66fxadsbn73xh0nfqdi4y6d9j6xph1slvlp6ynrfbnn5p6s"))))
+    (build-system perl-build-system)
+    (arguments
+     (let ((wraplibs
+             (list "perl-archive-zip"
+                   "perl-common-sense"
+                   "perl-db-file"
+                   "perl-encode-locale"
+                   "perl-file-which"
+                   "perl-getopt-long"
+                   "perl-http-date"
+                   "perl-http-message"
+                   "perl-image-magick"
+                   "perl-image-size"
+                   "perl-io-string"
+                   "perl-json-xs"
+                   "perl-libwww"
+                   "perl-mime-base64"
+                   "perl-parse-recdescent"
+                   "perl-pod-parser"
+                   "perl-text-unidecode"
+                   "perl-time-hires"
+                   "perl-try-tiny"
+                   "perl-types-serialiser"
+                   "perl-uri"
+                   "perl-xml-libxml"
+                   "perl-xml-libxslt"
+                   "perl-xml-sax-base")))
+       (list
+        ;; some tests skip due to missing dependencies
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'install 'find-itself
+              ;; Fix run-time 'Can't locate [].pm in @INC' failure and remove
+              ;; need for extensive set of propagated inputs
+              (lambda* (#:key inputs outputs #:allow-other-keys)
+                  (with-directory-excursion (string-append #$output "/bin")
+                    (for-each
+                     (lambda* (program)
+                       (wrap-program program
+                         `("PERL5LIB" ":" prefix
+                           (,(string-append #$output "/lib/perl5/site_perl")
+                            ,#$@(map (lambda (in)
+                                       (file-append
+                                        (this-package-input in) "/lib/perl5/site_perl"))
+                                     wraplibs)))))
+                     (find-files "." ".*")))))))))
+    (inputs
+     (list bash-minimal
+           libxml2
+           libxslt
+           perl
+           perl-archive-zip
+           perl-common-sense
+           perl-db-file
+           perl-encode-locale
+           perl-file-which
+           perl-getopt-long
+           perl-http-date
+           perl-http-message
+           perl-image-magick
+           perl-image-size
+           perl-io-string
+           perl-json-xs
+           perl-libwww
+           perl-mime-base64
+           perl-parse-recdescent
+           perl-pod-parser
+           perl-text-unidecode
+           perl-time-hires
+           perl-try-tiny
+           perl-types-serialiser
+           perl-uri
+           perl-xml-libxml
+           perl-xml-libxslt
+           perl-xml-sax-base))
+    (native-inputs
+     (list texlive-bin
+           perl-test-more-utf8
+           perl-extutils-manifest
+           perl-data-dumper
+           perl-ipc-run3
+           perl-file-temp))
+    (home-page "https://math.nist.gov/~BMiller/LaTeXML/")
+    (synopsis "LaTeX to XML, HTML, MathML, epub and Jats converter")
+    (description "This package provides a LaTeX converter, with the following goals:
+@itemize
+@item Faithful emulation of TEX’s behaviour;
+@item Easily extensible;
+@item Lossless, preserving both semantic and presentation cues;
+@item Use an abstract LATEX-like, extensible, document type;
+@item Infer the semantics of mathematical content
+@end itemize")
+    (license license:cc0)))
+
 (define-public lowdown
   (package
     (name "lowdown")
-- 
2.41.0