From b7356d3ddf788d83b41b1100d718087bd83a7506 Mon Sep 17 00:00:00 2001
From: John MacFarlane <jgm@berkeley.edu>
Date: Wed, 9 May 2018 11:29:20 -0700
Subject: [PATCH] Restored and undeprecated gladtex for HTML math.

- Added `GladTeX` constructor to `Text.Pandoc.Options.HTMLMathMethod`
  [API change, reverts removal in v2.2]
- Restored and undeprecated `--gladtex` option, removed in v2.2.

Closes #4607.
---
 MANUAL.txt                      | 12 +++++++++
 man/pandoc.1                    | 46 ++++++++++++++++++++++++++++-----
 src/Text/Pandoc/App.hs          |  6 +++++
 src/Text/Pandoc/Options.hs      |  1 +
 src/Text/Pandoc/Writers/HTML.hs |  9 ++++++-
 5 files changed, 67 insertions(+), 7 deletions(-)

diff --git a/MANUAL.txt b/MANUAL.txt
index 42b658af9..7a9871d8f 100644
--- a/MANUAL.txt
+++ b/MANUAL.txt
@@ -1217,9 +1217,21 @@ of the following options.
     not specified, a link to the KaTeX CDN will be inserted. Note that this
     option does not imply `--katex`.
 
+`--gladtex`
+
+:   Enclose TeX math in `<eq>` tags in HTML output.  The resulting HTML
+    can then be processed by [GladTeX] to produce images of the typeset
+    formulas and an HTML file with links to these images.
+    So, the procedure is:
+
+        pandoc -s --gladtex input.md -o myfile.htex
+        gladtex -d myfile-images myfile.htex
+        # produces myfile.html and images in myfile-images
+
 [MathML]: http://www.w3.org/Math/
 [MathJax]: https://www.mathjax.org
 [KaTeX]: https://github.com/Khan/KaTeX
+[GladTeX]: http://humenda.github.io/GladTeX/
 
 Options for wrapper scripts
 ---------------------------
diff --git a/man/pandoc.1 b/man/pandoc.1
index ed9fdb009..5c560f11b 100644
--- a/man/pandoc.1
+++ b/man/pandoc.1
@@ -647,8 +647,7 @@ a specified full or relative path (executable or non\-executable)
 .B \f[C]\-M\f[] \f[I]KEY\f[][\f[C]=\f[]\f[I]VAL\f[]], \f[C]\-\-metadata=\f[]\f[I]KEY\f[][\f[C]:\f[]\f[I]VAL\f[]]
 Set the metadata field \f[I]KEY\f[] to the value \f[I]VAL\f[].
 A value specified on the command line overrides a value specified in the
-document using [YAML metadata
-blocks][Extension:\f[C]yaml_metadata_block\f[]].
+document using YAML metadata blocks.
 Values will be parsed as YAML boolean or string values.
 If no value is specified, the value will be treated as Boolean true.
 Like \f[C]\-\-variable\f[], \f[C]\-\-metadata\f[] causes template
@@ -727,6 +726,8 @@ Produce output with an appropriate header and footer (e.g.
 a standalone HTML, LaTeX, TEI, or RTF file, not a fragment).
 This option is set automatically for \f[C]pdf\f[], \f[C]epub\f[],
 \f[C]epub3\f[], \f[C]fb2\f[], \f[C]docx\f[], and \f[C]odt\f[] output.
+For \f[C]native\f[] output, this option causes metadata to be included;
+otherwise, metadata is suppressed.
 .RS
 .RE
 .TP
@@ -1413,6 +1414,22 @@ inserted.
 Note that this option does not imply \f[C]\-\-katex\f[].
 .RS
 .RE
+.TP
+.B \f[C]\-\-gladtex\f[]
+Enclose TeX math in \f[C]<eq>\f[] tags in HTML output.
+The resulting HTML can then be processed by GladTeX to produce images of
+the typeset formulas and an HTML file with links to these images.
+So, the procedure is:
+.RS
+.IP
+.nf
+\f[C]
+pandoc\ \-s\ \-\-gladtex\ input.md\ \-o\ myfile.htex
+gladtex\ \-d\ myfile\-images\ myfile.htex
+#\ produces\ myfile.html\ and\ images\ in\ myfile\-images
+\f[]
+.fi
+.RE
 .SS Options for wrapper scripts
 .TP
 .B \f[C]\-\-dump\-args\f[]
@@ -1489,9 +1506,8 @@ arbitrary information at any point in the file.
 They may be set at the command line using the \f[C]\-V/\-\-variable\f[]
 option.
 If a variable is not set, pandoc will look for the key in the
