From 1884ee60838ffeac090cafc9cf7fe2e44ad33636 Mon Sep 17 00:00:00 2001
From: Alexander Krotov <ilabdsf@gmail.com>
Date: Wed, 7 Mar 2018 20:10:19 +0300
Subject: [PATCH] Muse writer: replace smallcaps with emphasis before
 normalization

---
 src/Text/Pandoc/Writers/Muse.hs | 9 +++++++--
 test/Tests/Writers/Muse.hs      | 1 +
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/Text/Pandoc/Writers/Muse.hs b/src/Text/Pandoc/Writers/Muse.hs
index 28cfb0ef4..daffa2d07 100644
--- a/src/Text/Pandoc/Writers/Muse.hs
+++ b/src/Text/Pandoc/Writers/Muse.hs
@@ -305,6 +305,10 @@ preprocessInlineList (Cite _  lst:xs) = (lst ++) <$> preprocessInlineList xs
 preprocessInlineList (x:xs) = (x:) <$> preprocessInlineList xs
 preprocessInlineList [] = return []
 
+replaceSmallCaps :: Inline -> Inline
+replaceSmallCaps (SmallCaps lst) = Emph lst
+replaceSmallCaps x = x
+
 normalizeInlineList :: [Inline] -> [Inline]
 normalizeInlineList (Str "" : xs)
   = normalizeInlineList xs
@@ -344,7 +348,7 @@ inlineListToMuse :: PandocMonad m
                  => [Inline]
                  -> StateT WriterState m Doc
 inlineListToMuse lst = do
-  lst' <- normalizeInlineList <$> preprocessInlineList lst
+  lst' <- normalizeInlineList <$> preprocessInlineList (map replaceSmallCaps lst)
   if null lst'
     then pure "<verbatim></verbatim>"
     else hcat <$> mapM inlineToMuse (fixNotes lst')
@@ -369,7 +373,8 @@ inlineToMuse (Superscript lst) = do
 inlineToMuse (Subscript lst) = do
   contents <- inlineListToMuse lst
   return $ "<sub>" <> contents <> "</sub>"
-inlineToMuse (SmallCaps lst) = inlineToMuse (Emph lst)
+inlineToMuse (SmallCaps {}) =
+  fail "SmallCaps should be expanded before normalization"
 inlineToMuse (Quoted SingleQuote lst) = do
   contents <- inlineListToMuse lst
   return $ "‘" <> contents <> "’"
diff --git a/test/Tests/Writers/Muse.hs b/test/Tests/Writers/Muse.hs
index bbcb3dc61..509c20401 100644
--- a/test/Tests/Writers/Muse.hs
+++ b/test/Tests/Writers/Muse.hs
@@ -328,6 +328,7 @@ tests = [ testGroup "block elements"
           , "superscript" =: superscript (text "foo") =?> "<sup>foo</sup>"
           , "subscript" =: subscript (text "foo") =?> "<sub>foo</sub>"
           , "smallcaps" =: smallcaps (text "foo") =?> "<em>foo</em>"
+          , "smallcaps near emphasis" =: emph (str "foo") <> smallcaps (str "bar") =?> "<em>foobar</em>"
           , "single quoted" =: singleQuoted (text "foo") =?> "‘foo’"
           , "double quoted" =: doubleQuoted (text "foo") =?> "“foo”"
           -- Cite is trivial