From 8c2e2435f9f9d4ae92ec28a017d26e1c4a834393 Mon Sep 17 00:00:00 2001
From: TG <tarik.graba@telecom-paristech.fr>
Date: Thu, 7 Feb 2019 19:01:58 +0100
Subject: [PATCH] Asciidoctor writer sets the stem attribute if it contains
 latexmath

---
 data/templates/default.asciidoctor  | 3 +++
 src/Text/Pandoc/Writers/AsciiDoc.hs | 8 +++++++-
 test/writer.asciidoctor             | 1 +
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/data/templates/default.asciidoctor b/data/templates/default.asciidoctor
index 7668a8325..2616b05d6 100644
--- a/data/templates/default.asciidoctor
+++ b/data/templates/default.asciidoctor
@@ -15,6 +15,9 @@ $endif$
 $if(toc)$
 :toc:
 $endif$
+$if(math)$
+:stem: latexmath
+$endif$
 
 $endif$
 $if(abstract)$
diff --git a/src/Text/Pandoc/Writers/AsciiDoc.hs b/src/Text/Pandoc/Writers/AsciiDoc.hs
index a33fd8916..c67178b7a 100644
--- a/src/Text/Pandoc/Writers/AsciiDoc.hs
+++ b/src/Text/Pandoc/Writers/AsciiDoc.hs
@@ -62,6 +62,7 @@ data WriterState = WriterState { defListMarker    :: String
                                , intraword        :: Bool
                                , autoIds          :: Set.Set String
                                , asciidoctorVariant  :: Bool
+                               , hasMath             :: Bool
                                }
 
 defaultWriterState :: WriterState
@@ -71,6 +72,7 @@ defaultWriterState = WriterState { defListMarker      = "::"
                                  , intraword          = False
                                  , autoIds            = Set.empty
                                  , asciidoctorVariant = False
+                                 , hasMath            = False
                                  }
 
 -- | Convert Pandoc to AsciiDoc.
@@ -101,11 +103,13 @@ pandocToAsciiDoc opts (Pandoc meta blocks) = do
               meta
   body <- vcat <$> mapM (elementToAsciiDoc 1 opts) (hierarchicalize blocks)
   let main = render colwidth body
+  st <- get
   let context  = defField "body" main
                $ defField "toc"
                   (writerTableOfContents opts &&
                    isJust (writerTemplate opts))
-               $defField "titleblock" titleblock metadata
+               $ defField "math" (hasMath st)
+               $ defField "titleblock" titleblock metadata
   case writerTemplate opts of
        Nothing  -> return main
        Just tpl -> renderTemplate' tpl context
@@ -422,12 +426,14 @@ inlineToAsciiDoc _ (Code _ str) = return $
 inlineToAsciiDoc _ (Str str) = return $ text $ escapeString str
 inlineToAsciiDoc _ (Math InlineMath str) = do
   isAsciidoctor <- gets asciidoctorVariant
+  modify $ \st -> st{ hasMath = True }
   let content = if isAsciidoctor
                 then text str
                 else "$" <> text str <> "$"
   return $ "latexmath:[" <> content <> "]"
 inlineToAsciiDoc _ (Math DisplayMath str) = do
   isAsciidoctor <- gets asciidoctorVariant
+  modify $ \st -> st{ hasMath = True }
   let content = if isAsciidoctor
                 then text str
                 else "\\[" <> text str <> "\\]"
diff --git a/test/writer.asciidoctor b/test/writer.asciidoctor
index 2bd449fea..eee335b33 100644
--- a/test/writer.asciidoctor
+++ b/test/writer.asciidoctor
@@ -1,6 +1,7 @@
 = Pandoc Test Suite
 John MacFarlane; Anonymous
 July 17, 2006
+:stem: latexmath
 
 This is a set of tests for pandoc. Most of them are adapted from John Gruber’s
 markdown test suite.