texlive[58563] trunk: make4ht (20mar21)

commits+karl at tug.org commits+karl at tug.org
Sat Mar 20 23:20:13 CET 2021


Revision: 58563
          http://tug.org/svn/texlive?view=revision&revision=58563
Author:   karl
Date:     2021-03-20 23:20:13 +0100 (Sat, 20 Mar 2021)
Log Message:
-----------
make4ht (20mar21)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/make4ht/make4ht
    trunk/Master/texmf-dist/doc/support/make4ht/README
    trunk/Master/texmf-dist/doc/support/make4ht/changelog.tex
    trunk/Master/texmf-dist/doc/support/make4ht/make4ht-doc.pdf
    trunk/Master/texmf-dist/doc/support/make4ht/readme.tex
    trunk/Master/texmf-dist/scripts/make4ht/domfilters/make4ht-joincharacters.lua
    trunk/Master/texmf-dist/scripts/make4ht/domfilters/make4ht-mathmlfixes.lua
    trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-mathjaxnode.lua
    trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-staticsite.lua
    trunk/Master/texmf-dist/scripts/make4ht/formats/make4ht-odt.lua
    trunk/Master/texmf-dist/scripts/make4ht/make4ht
    trunk/Master/texmf-dist/scripts/make4ht/make4ht-logging.lua
    trunk/Master/texmf-dist/scripts/make4ht/mkutils.lua

Added Paths:
-----------
    trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-build_changed.lua
    trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-mjcli.lua
    trunk/Master/texmf-dist/scripts/make4ht/filters/make4ht-mjcli.lua
    trunk/Master/texmf-dist/scripts/make4ht/make4ht-odtfilter.lua

Modified: trunk/Build/source/texk/texlive/linked_scripts/make4ht/make4ht
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/make4ht/make4ht	2021-03-20 22:19:52 UTC (rev 58562)
+++ trunk/Build/source/texk/texlive/linked_scripts/make4ht/make4ht	2021-03-20 22:20:13 UTC (rev 58563)
@@ -29,7 +29,7 @@
 
 -- set version number. the template should be replaced by the
 -- actual version number by the build script
-local version = "v0.3f"
+local version = "v0.3g"
 mkparams.version_number = version
 
 local args = mkparams.get_args()
@@ -123,4 +123,5 @@
 make:run()
 
 log:status("Conversion finished")
+logging.exit_status()
 

Modified: trunk/Master/texmf-dist/doc/support/make4ht/README
===================================================================
--- trunk/Master/texmf-dist/doc/support/make4ht/README	2021-03-20 22:19:52 UTC (rev 58562)
+++ trunk/Master/texmf-dist/doc/support/make4ht/README	2021-03-20 22:20:13 UTC (rev 58563)
@@ -2,13 +2,19 @@
 
 # Introduction
 