-document\[aq]s metadata \[en] which can be set using either [YAML
-metadata blocks][Extension:\f[C]yaml_metadata_block\f[]] or with the
-\f[C]\-\-metadata\f[] option.
+document\[aq]s metadata \[en] which can be set using either YAML
+metadata blocks or with the \f[C]\-\-metadata\f[] option.
 .SS Variables set by pandoc
 .PP
 Some variables are set automatically by pandoc.
@@ -2081,7 +2097,25 @@ $endif$
 .fi
 .PP
 This will include \f[C]X\f[] in the template if \f[C]variable\f[] has a
-non\-null value; otherwise it will include \f[C]Y\f[].
+truthy value; otherwise it will include \f[C]Y\f[].
+Here a truthy value is any of the following:
+.IP \[bu] 2
+a string that is not entirely white space,
+.IP \[bu] 2
+a non\-empty array where the first value is truthy,
+.IP \[bu] 2
+any number (including zero),
+.IP \[bu] 2
+any object,
+.IP \[bu] 2
+the boolean \f[C]true\f[] (to specify the boolean \f[C]true\f[] value
+using YAML metadata or the \f[C]\-\-metadata\f[] flag, use \f[C]y\f[],
+\f[C]Y\f[], \f[C]yes\f[], \f[C]Yes\f[], \f[C]YES\f[], \f[C]true\f[],
+\f[C]True\f[], \f[C]TRUE\f[], \f[C]on\f[], \f[C]On\f[], or \f[C]ON\f[];
+with the \f[C]\-\-variable\f[] flag, simply omit a value for the
+variable, e.g.
+\f[C]\-\-variable\ draft\f[]).
+.PP
 \f[C]X\f[] and \f[C]Y\f[] are placeholders for any valid template text,
 and may include interpolated variables or other conditionals.
 The \f[C]$else$\f[] section may be omitted.
diff --git a/src/Text/Pandoc/App.hs b/src/Text/Pandoc/App.hs
index 920462d48..a59fd9bbe 100644
--- a/src/Text/Pandoc/App.hs
+++ b/src/Text/Pandoc/App.hs
@@ -1403,6 +1403,12 @@ options =
                   "URL")
                   "" -- Use KaTeX for HTML Math
 
+    , Option "" ["gladtex"]
+                 (NoArg
+                  (\opt ->
+                      return opt { optHTMLMathMethod = GladTeX }))
+                 "" -- "Use gladtex for HTML math"
+
     , Option "" ["abbreviations"]
                 (ReqArg
                  (\arg opt -> return opt { optAbbreviations = Just arg })
diff --git a/src/Text/Pandoc/Options.hs b/src/Text/Pandoc/Options.hs
index 4797a3094..e5ca1764c 100644
--- a/src/Text/Pandoc/Options.hs
+++ b/src/Text/Pandoc/Options.hs
@@ -107,6 +107,7 @@ data EPUBVersion = EPUB2 | EPUB3 deriving (Eq, Show, Read, Data, Typeable, Gener
 
 data HTMLMathMethod = PlainMath
                     | WebTeX String               -- url of TeX->image script.
+                    | GladTeX
                     | MathML
                     | MathJax String              -- url of MathJax.js
                     | KaTeX String                -- url of KaTeX files
diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs
index 535071ae2..a09ad2fda 100644
--- a/src/Text/Pandoc/Writers/HTML.hs
+++ b/src/Text/Pandoc/Writers/HTML.hs
@@ -58,7 +58,7 @@ import qualified Data.Text.Lazy as TL
 import Network.HTTP (urlEncode)
 import Network.URI (URI (..), parseURIReference, unEscapeString)
 import Numeric (showHex)
-import Text.Blaze.Internal (customLeaf, MarkupM(Empty))
+import Text.Blaze.Internal (customLeaf, customParent, MarkupM(Empty))
 #if MIN_VERSION_blaze_markup(0,6,3)
 #else
 import Text.Blaze.Internal (preEscapedString, preEscapedText)
@@ -1029,6 +1029,13 @@ inlineToHtml opts inline = do
               return $ case t of
                         InlineMath  -> m
                         DisplayMath -> brtag >> m >> brtag
+           GladTeX ->
+              return $
+                customParent (textTag "eq") !
+                  customAttribute "env"
+                    (toValue $ if t == InlineMath
+                                  then ("math" :: Text)
+                                  else "displaymath") $ strToHtml str
            MathML -> do
               let conf = useShortEmptyTags (const False)
                            defaultConfigPP