-`make4ht` is a build system for \TeX4ht, \TeX\ to XML converter. It provides a command line tool
+`make4ht` is a build system for [\TeX4ht](https://tug.org/tex4ht/), \TeX\ to XML converter. It provides a command line tool
 that drives the conversion process. It also provides a library that can be used to create
 customized conversion tools. An example of such a tool is
 [tex4ebook](https://github.com/michal-h21/tex4ebook), a tool for conversion from \TeX\ to
 ePub and other e-book formats.
 
+See section \ref{sec:htlatex} for some reasons why you should consider to use `make4ht` instead of `htlatex`,  
+section \ref{sec:output} talks about supported output formats and extensions and section \ref{sec:buildfiles} 
+describes build files, which can be used to execute additional commands or post-process the generated files.
 
+
+# Usage
+
 The basic conversion from \LaTeX\ to `HTML` using `make4ht` can be executed using the following command:
 
     $ make4ht filename.tex
@@ -15,8 +21,7 @@
 
 It will produce a file named `filename.html` if the compilation goes without fatal errors.
 
-
-# Command line options {#clioptions}
+## Command line options {#clioptions}
 \label{sec:clioptions}
 
     make4ht - build system for TeX4ht
@@ -29,7 +34,7 @@
          possible values: tex4ht or lua4ht
     -c,--config (default xhtml) Custom config file
     -d,--output-dir (default "")  Output directory
-    -e,--build-file (default nil)  If build filename is different 
+    -e,--build-file (default nil)  If the build filename is different 
          than `filename`.mk4
     -f,--format  (default nil)  Output file format
     -j,--jobname (default nil)  Set the jobname
@@ -42,8 +47,9 @@
     -v,--version  Print version number
     <filename> (string) Input filename
 
+## Option handling
 
-It is still possible to invoke `make4ht` in the same way as is invoked `htlatex`:
+It is possible to invoke `make4ht` in the same way as `htlatex`:
 
     $ make4ht filename "customcfg, charset=utf-8" "-cunihtf -utf8" "-dfoo"
 
@@ -58,7 +64,7 @@
     $ make4ht -u -c customcfg -d foo filename
 
 
-Output directory doesn't have to exist, it will be created automatically. 
+Output directory does not have to exist, it `make4ht` creates it automatically. 
 Specified path can be relative to the current directory, or absolute:
 
     $ make4ht -d use/current/dir/ filename
@@ -66,21 +72,25 @@
     $ make4ht -d ~/gotohomedir filename
     $ make4ht -d c:\documents\windowspathsareworkingtoo filename
 
-The short options that don't take parameters can be collapsed:
+The short options that do not take parameters can be collapsed:
 
 
     $ make4ht -ulc customcfg -d foo filename
 
+## Input from the standard input
 
-To pass output from the other commands to `make4ht` use the `-` character as a
+
+To pass the output from other commands to `make4ht`, use the `-` character as a
 filename. It is best to use this feature together with the `--jobname` or `-j`
 option.
 
     $ cat hello.tex | make4ht -j world -
 
+## Change amount of information printed on the command line
+
 By default, `make4ht` tries to be quiet, so it hides most of the command line
-messages and the output from the executed commands. It will display only status
-messages, warnings and errors. The logging level can be selected using the
+messages and output from the executed commands. It displays status
+messages, warnings, and errors. The logging level can be selected using the
 `--loglevel` or `-a` options. If the compilation fails, it may be useful to display more 
 information using the `info` or `debug` levels. 
 
@@ -89,7 +99,8 @@
 
 
 
-# Why `make4ht`? -- `htlatex` issues
+# Difference of `make4ht` from  `htlatex` 
+\label{sec:htlatex}
 
 
 \TeX4ht\ system supports several output formats, most notably `XHTML`, `HTML 5`
@@ -104,7 +115,7 @@
 is then processed using the `tex4ht` command, which in conjunction with the
 `t4ht` command produces the desired output files.
 
-## Passing command line arguments
+## Passing of command line arguments to low-level commands used in the conversion
 
 The basic conversion script provided by \TeX4ht\ system is named `htlatex`. It  compiles \LaTeX\  
 files to `HTML` with this command sequence:
@@ -183,15 +194,15 @@
 
     $ make4ht -d outputdir filename.tex
 
-## Image conversion and post-processing of the generated files
+## Image conversion and postprocessing of the generated files
 
 \TeX4ht\ can convert parts of the document to images. This is useful 
 for diagrams or complicated math, for example.
 
 By default, the image conversion is configured in a
-[`.env` file](http://www.tug.org/applications/tex4ht/mn35.html#index35-73001).
+[`.env` file](https://www.tug.org/applications/tex4ht/mn34.html#mn35.html).
 It has a bit of strange syntax,  with 
-[operating system dependent](http://www.tug.org/applications/tex4ht/mn-unix.html#index27-69005) rules.
+operating system dependent rules.
 `make4ht` provides simpler means for the image conversion in the build files.
 It is possible to change the image conversion parameters without a need to modify the `.env` file.
 The process is described in section \ref{sec:imageconversion}.
@@ -203,6 +214,7 @@
 
 
 # Output file formats and extensions
+\label{sec:output}
 
 The default output format used by `make4ht` is `html5`. A different
 format can be requested using the `--format` option. Supported formats are:
@@ -263,10 +275,17 @@
 
 mathjaxnode
 
-:    use [mathjax-node-page](https://github.com/pkra/mathjax-node-page/) to
+:    (**deprecated**, use `mjcli` extension instead) Old information: use [mathjax-node-page](https://github.com/pkra/mathjax-node-page/) to
      convert from MathML code to HTML + CSS or SVG. See [the available
      settings](#mathjaxsettings).
 
+mjcli
+
+:    use [mjcli](https://github.com/michal-h21/mjcli) to convert math in MathML or \LaTeX\ 
+     format to plain HTML + CSS. MathML is used by default. If you want to use \LaTeX\ math,
+     add "mathjax" option on the command line (like `make4ht -f html5+mjcli filename.tex "mathjax"`).
+     See [the available settings](#mathjaxsettings).
+
 odttemplate
 
 :    it automatically loads the `odttemplate` filter (page \pageref{sec:odttemplate}).
@@ -543,10 +562,16 @@
 
 mathjaxnode
 
-:    use [mathjax-node-page](https://github.com/pkra/mathjax-node-page/) to
+:    (**deprecated**, use `mjcli` extension instead) Old information: use [mathjax-node-page](https://github.com/pkra/mathjax-node-page/) to
      convert from MathML code to HTML + CSS or SVG. See [the available
      settings](#mathjaxsettings).
 
+mjcli
+
+:    use [mjcli](https://github.com/michal-h21/mjcli) to convert math in MathML or \LaTeX\ 
+     format to plain HTML + CSS.  See [the available settings](#mathjaxsettings).
+
+
 odttemplate
 
 :    use styles from another `ODT` file serving as a template in the current
@@ -797,7 +822,7 @@
      if the exit code of the executed command has a different value.
 
 
-# Configuration file {#configfile}
+# `make4ht` configuration file {#configfile}
 
 It is possible to globally modify the build settings using the configuration
 file. It is a special version of a build file where the global settings can be set.
@@ -948,32 +973,38 @@
 
     filter_settings "joincharacters" { charclasses = { span=true, mn = true}}
 
-## The `mathjaxnode` filter {#mathjaxsettings}
+## The `mjcli` filter and extension {#mathjaxsettings}
 
+`mjcli` detects whether to use MathML or \LaTeX\ input by use of the `mathjax` option for `make4ht`. By default, it uses MathML. \LaTeX\ input can be required using:
+
+    make4ht -f html5+mjcli filename.tex "mathjax"
+
+### Available settings
+
 options
 
-:  command line options for the `mjpage` command. Default value is `--output CommonHTML`
+:  command line options for the `mjcli` command. 
 
 Example
 
-    filter_settings "mathjaxnode" {
-      options="--output SVG --font Neo-Euler"
+    filter_settings "mjcli" {
+      options="--svg"
     }
 
 cssfilename  
 
-:  the `mjpage` command puts some CSS code into the HTML pages. `mathjaxnode` extracts this information and saves it to a standalone CSS file. Default CSS filename is `mathjax-chtml.css`
+:  the `mjcli` command puts some CSS code into the HTML pages. The `mjcli` filter extracts this information and saves it to a standalone CSS file. Default name of this CSS file is `${input}-mathjax.css`
 
 fontdir
 
 :  directory with MathJax font files. This option enables the use of local fonts, which
    is useful in the conversion to ePub, for example. The font directory should be
-   sub-directory of the current directory. Only TeX font is supported at the moment.
+   sub-directory of the current directory. Only \TeX\ font is supported at the moment.
 
 Example
 
 
-    filter_settings "mathjaxnode" {
+    filter_settings "mjcli" {
       fontdir="fonts/TeX/woff/" 
     }
 

Modified: trunk/Master/texmf-dist/doc/support/make4ht/changelog.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/make4ht/changelog.tex	2021-03-20 22:19:52 UTC (rev 58562)
+++ trunk/Master/texmf-dist/doc/support/make4ht/changelog.tex	2021-03-20 22:20:13 UTC (rev 58563)
@@ -3,6 +3,117 @@
 
 \begin{itemize}
 \item
+  2021/03/19
+
+  \begin{itemize}
+  \tightlist
+  \item
+    version \texttt{0.3g} released.
+  \end{itemize}
+\item
+  2021/02/08
+
+  \begin{itemize}
+  \tightlist
+  \item
+    remove \texttt{\textless{}?xtpipes\ ?\textgreater{}} processing
+    instructions from the generated ODT file.
+  \end{itemize}
+\item
+  2021/02/01
+
+  \begin{itemize}
+  \tightlist
+  \item
+    better error messages when extension cannot be loaded.
+  \item
+    added \texttt{mjcli} extension.
+  \item
+    \texttt{mjcli} filter supports \LaTeX~syntax.
+  \item
+    updated documentation.
+  \end{itemize}
+\item
+  2021/01/31
+
+  \begin{itemize}
+  \tightlist
+  \item
+    added new MathJax Node filter, \texttt{mjcli}.
+  \end{itemize}
+\item
+  2020/12/19
+
+  \begin{itemize}
+  \tightlist
+  \item
+    build web documentation only when documentation sources change.
+  \end{itemize}
+\item
+  2020/11/22
+
+  \begin{itemize}
+  \tightlist
+  \item
+    set exit status for the \texttt{make4ht} command.
+  \end{itemize}
+\item
+  2020/11/22
+
+  \begin{itemize}
+  \tightlist
+  \item
+    new extension, \texttt{build\_changed}.
+  \end{itemize}
+\item
+  2020/11/01
+
+  \begin{itemize}
+  \tightlist
+  \item
+    fix deprecated \texttt{\textless{}mfenced\textgreater{}} element in
+    MathML
+  \item
+    convert \texttt{\textless{}mo\ fence\textgreater{}} elements to
+    \texttt{\textless{}mfenced\textgreater{}} in \texttt{ODT} format.
+  \end{itemize}
+\item
+  2020/10/28
+
+  \begin{itemize}
+  \tightlist
+  \item
+    fixed handling of nested \texttt{\textless{}span\textgreater{}}
+    elements in \texttt{joincharacters} DOM filter.
+  \end{itemize}
+\item
+  2020/10/25
+
+  \begin{itemize}
+  \tightlist
+  \item
+    fixed command name for \texttt{Make:httex}, it was
+    \texttt{Make:htttex}.
+  \end{itemize}
+\item
+  2020/10/17
+
+  \begin{itemize}
+  \tightlist
+  \item
+    generate YAML header for all generated files with the
+    \texttt{staticsite} extension.
+  \end{itemize}
+\item
+  2020/09/17
+
+  \begin{itemize}
+  \tightlist
+  \item
+    require \texttt{mathml} option when \texttt{mathjaxnode} extension
+    is used.
+  \end{itemize}
+\item
   2020/09/07
 
   \begin{itemize}

Modified: trunk/Master/texmf-dist/doc/support/make4ht/make4ht-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/support/make4ht/readme.tex
===================================================================
--- trunk/Master/texmf-dist/doc/support/make4ht/readme.tex	2021-03-20 22:19:52 UTC (rev 58562)
+++ trunk/Master/texmf-dist/doc/support/make4ht/readme.tex	2021-03-20 22:20:13 UTC (rev 58563)
@@ -1,13 +1,24 @@
 \hypertarget{introduction}{%
 \section{Introduction}\label{introduction}}
 
-\texttt{make4ht} is a build system for \TeX4ht, \TeX~to XML converter.
-It provides a command line tool that drives the conversion process. It
-also provides a library that can be used to create customized conversion
+\texttt{make4ht} is a build system for
+\href{https://tug.org/tex4ht/}{\TeX4ht}, \TeX~to XML converter. It
+provides a command line tool that drives the conversion process. It also
+provides a library that can be used to create customized conversion
 tools. An example of such a tool is
 \href{https://github.com/michal-h21/tex4ebook}{tex4ebook}, a tool for
 conversion from \TeX~to ePub and other e-book formats.
 
+See section \ref{sec:htlatex} for some reasons why you should consider
+to use \texttt{make4ht} instead of \texttt{htlatex},\\
+section \ref{sec:output} talks about supported output formats and
+extensions and section \ref{sec:buildfiles} describes build files, which
+can be used to execute additional commands or post-process the generated
+files.
+
+\hypertarget{usage}{%
+\section{Usage}\label{usage}}
+
 The basic conversion from \LaTeX~to \texttt{HTML} using \texttt{make4ht}
 can be executed using the following command:
 
@@ -19,7 +30,7 @@
 goes without fatal errors.
 
 \hypertarget{clioptions}{%
-\section{Command line options}\label{clioptions}}
+\subsection{Command line options}\label{clioptions}}
 
 \label{sec:clioptions}
 
@@ -34,7 +45,7 @@
      possible values: tex4ht or lua4ht
 -c,--config (default xhtml) Custom config file
 -d,--output-dir (default "")  Output directory
--e,--build-file (default nil)  If build filename is different 
+-e,--build-file (default nil)  If the build filename is different 
      than `filename`.mk4
 -f,--format  (default nil)  Output file format
 -j,--jobname (default nil)  Set the jobname
@@ -48,9 +59,12 @@
 <filename> (string) Input filename
 \end{verbatim}
 
-It is still possible to invoke \texttt{make4ht} in the same way as is
-invoked \texttt{htlatex}:
+\hypertarget{option-handling}{%
+\subsection{Option handling}\label{option-handling}}
 
+It is possible to invoke \texttt{make4ht} in the same way as
+\texttt{htlatex}:
+
 \begin{verbatim}
 $ make4ht filename "customcfg, charset=utf-8" "-cunihtf -utf8" "-dfoo"
 \end{verbatim}
@@ -70,7 +84,7 @@
 $ make4ht -u -c customcfg -d foo filename
 \end{verbatim}
 
-Output directory doesn't have to exist, it will be created
+Output directory does not have to exist, it \texttt{make4ht} creates it
 automatically. Specified path can be relative to the current directory,
 or absolute:
 
@@ -81,13 +95,17 @@
 $ make4ht -d c:\documents\windowspathsareworkingtoo filename
 \end{verbatim}
 
-The short options that don't take parameters can be collapsed:
+The short options that do not take parameters can be collapsed:
 
 \begin{verbatim}
 $ make4ht -ulc customcfg -d foo filename
 \end{verbatim}
 
-To pass output from the other commands to \texttt{make4ht} use the
+\hypertarget{input-from-the-standard-input}{%
+\subsection{Input from the standard
+input}\label{input-from-the-standard-input}}
+
+To pass the output from other commands to \texttt{make4ht}, use the
 \texttt{-} character as a filename. It is best to use this feature
 together with the \texttt{-\/-jobname} or \texttt{-j} option.
 
@@ -95,21 +113,27 @@
 $ cat hello.tex | make4ht -j world -
 \end{verbatim}
 
+\hypertarget{change-amount-of-information-printed-on-the-command-line}{%
+\subsection{Change amount of information printed on the command
+line}\label{change-amount-of-information-printed-on-the-command-line}}
+
 By default, \texttt{make4ht} tries to be quiet, so it hides most of the
-command line messages and the output from the executed commands. It will
-display only status messages, warnings and errors. The logging level can
-be selected using the \texttt{-\/-loglevel} or \texttt{-a} options. If
-the compilation fails, it may be useful to display more information
-using the \texttt{info} or \texttt{debug} levels.
+command line messages and output from the executed commands. It displays
+status messages, warnings, and errors. The logging level can be selected
+using the \texttt{-\/-loglevel} or \texttt{-a} options. If the
+compilation fails, it may be useful to display more information using
+the \texttt{info} or \texttt{debug} levels.
 
 \begin{verbatim}
 $ make4ht -a debug faulty.tex
 \end{verbatim}
 
-\hypertarget{why-make4ht-htlatex-issues}{%
-\section{\texorpdfstring{Why \texttt{make4ht}? -- \texttt{htlatex}
-issues}{Why make4ht? -- htlatex issues}}\label{why-make4ht-htlatex-issues}}
+\hypertarget{difference-of-make4ht-from-htlatex}{%
+\section{\texorpdfstring{Difference of \texttt{make4ht} from
+\texttt{htlatex}}{Difference of make4ht from htlatex}}\label{difference-of-make4ht-from-htlatex}}
 
+\label{sec:htlatex}
+
 \TeX4ht~system supports several output formats, most notably
 \texttt{XHTML}, \texttt{HTML\ 5} and \texttt{ODT}, but it also supports
 \texttt{TEI} or \texttt{Docbook}.
@@ -125,9 +149,10 @@
 \texttt{tex4ht} command, which in conjunction with the \texttt{t4ht}
 command produces the desired output files.
 
-\hypertarget{passing-command-line-arguments}{%
-\subsection{Passing command line
-arguments}\label{passing-command-line-arguments}}
+\hypertarget{passing-of-command-line-arguments-to-low-level-commands-used-in-the-conversion}{%
+\subsection{Passing of command line arguments to low-level commands used
+in the
+conversion}\label{passing-of-command-line-arguments-to-low-level-commands-used-in-the-conversion}}
 
 The basic conversion script provided by \TeX4ht~system is named
 \texttt{htlatex}. It compiles \LaTeX~ files to \texttt{HTML} with this
@@ -234,21 +259,20 @@
 $ make4ht -d outputdir filename.tex
 \end{verbatim}
 
-\hypertarget{image-conversion-and-post-processing-of-the-generated-files}{%
-\subsection{Image conversion and post-processing of the generated
-files}\label{image-conversion-and-post-processing-of-the-generated-files}}
+\hypertarget{image-conversion-and-postprocessing-of-the-generated-files}{%
+\subsection{Image conversion and postprocessing of the generated
+files}\label{image-conversion-and-postprocessing-of-the-generated-files}}
 
 \TeX4ht~can convert parts of the document to images. This is useful for
 diagrams or complicated math, for example.
 
 By default, the image conversion is configured in a
-\href{http://www.tug.org/applications/tex4ht/mn35.html\#index35-73001}{\texttt{.env}
-file}. It has a bit of strange syntax, with
-\href{http://www.tug.org/applications/tex4ht/mn-unix.html\#index27-69005}{operating
-system dependent} rules. \texttt{make4ht} provides simpler means for the
-image conversion in the build files. It is possible to change the image
-conversion parameters without a need to modify the \texttt{.env} file.
-The process is described in section \ref{sec:imageconversion}.
+\href{https://www.tug.org/applications/tex4ht/mn34.html\#mn35.html}{\texttt{.env}
+file}. It has a bit of strange syntax, with operating system dependent
+rules. \texttt{make4ht} provides simpler means for the image conversion
+in the build files. It is possible to change the image conversion
+parameters without a need to modify the \texttt{.env} file. The process
+is described in section \ref{sec:imageconversion}.
 
 It is also possible to post-process the generated output files. The
 post-processing can be done either using external programs such as
@@ -260,6 +284,8 @@
 \section{Output file formats and
 extensions}\label{output-file-formats-and-extensions}}
 
+\label{sec:output}
+
 The default output format used by \texttt{make4ht} is \texttt{html5}. A
 different format can be requested using the \texttt{-\/-format} option.
 Supported formats are:
@@ -322,9 +348,17 @@
 use \href{https://ctan.org/pkg/latexmk?lang=en}{Latexmk} for the
 \LaTeX~compilation.
 \item[mathjaxnode]
-use \href{https://github.com/pkra/mathjax-node-page/}{mathjax-node-page}
-to convert from MathML code to HTML + CSS or SVG. See
+(\textbf{deprecated}, use \texttt{mjcli} extension instead) Old
+information: use
+\href{https://github.com/pkra/mathjax-node-page/}{mathjax-node-page} to
+convert from MathML code to HTML + CSS or SVG. See
 \protect\hyperlink{mathjaxsettings}{the available settings}.
+\item[mjcli]
+use \href{https://github.com/michal-h21/mjcli}{mjcli} to convert math in
+MathML or \LaTeX~ format to plain HTML + CSS. MathML is used by default.
+If you want to use \LaTeX~math, add ``mathjax'' option on the command
+line (like \texttt{make4ht\ -f\ html5+mjcli\ filename.tex\ "mathjax"}).
+See \protect\hyperlink{mathjaxsettings}{the available settings}.
 \item[odttemplate]
 it automatically loads the \texttt{odttemplate} filter (page
 \pageref{sec:odttemplate}).
@@ -612,9 +646,15 @@
 underscores. Some cross-reference commands may produce colons in
 internal links, which results in a validation error.
 \item[mathjaxnode]
-use \href{https://github.com/pkra/mathjax-node-page/}{mathjax-node-page}
-to convert from MathML code to HTML + CSS or SVG. See
+(\textbf{deprecated}, use \texttt{mjcli} extension instead) Old
+information: use
+\href{https://github.com/pkra/mathjax-node-page/}{mathjax-node-page} to
+convert from MathML code to HTML + CSS or SVG. See
 \protect\hyperlink{mathjaxsettings}{the available settings}.
+\item[mjcli]
+use \href{https://github.com/michal-h21/mjcli}{mjcli} to convert math in
+MathML or \LaTeX~ format to plain HTML + CSS. See
+\protect\hyperlink{mathjaxsettings}{the available settings}.
 \item[odttemplate]
 use styles from another \texttt{ODT} file serving as a template in the
 current document. It works for the \texttt{styles.xml} file in the
@@ -861,7 +901,8 @@
 \end{description}
 
 \hypertarget{configfile}{%
-\section{Configuration file}\label{configfile}}
+\section{\texorpdfstring{\texttt{make4ht} configuration
+file}{make4ht configuration file}}\label{configfile}}
 
 It is possible to globally modify the build settings using the
 configuration file. It is a special version of a build file where the
@@ -1035,39 +1076,50 @@
 \end{verbatim}
 
 \hypertarget{mathjaxsettings}{%
-\subsection{\texorpdfstring{The \texttt{mathjaxnode}
-filter}{The mathjaxnode filter}}\label{mathjaxsettings}}
+\subsection{\texorpdfstring{The \texttt{mjcli} filter and
+extension}{The mjcli filter and extension}}\label{mathjaxsettings}}
 
+\texttt{mjcli} detects whether to use MathML or \LaTeX~input by use of
+the \texttt{mathjax} option for \texttt{make4ht}. By default, it uses
+MathML. \LaTeX~input can be required using:
+
+\begin{verbatim}
+make4ht -f html5+mjcli filename.tex "mathjax"
+\end{verbatim}
+
+\hypertarget{available-settings}{%
+\subsubsection{Available settings}\label{available-settings}}
+
 \begin{description}
 \item[options]
-command line options for the \texttt{mjpage} command. Default value is
-\texttt{-\/-output\ CommonHTML}
+command line options for the \texttt{mjcli} command.
 \end{description}
 
 Example
 
 \begin{verbatim}
-filter_settings "mathjaxnode" {
-  options="--output SVG --font Neo-Euler"
+filter_settings "mjcli" {
+  options="--svg"
 }
 \end{verbatim}
 
 \begin{description}
 \item[cssfilename]
-the \texttt{mjpage} command puts some CSS code into the HTML pages.
-\texttt{mathjaxnode} extracts this information and saves it to a
-standalone CSS file. Default CSS filename is \texttt{mathjax-chtml.css}
+the \texttt{mjcli} command puts some CSS code into the HTML pages. The
+\texttt{mjcli} filter extracts this information and saves it to a
+standalone CSS file. Default name of this CSS file is
+\texttt{\$\{input\}-mathjax.css}
 \item[fontdir]
 directory with MathJax font files. This option enables the use of local
 fonts, which is useful in the conversion to ePub, for example. The font
-directory should be sub-directory of the current directory. Only TeX
-font is supported at the moment.
+directory should be sub-directory of the current directory. Only
+\TeX~font is supported at the moment.
 \end{description}
 
 Example
 
 \begin{verbatim}
-filter_settings "mathjaxnode" {
+filter_settings "mjcli" {
   fontdir="fonts/TeX/woff/" 
 }
 \end{verbatim}

Modified: trunk/Master/texmf-dist/scripts/make4ht/domfilters/make4ht-joincharacters.lua
===================================================================
--- trunk/Master/texmf-dist/scripts/make4ht/domfilters/make4ht-joincharacters.lua	2021-03-20 22:19:52 UTC (rev 58562)
+++ trunk/Master/texmf-dist/scripts/make4ht/domfilters/make4ht-joincharacters.lua	2021-03-20 22:20:13 UTC (rev 58563)
@@ -56,6 +56,18 @@
   local is_span = function(next_el)
     return charclasses[get_name(next_el)]
   end
+  local has_children = function(curr)
+    -- don't process spans that have child elements
+    local children = curr:get_children() or {}
+    -- if there is more than one child, we can be sure that it has child elements
+    if #children > 1 then 
+      return true 
+    elseif #children == 1 then
+      -- test if the child is an element
+      return children[1]:is_element()
+    end
+    return false
+  end
   local join_elements = function(el, next_el)
     -- it the following element match, copy it's children to the current element
     for _, child in ipairs(next_el:get_children()) do
@@ -79,8 +91,8 @@
 
   obj:traverse_elements(function(el)
     -- loop over all elements and test if the current element is in a list of
-    -- processed elements (charclasses)
-    if is_span(el) then
+    -- processed elements (charclasses) and if it doesn't contain children
+    if is_span(el) and not has_children(el) then
       local next_el = get_next(el)
       -- loop over the following elements and test whether they are of the same type
       -- as the current one

Modified: trunk/Master/texmf-dist/scripts/make4ht/domfilters/make4ht-mathmlfixes.lua
===================================================================
--- trunk/Master/texmf-dist/scripts/make4ht/domfilters/make4ht-mathmlfixes.lua	2021-03-20 22:19:52 UTC (rev 58562)
+++ trunk/Master/texmf-dist/scripts/make4ht/domfilters/make4ht-mathmlfixes.lua	2021-03-20 22:20:13 UTC (rev 58563)
@@ -37,8 +37,75 @@
   end
 end
 
+local function get_fence(el, attr, form)
+  -- convert fence attribute to <mo> element
+  -- attr: open | close
+  -- form: prefix | postfix
+  local char = el:get_attribute(attr)
+  local mo 
+  if char then
+    mo = el:create_element("mo", {fence="true", form = form})
+    mo:add_child_node(mo:create_text_node(char))
+  end
+  return mo
+end
+
+
+local function fix_mfenced(el)
+  -- TeX4ht uses in some cases <mfenced> element which is deprecated in MathML.
+  -- Firefox doesn't support it already.
+  if el:get_element_name() == "mfenced" then
+    -- we must replace it by <mrow><mo>start</mo><mfenced children...><mo>end</mo></mrow>
+    local open = get_fence(el, "open", "prefix")
+    local close = get_fence(el, "close", "postfix")
+    -- there can be also separator attribute, but it is not used in TeX4ht
+    -- change <mfenced> to <mrow> and remove all attributes
+    el._name = "mrow"
+    el._attr = {}
+    -- open must be first child, close needs to be last
+    if open then el:add_child_node(open, 1) end
+    if close then el:add_child_node(close) end
+  end
+end
+
+local function is_fence(el)
+  return el:get_element_name() == "mo" and el:get_attribute("fence") == "true"
+end
+
+local function fix_mo_to_mfenced(el)
+  -- LibreOffice NEEDS <mfenced> element. so we need to convert <mrow><mo fence="true">
+  -- to <mfenced>. ouch.
+  if is_fence(el) then
+    local parent = el:get_parent()
+    local open = el:get_text():gsub("%s*", "") -- convert mo content to text, so it can be used in 
+    -- close needs to be the last element in the sibling list of the current element
+    local siblings = el:get_siblings()
+    el:remove_node() -- we don't need this element anymore
+    local close
+    for i = #siblings, 1, -1 do
+      last = siblings[i]
+      if last:is_element() then
+        if is_fence(last) then -- set close attribute only if the last element is fence
+          close = last:get_text():gsub("%s*", "")
+          last:remove_node() -- remove <mo>
+        end
+        break -- break looping over elements once we find last element
+      end 
+    end
+    -- convert parent <mrow> to <mfenced>
+    parent._name = "mfenced"
+    parent._attr = {open = open, close = close}
+  end
+end
+
 return function(dom)
   dom:traverse_elements(function(el)
+    if settings.output_format ~= "odt" then
+      -- LibreOffice needs <mfenced>, but Firefox doesn't
+      fix_mfenced(el)
+    else
+      fix_mo_to_mfenced(el)
+    end
     fix_token_elements(el)
     fix_nested_mstyle(el)
   end)

Added: trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-build_changed.lua
===================================================================
--- trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-build_changed.lua	                        (rev 0)
+++ trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-build_changed.lua	2021-03-20 22:20:13 UTC (rev 58563)
@@ -0,0 +1,68 @@
+-- this make4ht build file tries to recompile modified blog article sources
+--
+
+-- disable any compilation
+Make.build_seq = {}
+Make:add("tex4ht", "")
+Make:add("t4ht", "")
+
+local log = logging.new "compile newest"
+
+
+
+-- construct the name of the generated HTML file from the .published file
+local function get_generated_html_name(published_file, directory, file_pattern)
+  local f = io.open(directory .. "/" .. published_file, "r")
+  local content = f:read("*all")
+  f:close()
+  local timestamp = tonumber(content)
+  local basename = mkutils.remove_extension(published_file)
+  local tex_file = basename .. ".tex"
+  -- expand fillename in the file_pattern
+  local expanded = file_pattern % {input = basename}
+  -- expand date in the file_pattern 
+  expanded = os.date(expanded, timestamp)
+  log:status("found source files :", directory, basename, expanded)
+  return {directory = directory, tex_file = tex_file, generated = expanded .. ".html"}
+end
+
+-- process subdirectories of the basedir and look for the filename.published files
+local function find_published(basedir, file_pattern)
+  local published = {}
+  for f in lfs.dir(basedir) do
+    local fullname = basedir .. "/" .. f
+    local attributes = lfs.attributes(fullname)
+    -- process directories, but ignore . and ..
+    if attributes.mode == "directory" and f ~= "." and f~= ".." then
+      for name in lfs.dir(fullname) do
+        if name:match("published$") then
+          published[#published + 1]  =  get_generated_html_name(name, fullname, file_pattern)
+        end
+
+      end
+    end
+  end
+  return published
+end
+
+-- find tex files that were modified later than the generated HTML files
+local function find_changed(published, site_root)
+  local keep = {}
+  for _, entry in ipairs(published) do
+    local source_attributes = lfs.attributes(entry.directory .. "/" .. entry.tex_file)
+    local dest_attributes = lfs.attributes(site_root .. "/" .. entry.generated)
+    -- 
+    print(entry.tex_file, entry.generated,  source_attributes.change < dest_attributes.change)
+  end
+end
+
+
+Make:add("rebuild", function(par)
+  local config = get_filter_settings "staticsite"
+  -- how the generated HTML files are named
+  local file_pattern = config.file_pattern or "%Y-%m-%d-${input}"
+  local published = find_published(par.tex_dir, file_pattern)
+  local changed = find_changed(published, config.site_root)
+end)
+
+Make:rebuild{tex_dir = "posts"}


Property changes on: trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-build_changed.lua
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-mathjaxnode.lua
===================================================================
--- trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-mathjaxnode.lua	2021-03-20 22:19:52 UTC (rev 58562)
+++ trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-mathjaxnode.lua	2021-03-20 22:20:13 UTC (rev 58563)
@@ -7,8 +7,14 @@
   return true
 end
 
+function M.prepare_parameters(params)
+  params.tex4ht_sty_par = params.tex4ht_sty_par  .. ",mathml"
+  return params
+
+end
 function M.modify_build(make)
   local mathjax = filter { "mathjaxnode"}
+  -- this extension needs mathml enabled
   make:match("html?$",mathjax)
   return make
 end

Added: trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-mjcli.lua
===================================================================
--- trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-mjcli.lua	                        (rev 0)
+++ trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-mjcli.lua	2021-03-20 22:20:13 UTC (rev 58563)
@@ -0,0 +1,36 @@
+local M = {}
+
+
+local filter = require "make4ht-filter"
+function M.test(format)
+  -- this extension works only for formats based on HTML, as it produces
+  -- custom HTML tags that would be ilegal in XML 
+  if not format:match("html5?$") then return false end
+  return true
+end
+
+-- 
+local detected_latex = false
+function M.prepare_parameters(params)
+  -- mjcli supports both MathML and LaTeX math input
+  -- LaTeX math is keep if user uses "mathjax" option for make4ht
+  -- "mathjax" option used in \Preamble in the .cfg file doesn't work 
+  if params.tex4ht_sty_par:match("mathjax") then
+    detected_latex = true
+  else
+    params.tex4ht_sty_par = params.tex4ht_sty_par  .. ",mathml"
+  end
+  return params
+
+end
+function M.modify_build(make)
+  local mathjax = filter { "mjcli"}
+  local params = {}
+  if detected_latex then
+    params.latex = true
+  end
+  make:match("html?$",mathjax, params)
+  return make
+end
+
+return M


Property changes on: trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-mjcli.lua
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-staticsite.lua
===================================================================
--- trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-staticsite.lua	2021-03-20 22:19:52 UTC (rev 58562)
+++ trunk/Master/texmf-dist/scripts/make4ht/extensions/make4ht-ext-staticsite.lua	2021-03-20 22:20:13 UTC (rev 58563)
@@ -125,8 +125,7 @@
     --   match.params.outdir = outdir
     --   print(match.pattern, match.params.outdir)
     -- end
-    -- make the YAML header only for the main HTML file
-    make:match(mainfile .. ".html", process)
+    make:match("html?$", process)
     make:match(".*", copy_files, {slug=slug})
   end)
 

Added: trunk/Master/texmf-dist/scripts/make4ht/filters/make4ht-mjcli.lua
===================================================================
--- trunk/Master/texmf-dist/scripts/make4ht/filters/make4ht-mjcli.lua	                        (rev 0)
+++ trunk/Master/texmf-dist/scripts/make4ht/filters/make4ht-mjcli.lua	2021-03-20 22:20:13 UTC (rev 58563)
@@ -0,0 +1,183 @@
+local mkutils = require "mkutils"
+local log = logging.new("mjcli")
+-- other possible value is page2svg
+local mathnodepath = "mjcli"
+-- options for MathJax command
+local options = ""
+-- math fonts position
+-- don't alter fonts if not set
+local fontdir = nil
+-- if we copy fonts 
+local fontdest = nil
+local fontformat = "woff"
+local cssfilename =  "mathjax-chtml.css"
+
+local function compile(filename, options)
+  -- local tmpfile = os.tmpname()
+  log:info("Compile using MathJax")
+  local command =  mathnodepath .. " ".. options .. " " .. filename
+  log:info(command)
+  local commandhandle, msg = io.popen(command,"r") 
+  if not commandhandle then return nil, msg end
+  local content = commandhandle:read("*all")
+  commandhandle:close()
+  return content
+end
+
+local saved_styles = {}
+local used_styles = {}
+
+local function make_css(saved_styles)
+  -- this buffer contains lines of the new CSS file
+  local buffer = {}
+  -- process table with saved CSS rules and make CSS file again
+  for _, rule in ipairs(saved_styles) do
+    buffer[#buffer+1] = rule.selector .. " {"
+    -- save CSS properties
+    for _, line in ipairs(rule.content) do
+      buffer[#buffer+1] = line
+    end
+    buffer[#buffer+1] = "}"
+    buffer[#buffer+1] = "" -- add blank line
+  end
+  return table.concat(buffer, "\n")
+end
+
+-- MathJax generated CSS contains reusable declarations but also
+-- declarations of fixes for elements in the current file
+-- the idea is to reuse the common declarations and to save each
+-- fix. 
+local function parse_css(css, file_class)
+  local status = "init"
+  local current = {}
+  local current_selector
+  for line in css:gmatch("([^\n]+)") do
+    if status == "init" then
+      local selector, rest = line:match("%s*(.-)%s*{(.-)")
+      if selector then 
+        current_selector = selector
+        -- if the current selector contains class, we must prepend the current file class
+        -- as the joined CSS file could contain multiple rules with the same class otherwise
+        if current_selector:match("%.") then current_selector = "." .. file_class .. " " .. current_selector end
+        status = "record"
+      end
+    elseif status == "record" then
+      if line:match("%}") then
+        status = "init"
+        if not used_styles[current_selector] then
+          table.insert(saved_styles, {selector = current_selector, content = current})
+        end
+        current = {}
+        used_styles[current_selector] = true
+      else
+        table.insert(current, line)
+      end
+    end
+
+  end
+  -- save combined CSS for all files
+  return make_css(saved_styles)
+end
+
+local function make_file_class(name)
+  -- clean the filename to make it safe as a class name
+  return name:gsub("[%s%p%s]", "_")
+end
+
+-- set class attribute in the body element of the current file
+-- this is necessary for the updated CSS file
+local function set_body_class(content, file_class)
+  content = content:gsub("<body(.-)>", function(body)
+    if body:match("class") then
+      -- add new class if there already is one
+      body = body:gsub("(class.-[\"'])", "%1" .. file_class .. " ")
+    else
+      body = body .. ' class="' .. file_class .. '"'
+    end
+    return "<body" ..body ..">"
+  end)
+  return content
+end
+
+
+-- save the css code from the html page generated by MathJax
+local function extract_css(contents, currentfilename)
+  local css
+  local filename = cssfilename
+  local file_class = make_file_class(currentfilename)
+  -- detect all <style> tags
+  contents = contents:gsub('<style [^>]+>(.-)</style>', function(style)
+    -- replace only the style for mathjax
+    if style:match "mjx%-container" then
+      css = parse_css(style, file_class)
+      return '<link rel="stylesheet" type="text/css" href="'..filename ..'" />'
+    end
+  end)
+  contents = set_body_class(contents, file_class)
+  return filename, contents, css
+end
+
+-- Update the paths to fonts to use the local versions
+local function use_fonts(css)
+  local family_pattern = "font%-family:%s*(.-);.-%/([^%/]+)%.".. fontformat
+  local family_build = "@font-face {font-family: %s; src: url('%s/%s.%s') format('%s')}"
+  local fontdir = fontdir:gsub("/$","")
+  css = css:gsub("(@font%-face%s*{.-})", function(face)
+    if not face:match("url%(") then return face end
+    -- print(face)
+    local family, filename = face:match(family_pattern)
+    log:info("use font: ",family, filename)
+    local newfile = string.format("%s/%s.%s", fontdir, filename, fontformat)
+    Make:add_file(newfile)
+    return family_build:format(family, fontdir, filename, fontformat, fontformat)
+    -- return face
+  end)
+  return css
+end
+
+
+local function save_css(filename, css)
+  local f = io.open(filename, "w")
+  f:write(css)
+  f:close()
+end
+
+return function(text, arguments)
+  -- if arguments.prg then mathnodepath = arguments.prg end
+  local extoptions = mkutils.get_filter_settings "mjcli" or {}
+  local arguments = arguments or {}
+  mathnodepath = arguments.prg or extoptions.prg or  mathnodepath
+  local options      = arguments.options or extoptions.options or options
+  fontdir      = arguments.fontdir or extoptions.fontdir or fontdir
+  -- the following ne is unused ATM
+  fontdest     = arguments.fontdest or extoptions.fontdest or fontdest
+  fontformat   = arguments.fontformat or extoptions.fontformat or fontformat
+  cssfilename  = arguments.cssfilename or extoptions.cssfilename or arguments.input .. "-mathjax.css"
+  local is_latex = arguments.latex or extoptions.latex or false
+  local filename = arguments.filename
+
+  -- modify options to use LaTeX syntax by MathJax
+  if is_latex then
+    options = options .. " -l"
+  end
+
+  -- compile current html file with mathjax
+  local newtext, msg = compile(filename, options)
+  if not newtext then 
+    log:error(msg)
+    return text
+  end
+  -- save CSS to a standalone file
+  local cssfile, newtext,  css = extract_css(newtext, filename)
+  -- use local font files if fontdir is present
+  if fontdir then
+    css = use_fonts(css)
+  end
+  if css then
+    save_css(cssfile, css)
+    Make:add_file(cssfile)
+    -- print(css)
+    log:info("CSS file: " .. cssfile)
+  end
+  return newtext
+end


Property changes on: trunk/Master/texmf-dist/scripts/make4ht/filters/make4ht-mjcli.lua
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/scripts/make4ht/formats/make4ht-odt.lua
===================================================================
--- trunk/Master/texmf-dist/scripts/make4ht/formats/make4ht-odt.lua	2021-03-20 22:19:52 UTC (rev 58562)
+++ trunk/Master/texmf-dist/scripts/make4ht/formats/make4ht-odt.lua	2021-03-20 22:20:13 UTC (rev 58563)
@@ -128,6 +128,13 @@
   end
 end
 
+-- remove <?xtpipes XML instructions, because they cause issues in some ODT processing
+-- applications
+local function remove_xtpipes(text)
+  -- remove <?x
+  return text:gsub("%<%?xtpipes.-%?%>", "")
+end
+
 function M.modify_build(make)
   local executed = false
   -- execute xtpipes from the build file, instead of t4ht. this fixes issues with wrong paths
@@ -142,7 +149,7 @@
   -- execute it before xtpipes, because we don't want xtpipes to mess with t4htlink elements
   move_matches(make)
   -- convert XML entities for Unicode characters produced by Xtpipes to characters
-  local fixentities = filter {"entities-to-unicode"}
+  local fixentities = filter {"entities-to-unicode", remove_xtpipes}
   make:match("4oo", fixentities)
   make:match("4om", fixentities)
 

Modified: trunk/Master/texmf-dist/scripts/make4ht/make4ht
===================================================================
--- trunk/Master/texmf-dist/scripts/make4ht/make4ht	2021-03-20 22:19:52 UTC (rev 58562)
+++ trunk/Master/texmf-dist/scripts/make4ht/make4ht	2021-03-20 22:20:13 UTC (rev 58563)
@@ -29,7 +29,7 @@
 
 -- set version number. the template should be replaced by the
 -- actual version number by the build script
-local version = "v0.3f"
+local version = "v0.3g"
 mkparams.version_number = version
 
 local args = mkparams.get_args()
@@ -123,4 +123,5 @@
 make:run()
 
 log:status("Conversion finished")
+logging.exit_status()
 

Modified: trunk/Master/texmf-dist/scripts/make4ht/make4ht-logging.lua
===================================================================
--- trunk/Master/texmf-dist/scripts/make4ht/make4ht-logging.lua	2021-03-20 22:19:52 UTC (rev 58562)
+++ trunk/Master/texmf-dist/scripts/make4ht/make4ht-logging.lua	2021-03-20 22:20:13 UTC (rev 58563)
@@ -6,6 +6,7 @@
 -- level of bugs that should be shown
 local show_level = 1
 local max_width = 0
+local max_status = 0
 
 logging.use_colors = true
 
@@ -14,8 +15,8 @@
   {name = "info", color = 32},
   {name = "status", color = 37},
   {name = "warning", color = 33}, 
-  {name = "error", color = 31},
-  {name = "fatal", color = 35}
+  {name = "error", color = 31, status = 1},
+  {name = "fatal", color = 35, status = 2}
 }
 
 -- prepare table with mapping between mode names and corresponding levels
@@ -62,7 +63,10 @@
   for _, mode in ipairs(logging.modes) do
     local name = mode.name
     local color = mode.color
+    local status = mode.status or 0
     obj[name] = function(self, ...)
+      -- set make4ht exit status
+      max_status = math.max(status, max_status)
       -- max width is saved in logging.prepare_levels
       if mode.level >= show_level then
         -- support variable number of parameters
@@ -82,7 +86,12 @@
 
 end
 
+-- exit make4ht with maximal error status
+function logging.exit_status()
+  os.exit(max_status)
+end
 
+
 -- prepare default levels
 logging.prepare_levels()
 

Added: trunk/Master/texmf-dist/scripts/make4ht/make4ht-odtfilter.lua
===================================================================
--- trunk/Master/texmf-dist/scripts/make4ht/make4ht-odtfilter.lua	                        (rev 0)
+++ trunk/Master/texmf-dist/scripts/make4ht/make4ht-odtfilter.lua	2021-03-20 22:20:13 UTC (rev 58563)
@@ -0,0 +1,33 @@
+local mkutils = require "mkutils"
+local zip = require "zip"
+
+
+-- use function to change contents of the ODT file
+local function update_odt(odtfilename, file_path, fn)
+  -- get name of the odt file
+  local odtname = mkutils.remove_extension(odtfilename) .. ".odt"
+  -- open and read contents of the requested file inside ODT file
+  local odtfile = zip.open(odtname)
+  local local_file = odtfile:open(file_path)
+  local content = local_file:read("*all")
+  local_file:close()
+  odtfile:close()
+  -- update the content using user function
+  content = fn(content)
+  -- write the updated file
+  local local_file_file  = io.open(file_path,"w")
+  local_file_file:write(content)
+  local_file_file:close()
+  os.execute("zip " .. odtname .. " " .. file_path)
+  os.remove(file_path)
+end
+
+Make:match("tmp$", function(name, par)
+  update_odt(name, "content.xml", function(content)
+    return content:gsub("%&%#x([A-Fa-f0-9]+);", function(entity)
+      -- convert hexadecimal entity to Unicode
+      print(entity,utfchar(tonumber(entity, 16)))
+      return utfchar(tonumber(entity, 16))
+    end)
+  end)
+end)


Property changes on: trunk/Master/texmf-dist/scripts/make4ht/make4ht-odtfilter.lua
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Modified: trunk/Master/texmf-dist/scripts/make4ht/mkutils.lua
===================================================================
--- trunk/Master/texmf-dist/scripts/make4ht/mkutils.lua	2021-03-20 22:19:52 UTC (rev 58562)
+++ trunk/Master/texmf-dist/scripts/make4ht/mkutils.lua	2021-03-20 22:20:13 UTC (rev 58563)
@@ -343,7 +343,7 @@
 local htlatex = require "make4ht-htlatex"
 env.Make:add("htlatex", htlatex.htlatex
 ,{correct_exit=0})
-env.Make:add("htttex", htlatex.httex, {
+env.Make:add("httex", htlatex.httex, {
   htlatex = "etex",
   correct_exit=0
 })
@@ -498,7 +498,7 @@
   local extension_library = "make4ht.extensions.make4ht-ext-" .. name
   local is_extension_file = find_lua_file(extension_library)
   -- don't try to load the extension if it doesn't exist
-  if not is_extension_file then return nil end
+  if not is_extension_file then return nil, "cannot fint extension " .. name  end
   local extension = require("make4ht.extensions.make4ht-ext-".. name)
   -- extensions can test if the current output format is supported
   local test = extension.test
@@ -507,7 +507,7 @@
       return extension
     end
     -- if the test fail return nil
-    return nil
+    return nil, "extension " .. name .. " is not supported in the " .. format .. " format"
   end
   -- if the extension doesn't provide the test function, we will assume that
   -- it supports every output format
@@ -538,12 +538,13 @@
     -- the extension can be inserted into the extension_sequence, but disabled
     -- later.
     if module_names[name] == true then
-      local extension = load_extension(name,format)
+      local extension, msg= load_extension(name,format)
       if extension then
         log:info("Load extension", name)
         table.insert(extension_table, extension)
       else
         log:warning("Cannot load extension: ".. name)
+        log:warning(msg)
       end
     end
   end



More information about the tex-live-commits mailing list.