git.iko.soy/typeable/pandoc
on master help sign in
Support new Underline element in readers and writers (#6277)
9c2b659Vaibhav Sagar
data/pandoc.lua+11−1
@@ -829,13 +829,23 @@ M.Subscript = M.Inline:create_constructor(
829--- Creates a Superscript inline element
829--- Creates a Superscript inline element
830-- @function Superscript
830-- @function Superscript
831-- @tparam {Inline,..} content inline content
831-- @tparam {Inline,..} content inline content
832−-- @treturn Inline strong element
832+-- @treturn Inline superscript element
833M.Superscript = M.Inline:create_constructor(
833M.Superscript = M.Inline:create_constructor(
834 "Superscript",
834 "Superscript",
835 function(content) return {c = ensureInlineList(content)} end,
835 function(content) return {c = ensureInlineList(content)} end,
836 "content"
836 "content"
837)
837)
838
838
839+--- Creates an Underline inline element
840+-- @function Underline
841+-- @tparam {Inline,..} content inline content
842+-- @treturn Inline underline element
843+M.Underline = M.Inline:create_constructor(
844+ "Underline",
845+ function(content) return {c = ensureInlineList(content)} end,
846+ "content"
847+)
848+
839
849
840------------------------------------------------------------------------
850------------------------------------------------------------------------
841-- Element components
851-- Element components
src/Text/Pandoc/Lua/Marshaling/AST.hs+2
@@ -303,6 +303,7 @@ pushInline = \case
303 Cite citations lst -> pushViaConstructor "Cite" lst citations
303 Cite citations lst -> pushViaConstructor "Cite" lst citations
304 Code attr lst -> pushViaConstructor "Code" lst (LuaAttr attr)
304 Code attr lst -> pushViaConstructor "Code" lst (LuaAttr attr)
305 Emph inlns -> pushViaConstructor "Emph" inlns
305 Emph inlns -> pushViaConstructor "Emph" inlns
306+ Underline inlns -> pushViaConstructor "Underline" inlns
306 Image attr alt (src,tit) -> pushViaConstructor "Image" alt src tit (LuaAttr attr)
307 Image attr alt (src,tit) -> pushViaConstructor "Image" alt src tit (LuaAttr attr)
307 LineBreak -> pushViaConstructor "LineBreak"
308 LineBreak -> pushViaConstructor "LineBreak"
308 Link attr lst (src,tit) -> pushViaConstructor "Link" lst src tit (LuaAttr attr)
309 Link attr lst (src,tit) -> pushViaConstructor "Link" lst src tit (LuaAttr attr)
@@ -328,6 +329,7 @@ peekInline idx = defineHowTo "get Inline value" $ do
328 "Cite" -> uncurry Cite <$> elementContent
329 "Cite" -> uncurry Cite <$> elementContent
329 "Code" -> withAttr Code <$> elementContent
330 "Code" -> withAttr Code <$> elementContent
330 "Emph" -> Emph <$> elementContent
331 "Emph" -> Emph <$> elementContent
332+ "Underline" -> Underline <$> elementContent
331 "Image" -> (\(LuaAttr attr, lst, tgt) -> Image attr lst tgt)
333 "Image" -> (\(LuaAttr attr, lst, tgt) -> Image attr lst tgt)
332 <$> elementContent
334 <$> elementContent
333 "Link" -> (\(LuaAttr attr, lst, tgt) -> Link attr lst tgt)
335 "Link" -> (\(LuaAttr attr, lst, tgt) -> Link attr lst tgt)
src/Text/Pandoc/Readers/Docx.hs+1−1
@@ -299,7 +299,7 @@ runStyleToTransform rPr
299 return $ subscript . transform
299 return $ subscript . transform
300 | Just "single" <- rUnderline rPr = do
300 | Just "single" <- rUnderline rPr = do
301 transform <- runStyleToTransform rPr{rUnderline = Nothing}
301 transform <- runStyleToTransform rPr{rUnderline = Nothing}
302− return $ underlineSpan . transform
302+ return $ Pandoc.underline . transform
303 | otherwise = return id
303 | otherwise = return id
304
304
305runToInlines :: PandocMonad m => Run -> DocxContext m Inlines
305runToInlines :: PandocMonad m => Run -> DocxContext m Inlines
src/Text/Pandoc/Readers/DokuWiki.hs+2−2
@@ -29,7 +29,7 @@ import Text.Pandoc.Definition
29import Text.Pandoc.Error (PandocError (PandocParsecError))
29import Text.Pandoc.Error (PandocError (PandocParsecError))
30import Text.Pandoc.Options
30import Text.Pandoc.Options
31import Text.Pandoc.Parsing hiding (enclosed, nested)
31import Text.Pandoc.Parsing hiding (enclosed, nested)
32−import Text.Pandoc.Shared (crFilter, trim, underlineSpan, stringify, tshow)
32+import Text.Pandoc.Shared (crFilter, trim, stringify, tshow)
33
33
34-- | Read DokuWiki from an input string and return a Pandoc document.
34-- | Read DokuWiki from an input string and return a Pandoc document.
35readDokuWiki :: PandocMonad m
35readDokuWiki :: PandocMonad m
@@ -162,7 +162,7 @@ italic :: PandocMonad m => DWParser m B.Inlines
162italic = try $ B.emph <$> enclosed (string "//") nestedInlines
162italic = try $ B.emph <$> enclosed (string "//") nestedInlines
163
163
164underlined :: PandocMonad m => DWParser m B.Inlines
164underlined :: PandocMonad m => DWParser m B.Inlines
165−underlined = try $ underlineSpan <$> enclosed (string "__") nestedInlines
165+underlined = try $ B.underline <$> enclosed (string "__") nestedInlines
166
166
167nowiki :: PandocMonad m => DWParser m B.Inlines
167nowiki :: PandocMonad m => DWParser m B.Inlines
168nowiki = try $ B.text <$ string "<nowiki>" <*> manyTillChar anyChar (try $ string "</nowiki>")
168nowiki = try $ B.text <$ string "<nowiki>" <*> manyTillChar anyChar (try $ string "</nowiki>")
src/Text/Pandoc/Readers/HTML.hs+2−2
@@ -61,7 +61,7 @@ import Text.Pandoc.Options (
61import Text.Pandoc.Parsing hiding ((<|>))
61import Text.Pandoc.Parsing hiding ((<|>))
62import Text.Pandoc.Shared (addMetaField, blocksToInlines', crFilter, escapeURI,
62import Text.Pandoc.Shared (addMetaField, blocksToInlines', crFilter, escapeURI,
63 extractSpaces, htmlSpanLikeElements, elemText, splitTextBy,
63 extractSpaces, htmlSpanLikeElements, elemText, splitTextBy,
64− onlySimpleTableCells, safeRead, underlineSpan, tshow)
64+ onlySimpleTableCells, safeRead, tshow)
65import Text.Pandoc.Walk
65import Text.Pandoc.Walk
66import Text.Parsec.Error
66import Text.Parsec.Error
67import Text.TeXMath (readMathML, writeTeX)
67import Text.TeXMath (readMathML, writeTeX)
@@ -749,7 +749,7 @@ pStrikeout =
749 return $ B.strikeout contents)
749 return $ B.strikeout contents)
750
750
751pUnderline :: PandocMonad m => TagParser m Inlines
751pUnderline :: PandocMonad m => TagParser m Inlines
752−pUnderline = pInlinesInTags "u" underlineSpan <|> pInlinesInTags "ins" underlineSpan
752+pUnderline = pInlinesInTags "u" B.underline <|> pInlinesInTags "ins" B.underline
753
753
754pLineBreak :: PandocMonad m => TagParser m Inlines
754pLineBreak :: PandocMonad m => TagParser m Inlines
755pLineBreak = do
755pLineBreak = do
src/Text/Pandoc/Readers/JATS.hs+2−2
@@ -26,7 +26,7 @@ import Text.HTML.TagSoup.Entity (lookupEntity)
26import Text.Pandoc.Builder
26import Text.Pandoc.Builder
27import Text.Pandoc.Class.PandocMonad (PandocMonad)
27import Text.Pandoc.Class.PandocMonad (PandocMonad)
28import Text.Pandoc.Options
28import Text.Pandoc.Options
29−import Text.Pandoc.Shared (underlineSpan, crFilter, safeRead)
29+import Text.Pandoc.Shared (crFilter, safeRead)
30import Text.TeXMath (readMathML, writeTeX)
30import Text.TeXMath (readMathML, writeTeX)
31import Text.XML.Light
31import Text.XML.Light
32import qualified Data.Set as S (fromList, member)
32import qualified Data.Set as S (fromList, member)
@@ -456,7 +456,7 @@ parseInline (Elem e) =
456 "strike" -> strikeout <$> innerInlines
456 "strike" -> strikeout <$> innerInlines
457 "sub" -> subscript <$> innerInlines
457 "sub" -> subscript <$> innerInlines
458 "sup" -> superscript <$> innerInlines
458 "sup" -> superscript <$> innerInlines
459− "underline" -> underlineSpan <$> innerInlines
459+ "underline" -> underline <$> innerInlines
460 "break" -> return linebreak
460 "break" -> return linebreak
461 "sc" -> smallcaps <$> innerInlines
461 "sc" -> smallcaps <$> innerInlines
462
462
src/Text/Pandoc/Readers/LaTeX.hs+3−3
@@ -909,7 +909,7 @@ inlineCommands = M.union inlineLanguageCommands $ M.fromList
909 , ("slash", lit "/")
909 , ("slash", lit "/")
910 , ("textbf", extractSpaces strong <$> tok)
910 , ("textbf", extractSpaces strong <$> tok)
911 , ("textnormal", extractSpaces (spanWith ("",["nodecor"],[])) <$> tok)
911 , ("textnormal", extractSpaces (spanWith ("",["nodecor"],[])) <$> tok)
912− , ("underline", underlineSpan <$> tok)
912+ , ("underline", underline <$> tok)
913 , ("ldots", lit "…")
913 , ("ldots", lit "…")
914 , ("vdots", lit "\8942")
914 , ("vdots", lit "\8942")
915 , ("dots", lit "…")
915 , ("dots", lit "…")
@@ -1171,9 +1171,9 @@ inlineCommands = M.union inlineLanguageCommands $ M.fromList
1171 -- include
1171 -- include
1172 , ("input", rawInlineOr "input" $ include "input")
1172 , ("input", rawInlineOr "input" $ include "input")
1173 -- soul package
1173 -- soul package
1174− , ("ul", underlineSpan <$> tok)
1174+ , ("ul", underline <$> tok)
1175 -- ulem package
1175 -- ulem package
1176− , ("uline", underlineSpan <$> tok)
1176+ , ("uline", underline <$> tok)
1177 -- plain tex stuff that should just be passed through as raw tex
1177 -- plain tex stuff that should just be passed through as raw tex
1178 , ("ifdim", ifdim)
1178 , ("ifdim", ifdim)
1179 ]
1179 ]
src/Text/Pandoc/Readers/Markdown.hs+13−2
@@ -1751,7 +1751,9 @@ bracketedSpan = try $ do
1751 attr <- attributes
1751 attr <- attributes
1752 return $ if isSmallCaps attr
1752 return $ if isSmallCaps attr
1753 then B.smallcaps <$> lab
1753 then B.smallcaps <$> lab
1754+ else if isUnderline attr
1755+ then B.underline <$> lab
1754− else B.spanWith attr <$> lab
1756+ else B.spanWith attr <$> lab
1755
1757
1756-- | We treat a span as SmallCaps if class is "smallcaps" (and
1758-- | We treat a span as SmallCaps if class is "smallcaps" (and
1757-- no other attributes are set or if style is "font-variant:small-caps"
1759-- no other attributes are set or if style is "font-variant:small-caps"
@@ -1765,6 +1767,13 @@ isSmallCaps ("",[],kvs) =
1765 Nothing -> False
1767 Nothing -> False
1766isSmallCaps _ = False
1768isSmallCaps _ = False
1767
1769
1770+-- | We treat a span as Underline if class is "ul" or
1771+-- "underline" (and no other attributes are set).
1772+isUnderline :: Attr -> Bool
1773+isUnderline ("",["ul"],[]) = True
1774+isUnderline ("",["underline"],[]) = True
1775+isUnderline _ = False
1776+
1768regLink :: PandocMonad m
1777regLink :: PandocMonad m
1769 => (Attr -> Text -> Text -> Inlines -> Inlines)
1778 => (Attr -> Text -> Text -> Inlines -> Inlines)
1770 -> F Inlines
1779 -> F Inlines
@@ -1913,7 +1922,9 @@ spanHtml = try $ do
1913 let keyvals = [(k,v) | (k,v) <- attrs, k /= "id" && k /= "class"]
1922 let keyvals = [(k,v) | (k,v) <- attrs, k /= "id" && k /= "class"]
1914 return $ if isSmallCaps (ident, classes, keyvals)
1923 return $ if isSmallCaps (ident, classes, keyvals)
1915 then B.smallcaps <$> contents
1924 then B.smallcaps <$> contents
1925+ else if isUnderline (ident, classes, keyvals)
1926+ then B.underline <$> contents
1916− else B.spanWith (ident, classes, keyvals) <$> contents
1927+ else B.spanWith (ident, classes, keyvals) <$> contents
1917
1928
1918divHtml :: PandocMonad m => MarkdownParser m (F Blocks)
1929divHtml :: PandocMonad m => MarkdownParser m (F Blocks)
1919divHtml = try $ do
1930divHtml = try $ do
src/Text/Pandoc/Readers/Muse.hs+3−3
@@ -29,7 +29,7 @@ import qualified Data.Set as Set
29import Data.Maybe (fromMaybe, isNothing, maybeToList)
29import Data.Maybe (fromMaybe, isNothing, maybeToList)
30import Data.Text (Text)
30import Data.Text (Text)
31import qualified Data.Text as T
31import qualified Data.Text as T
32−import Text.Pandoc.Builder (Blocks, Inlines)
32+import Text.Pandoc.Builder (Blocks, Inlines, underline)
33import qualified Text.Pandoc.Builder as B
33import qualified Text.Pandoc.Builder as B
34import Text.Pandoc.Class.PandocMonad (PandocMonad (..))
34import Text.Pandoc.Class.PandocMonad (PandocMonad (..))
35import Text.Pandoc.Definition
35import Text.Pandoc.Definition
@@ -37,7 +37,7 @@ import Text.Pandoc.Error (PandocError (PandocParsecError))
37import Text.Pandoc.Logging
37import Text.Pandoc.Logging
38import Text.Pandoc.Options
38import Text.Pandoc.Options
39import Text.Pandoc.Parsing hiding (F)
39import Text.Pandoc.Parsing hiding (F)
40−import Text.Pandoc.Shared (crFilter, trimr, underlineSpan, tshow)
40+import Text.Pandoc.Shared (crFilter, trimr, tshow)
41
41
42-- | Read Muse from an input string and return a Pandoc document.
42-- | Read Muse from an input string and return a Pandoc document.
43readMuse :: PandocMonad m
43readMuse :: PandocMonad m
@@ -849,7 +849,7 @@ emph = fmap B.emph <$> emphasisBetween (char '*' <* notFollowedBy (char '*'))
849-- | Parse underline inline markup, indicated by @_@.
849-- | Parse underline inline markup, indicated by @_@.
850-- Supported only in Emacs Muse mode, not Text::Amuse.
850-- Supported only in Emacs Muse mode, not Text::Amuse.
851underlined :: PandocMonad m => MuseParser m (F Inlines)
851underlined :: PandocMonad m => MuseParser m (F Inlines)
852−underlined = fmap underlineSpan
852+underlined = fmap underline
853 <$ guardDisabled Ext_amuse -- Supported only by Emacs Muse
853 <$ guardDisabled Ext_amuse -- Supported only by Emacs Muse
854 <*> emphasisBetween (char '_')
854 <*> emphasisBetween (char '_')
855
855
src/Text/Pandoc/Readers/Odt/ContentReader.hs+1−1
@@ -37,7 +37,7 @@ import Data.Semigroup (First(..), Option(..))
37import Text.TeXMath (readMathML, writeTeX)
37import Text.TeXMath (readMathML, writeTeX)
38import qualified Text.XML.Light as XML
38import qualified Text.XML.Light as XML
39
39
40−import Text.Pandoc.Builder
40+import Text.Pandoc.Builder hiding (underline)
41import Text.Pandoc.MediaBag (MediaBag, insertMedia)
41import Text.Pandoc.MediaBag (MediaBag, insertMedia)
42import Text.Pandoc.Shared
42import Text.Pandoc.Shared
43import Text.Pandoc.Extensions (extensionsFromList, Extension(..))
43import Text.Pandoc.Extensions (extensionsFromList, Extension(..))
src/Text/Pandoc/Readers/Org/Inlines.hs+1−2
@@ -27,7 +27,6 @@ import Text.Pandoc.Class.PandocMonad (PandocMonad)
27import Text.Pandoc.Definition
27import Text.Pandoc.Definition
28import Text.Pandoc.Options
28import Text.Pandoc.Options
29import Text.Pandoc.Readers.LaTeX (inlineCommand, rawLaTeXInline)
29import Text.Pandoc.Readers.LaTeX (inlineCommand, rawLaTeXInline)
30−import Text.Pandoc.Shared (underlineSpan)
31import Text.TeXMath (DisplayType (..), readTeX, writePandoc)
30import Text.TeXMath (DisplayType (..), readTeX, writePandoc)
32import qualified Text.TeXMath.Readers.MathML.EntityMap as MathMLEntityMap
31import qualified Text.TeXMath.Readers.MathML.EntityMap as MathMLEntityMap
33
32
@@ -567,7 +566,7 @@ strikeout :: PandocMonad m => OrgParser m (F Inlines)
567strikeout = fmap B.strikeout <$> emphasisBetween '+'
566strikeout = fmap B.strikeout <$> emphasisBetween '+'
568
567
569underline :: PandocMonad m => OrgParser m (F Inlines)
568underline :: PandocMonad m => OrgParser m (F Inlines)
570−underline = fmap underlineSpan <$> emphasisBetween '_'
569+underline = fmap B.underline <$> emphasisBetween '_'
571
570
572verbatim :: PandocMonad m => OrgParser m (F Inlines)
571verbatim :: PandocMonad m => OrgParser m (F Inlines)
573verbatim = return . B.code <$> verbatimBetween '='
572verbatim = return . B.code <$> verbatimBetween '='
src/Text/Pandoc/Readers/Textile.hs+2−2
@@ -52,7 +52,7 @@ import Text.Pandoc.Options
52import Text.Pandoc.Parsing
52import Text.Pandoc.Parsing
53import Text.Pandoc.Readers.HTML (htmlTag, isBlockTag, isInlineTag)
53import Text.Pandoc.Readers.HTML (htmlTag, isBlockTag, isInlineTag)
54import Text.Pandoc.Readers.LaTeX (rawLaTeXBlock, rawLaTeXInline)
54import Text.Pandoc.Readers.LaTeX (rawLaTeXBlock, rawLaTeXInline)
55−import Text.Pandoc.Shared (crFilter, trim, underlineSpan, tshow)
55+import Text.Pandoc.Shared (crFilter, trim, tshow)
56
56
57-- | Parse a Textile text and return a Pandoc document.
57-- | Parse a Textile text and return a Pandoc document.
58readTextile :: PandocMonad m
58readTextile :: PandocMonad m
@@ -451,7 +451,7 @@ inlineMarkup = choice [ simpleInline (string "??") (B.cite [])
451 , simpleInline (string "__") B.emph
451 , simpleInline (string "__") B.emph
452 , simpleInline (char '*') B.strong
452 , simpleInline (char '*') B.strong
453 , simpleInline (char '_') B.emph
453 , simpleInline (char '_') B.emph
454− , simpleInline (char '+') underlineSpan
454+ , simpleInline (char '+') B.underline
455 , simpleInline (char '-' <* notFollowedBy (char '-')) B.strikeout
455 , simpleInline (char '-' <* notFollowedBy (char '-')) B.strikeout
456 , simpleInline (char '^') B.superscript
456 , simpleInline (char '^') B.superscript
457 , simpleInline (char '~') B.subscript
457 , simpleInline (char '~') B.subscript
src/Text/Pandoc/Readers/Txt2Tags.hs+2−3
@@ -31,8 +31,7 @@ import Data.Time (defaultTimeLocale)
31import Text.Pandoc.Definition
31import Text.Pandoc.Definition
32import Text.Pandoc.Options
32import Text.Pandoc.Options
33import Text.Pandoc.Parsing hiding (space, spaces, uri)
33import Text.Pandoc.Parsing hiding (space, spaces, uri)
34−import Text.Pandoc.Shared (compactify, compactifyDL, crFilter, escapeURI,
34+import Text.Pandoc.Shared (compactify, compactifyDL, crFilter, escapeURI)
35− underlineSpan)
36
35
37type T2T = ParserT Text ParserState (Reader T2TMeta)
36type T2T = ParserT Text ParserState (Reader T2TMeta)
38
37
@@ -378,7 +377,7 @@ bold :: T2T Inlines
378bold = inlineMarkup inline B.strong '*' B.str
377bold = inlineMarkup inline B.strong '*' B.str
379
378
380underline :: T2T Inlines
379underline :: T2T Inlines
381−underline = inlineMarkup inline underlineSpan '_' B.str
380+underline = inlineMarkup inline B.underline '_' B.str
382
381
383strike :: T2T Inlines
382strike :: T2T Inlines
384strike = inlineMarkup inline B.strikeout '-' B.str
383strike = inlineMarkup inline B.strikeout '-' B.str
src/Text/Pandoc/Shared.hs+3−2
@@ -750,11 +750,12 @@ eastAsianLineBreakFilter = bottomUp go
750 go xs
750 go xs
751 = xs
751 = xs
752
752
753+{-# DEPRECATED underlineSpan "Use Text.Pandoc.Builder.underline instead" #-}
753−-- | Builder for underline.
754+-- | Builder for underline (deprecated).
754-- This probably belongs in Builder.hs in pandoc-types.
755-- This probably belongs in Builder.hs in pandoc-types.
755-- Will be replaced once Underline is an element.
756-- Will be replaced once Underline is an element.
756underlineSpan :: Inlines -> Inlines
757underlineSpan :: Inlines -> Inlines
757−underlineSpan = B.spanWith ("", ["underline"], [])
758+underlineSpan = B.underline
758
759
759-- | Set of HTML elements that are represented as Span with a class equal as
760-- | Set of HTML elements that are represented as Span with a class equal as
760-- the element tag itself.
761-- the element tag itself.
src/Text/Pandoc/Writers/AsciiDoc.hs+3
@@ -433,6 +433,9 @@ inlineToAsciiDoc opts (Emph lst) = do
433 isIntraword <- gets intraword
433 isIntraword <- gets intraword
434 let marker = if isIntraword then "__" else "_"
434 let marker = if isIntraword then "__" else "_"
435 return $ marker <> contents <> marker
435 return $ marker <> contents <> marker
436+inlineToAsciiDoc opts (Underline lst) = do
437+ contents <- inlineListToAsciiDoc opts lst
438+ return $ "+++" <> contents <> "+++"
436inlineToAsciiDoc opts (Strong lst) = do
439inlineToAsciiDoc opts (Strong lst) = do
437 contents <- inlineListToAsciiDoc opts lst
440 contents <- inlineListToAsciiDoc opts lst
438 isIntraword <- gets intraword
441 isIntraword <- gets intraword
src/Text/Pandoc/Writers/CommonMark.hs+5
@@ -237,6 +237,11 @@ inlineToNodes opts SoftBreak
237 | writerWrapText opts == WrapNone = (node (TEXT " ") [] :)
237 | writerWrapText opts == WrapNone = (node (TEXT " ") [] :)
238 | otherwise = (node SOFTBREAK [] :)
238 | otherwise = (node SOFTBREAK [] :)
239inlineToNodes opts (Emph xs) = (node EMPH (inlinesToNodes opts xs) :)
239inlineToNodes opts (Emph xs) = (node EMPH (inlinesToNodes opts xs) :)
240+inlineToNodes opts (Underline xs)
241+ | isEnabled Ext_raw_html opts =
242+ ((node (HTML_INLINE (T.pack "<u>")) [] : inlinesToNodes opts xs ++
243+ [node (HTML_INLINE (T.pack "</u>")) []]) ++ )
244+ | otherwise = (node EMPH (inlinesToNodes opts xs) :)
240inlineToNodes opts (Strong xs) = (node STRONG (inlinesToNodes opts xs) :)
245inlineToNodes opts (Strong xs) = (node STRONG (inlinesToNodes opts xs) :)
241inlineToNodes opts (Strikeout xs)
246inlineToNodes opts (Strikeout xs)
242 | isEnabled Ext_strikeout opts = (node (CUSTOM_INLINE "~~" "~~") (inlinesToNodes opts xs) :)
247 | isEnabled Ext_strikeout opts = (node (CUSTOM_INLINE "~~" "~~") (inlinesToNodes opts xs) :)
src/Text/Pandoc/Writers/ConTeXt.hs+3
@@ -368,6 +368,9 @@ inlineToConTeXt :: PandocMonad m
368inlineToConTeXt (Emph lst) = do
368inlineToConTeXt (Emph lst) = do
369 contents <- inlineListToConTeXt lst
369 contents <- inlineListToConTeXt lst
370 return $ braces $ "\\em " <> contents
370 return $ braces $ "\\em " <> contents
371+inlineToConTeXt (Underline lst) = do
372+ contents <- inlineListToConTeXt lst
373+ return $ "\\underbar" <> braces contents
371inlineToConTeXt (Strong lst) = do
374inlineToConTeXt (Strong lst) = do
372 contents <- inlineListToConTeXt lst
375 contents <- inlineListToConTeXt lst
373 return $ braces $ "\\bf " <> contents
376 return $ braces $ "\\bf " <> contents
src/Text/Pandoc/Writers/Custom.hs+2
@@ -186,6 +186,8 @@ inlineToCustom SoftBreak = Lua.callFunc "SoftBreak"
186
186
187inlineToCustom (Emph lst) = Lua.callFunc "Emph" (Stringify lst)
187inlineToCustom (Emph lst) = Lua.callFunc "Emph" (Stringify lst)
188
188
189+inlineToCustom (Underline lst) = Lua.callFunc "Underline" (Stringify lst)
190+
189inlineToCustom (Strong lst) = Lua.callFunc "Strong" (Stringify lst)
191inlineToCustom (Strong lst) = Lua.callFunc "Strong" (Stringify lst)
190
192
191inlineToCustom (Strikeout lst) = Lua.callFunc "Strikeout" (Stringify lst)
193inlineToCustom (Strikeout lst) = Lua.callFunc "Strikeout" (Stringify lst)
src/Text/Pandoc/Writers/Docbook.hs+2
@@ -323,6 +323,8 @@ inlineToDocbook :: PandocMonad m => WriterOptions -> Inline -> DB m (Doc Text)
323inlineToDocbook _ (Str str) = return $ literal $ escapeStringForXML str
323inlineToDocbook _ (Str str) = return $ literal $ escapeStringForXML str
324inlineToDocbook opts (Emph lst) =
324inlineToDocbook opts (Emph lst) =
325 inTagsSimple "emphasis" <$> inlinesToDocbook opts lst
325 inTagsSimple "emphasis" <$> inlinesToDocbook opts lst
326+inlineToDocbook opts (Underline lst) =
327+ inTags False "emphasis" [("role", "underline")] <$> inlinesToDocbook opts lst
326inlineToDocbook opts (Strong lst) =
328inlineToDocbook opts (Strong lst) =
327 inTags False "emphasis" [("role", "strong")] <$> inlinesToDocbook opts lst
329 inTags False "emphasis" [("role", "strong")] <$> inlinesToDocbook opts lst
328inlineToDocbook opts (Strikeout lst) =
330inlineToDocbook opts (Strikeout lst) =
src/Text/Pandoc/Writers/Docx.hs+3−3
@@ -1158,9 +1158,6 @@ inlineToOpenXML' _ (Str str) =
1158 formattedString str
1158 formattedString str
1159inlineToOpenXML' opts Space = inlineToOpenXML opts (Str " ")
1159inlineToOpenXML' opts Space = inlineToOpenXML opts (Str " ")
1160inlineToOpenXML' opts SoftBreak = inlineToOpenXML opts (Str " ")
1160inlineToOpenXML' opts SoftBreak = inlineToOpenXML opts (Str " ")
1161−inlineToOpenXML' opts (Span (_,["underline"],_) ils) =
1162− withTextProp (mknode "w:u" [("w:val","single")] ()) $
1163− inlinesToOpenXML opts ils
1164inlineToOpenXML' _ (Span (ident,["comment-start"],kvs) ils) = do
1161inlineToOpenXML' _ (Span (ident,["comment-start"],kvs) ils) = do
1165 -- prefer the "id" in kvs, since that is the one produced by the docx
1162 -- prefer the "id" in kvs, since that is the one produced by the docx
1166 -- reader.
1163 -- reader.
@@ -1234,6 +1231,9 @@ inlineToOpenXML' opts (Strong lst) =
1234 withTextProp (mknode "w:b" [] ()) $ inlinesToOpenXML opts lst
1231 withTextProp (mknode "w:b" [] ()) $ inlinesToOpenXML opts lst
1235inlineToOpenXML' opts (Emph lst) =
1232inlineToOpenXML' opts (Emph lst) =
1236 withTextProp (mknode "w:i" [] ()) $ inlinesToOpenXML opts lst
1233 withTextProp (mknode "w:i" [] ()) $ inlinesToOpenXML opts lst
1234+inlineToOpenXML' opts (Underline lst) =
1235+ withTextProp (mknode "w:u" [("w:val","single")] ()) $
1236+ inlinesToOpenXML opts lst
1237inlineToOpenXML' opts (Subscript lst) =
1237inlineToOpenXML' opts (Subscript lst) =
1238 withTextProp (mknode "w:vertAlign" [("w:val","subscript")] ())
1238 withTextProp (mknode "w:vertAlign" [("w:val","subscript")] ())
1239 $ inlinesToOpenXML opts lst
1239 $ inlinesToOpenXML opts lst
src/Text/Pandoc/Writers/DokuWiki.hs+4
@@ -402,6 +402,10 @@ inlineToDokuWiki opts (Emph lst) = do
402 contents <- inlineListToDokuWiki opts lst
402 contents <- inlineListToDokuWiki opts lst
403 return $ "//" <> contents <> "//"
403 return $ "//" <> contents <> "//"
404
404
405+inlineToDokuWiki opts (Underline lst) = do
406+ contents <- inlineListToDokuWiki opts lst
407+ return $ "__" <> contents <> "__"
408+
405inlineToDokuWiki opts (Strong lst) = do
409inlineToDokuWiki opts (Strong lst) = do
406 contents <- inlineListToDokuWiki opts lst
410 contents <- inlineListToDokuWiki opts lst
407 return $ "**" <> contents <> "**"
411 return $ "**" <> contents <> "**"
src/Text/Pandoc/Writers/FB2.hs+2
@@ -406,6 +406,7 @@ toXml :: PandocMonad m => Inline -> FBM m [Content]
406toXml (Str s) = return [txt s]
406toXml (Str s) = return [txt s]
407toXml (Span _ ils) = cMapM toXml ils
407toXml (Span _ ils) = cMapM toXml ils
408toXml (Emph ss) = list `liftM` wrap "emphasis" ss
408toXml (Emph ss) = list `liftM` wrap "emphasis" ss
409+toXml (Underline ss) = list `liftM` wrap "underline" ss
409toXml (Strong ss) = list `liftM` wrap "strong" ss
410toXml (Strong ss) = list `liftM` wrap "strong" ss
410toXml (Strikeout ss) = list `liftM` wrap "strikethrough" ss
411toXml (Strikeout ss) = list `liftM` wrap "strikethrough" ss
411toXml (Superscript ss) = list `liftM` wrap "sup" ss
412toXml (Superscript ss) = list `liftM` wrap "sup" ss
@@ -529,6 +530,7 @@ list = (:[])
529plain :: Inline -> String
530plain :: Inline -> String
530plain (Str s) = T.unpack s
531plain (Str s) = T.unpack s
531plain (Emph ss) = cMap plain ss
532plain (Emph ss) = cMap plain ss
533+plain (Underline ss) = cMap plain ss
532plain (Span _ ss) = cMap plain ss
534plain (Span _ ss) = cMap plain ss
533plain (Strong ss) = cMap plain ss
535plain (Strong ss) = cMap plain ss
534plain (Strikeout ss) = cMap plain ss
536plain (Strikeout ss) = cMap plain ss
src/Text/Pandoc/Writers/HTML.hs+1
@@ -1049,6 +1049,7 @@ inlineToHtml opts inline = do
1049 ]
1049 ]
1050
1050
1051 (Emph lst) -> H.em <$> inlineListToHtml opts lst
1051 (Emph lst) -> H.em <$> inlineListToHtml opts lst
1052+ (Underline lst) -> H.u <$> inlineListToHtml opts lst
1052 (Strong lst) -> H.strong <$> inlineListToHtml opts lst
1053 (Strong lst) -> H.strong <$> inlineListToHtml opts lst
1053 (Code attr@(ids,cs,kvs) str)
1054 (Code attr@(ids,cs,kvs) str)
1054 -> case hlCode of
1055 -> case hlCode of
src/Text/Pandoc/Writers/Haddock.hs+3
@@ -209,6 +209,9 @@ inlineToHaddock opts (Span (ident,_,_) ils) = do
209inlineToHaddock opts (Emph lst) = do
209inlineToHaddock opts (Emph lst) = do
210 contents <- inlineListToHaddock opts lst
210 contents <- inlineListToHaddock opts lst
211 return $ "/" <> contents <> "/"
211 return $ "/" <> contents <> "/"
212+-- Underline is not supported, treat the same as Emph
213+inlineToHaddock opts (Underline lst) =
214+ inlineToHaddock opts (Emph lst)
212inlineToHaddock opts (Strong lst) = do
215inlineToHaddock opts (Strong lst) = do
213 contents <- inlineListToHaddock opts lst
216 contents <- inlineListToHaddock opts lst
214 return $ "__" <> contents <> "__"
217 return $ "__" <> contents <> "__"
src/Text/Pandoc/Writers/ICML.hs+3
@@ -60,6 +60,7 @@ defaultWriterState = WriterState{
60
60
61-- inline names (appear in InDesign's character styles pane)
61-- inline names (appear in InDesign's character styles pane)
62emphName :: Text
62emphName :: Text
63+underlineName :: Text
63strongName :: Text
64strongName :: Text
64strikeoutName :: Text
65strikeoutName :: Text
65superscriptName :: Text
66superscriptName :: Text
@@ -68,6 +69,7 @@ smallCapsName :: Text
68codeName :: Text
69codeName :: Text
69linkName :: Text
70linkName :: Text
70emphName = "Italic"
71emphName = "Italic"
72+underlineName = "Underline"
71strongName = "Bold"
73strongName = "Bold"
72strikeoutName = "Strikeout"
74strikeoutName = "Strikeout"
73superscriptName = "Superscript"
75superscriptName = "Superscript"
@@ -427,6 +429,7 @@ inlinesToICML opts style lst = vcat `fmap` mapM (inlineToICML opts style) (merge
427inlineToICML :: PandocMonad m => WriterOptions -> Style -> Inline -> WS m (Doc Text)
429inlineToICML :: PandocMonad m => WriterOptions -> Style -> Inline -> WS m (Doc Text)
428inlineToICML _ style (Str str) = charStyle style $ literal $ escapeStringForXML str
430inlineToICML _ style (Str str) = charStyle style $ literal $ escapeStringForXML str
429inlineToICML opts style (Emph lst) = inlinesToICML opts (emphName:style) lst
431inlineToICML opts style (Emph lst) = inlinesToICML opts (emphName:style) lst
432+inlineToICML opts style (Underline lst) = inlinesToICML opts (underlineName:style) lst
430inlineToICML opts style (Strong lst) = inlinesToICML opts (strongName:style) lst
433inlineToICML opts style (Strong lst) = inlinesToICML opts (strongName:style) lst
431inlineToICML opts style (Strikeout lst) = inlinesToICML opts (strikeoutName:style) lst
434inlineToICML opts style (Strikeout lst) = inlinesToICML opts (strikeoutName:style) lst
432inlineToICML opts style (Superscript lst) = inlinesToICML opts (superscriptName:style) lst
435inlineToICML opts style (Superscript lst) = inlinesToICML opts (superscriptName:style) lst
src/Text/Pandoc/Writers/JATS.hs+2
@@ -424,6 +424,8 @@ inlineToJATS :: PandocMonad m => WriterOptions -> Inline -> JATS m (Doc Text)
424inlineToJATS _ (Str str) = return $ text $ T.unpack $ escapeStringForXML str
424inlineToJATS _ (Str str) = return $ text $ T.unpack $ escapeStringForXML str
425inlineToJATS opts (Emph lst) =
425inlineToJATS opts (Emph lst) =
426 inTagsSimple "italic" <$> inlinesToJATS opts lst
426 inTagsSimple "italic" <$> inlinesToJATS opts lst
427+inlineToJATS opts (Underline lst) =
428+ inTagsSimple "underline" <$> inlinesToJATS opts lst
427inlineToJATS opts (Strong lst) =
429inlineToJATS opts (Strong lst) =
428 inTagsSimple "bold" <$> inlinesToJATS opts lst
430 inTagsSimple "bold" <$> inlinesToJATS opts lst
429inlineToJATS opts (Strikeout lst) =
431inlineToJATS opts (Strikeout lst) =
src/Text/Pandoc/Writers/Jira.hs+1
@@ -193,6 +193,7 @@ toJiraInlines inlines = do
193 Code _ cs -> return . singleton $
193 Code _ cs -> return . singleton $
194 Jira.Monospaced (escapeSpecialChars cs)
194 Jira.Monospaced (escapeSpecialChars cs)
195 Emph xs -> styled Jira.Emphasis xs
195 Emph xs -> styled Jira.Emphasis xs
196+ Underline xs -> styled Jira.Insert xs
196 Image attr _ tgt -> imageToJira attr (fst tgt) (snd tgt)
197 Image attr _ tgt -> imageToJira attr (fst tgt) (snd tgt)
197 LineBreak -> pure . singleton $ Jira.Linebreak
198 LineBreak -> pure . singleton $ Jira.Linebreak
198 Link attr xs tgt -> toJiraLink attr tgt xs
199 Link attr xs tgt -> toJiraLink attr tgt xs
src/Text/Pandoc/Writers/LaTeX.hs+1
@@ -1140,6 +1140,7 @@ inlineToLaTeX (Span (id',classes,kvs) ils) = do
1140 then braces contents
1140 then braces contents
1141 else foldr inCmd contents cmds)
1141 else foldr inCmd contents cmds)
1142inlineToLaTeX (Emph lst) = inCmd "emph" <$> inlineListToLaTeX lst
1142inlineToLaTeX (Emph lst) = inCmd "emph" <$> inlineListToLaTeX lst
1143+inlineToLaTeX (Underline lst) = inCmd "underline" <$> inlineListToLaTeX lst
1143inlineToLaTeX (Strong lst) = inCmd "textbf" <$> inlineListToLaTeX lst
1144inlineToLaTeX (Strong lst) = inCmd "textbf" <$> inlineListToLaTeX lst
1144inlineToLaTeX (Strikeout lst) = do
1145inlineToLaTeX (Strikeout lst) = do
1145 -- we need to protect VERB in an mbox or we get an error
1146 -- we need to protect VERB in an mbox or we get an error
src/Text/Pandoc/Writers/Man.hs+3
@@ -270,6 +270,9 @@ inlineToMan :: PandocMonad m => WriterOptions -> Inline -> StateT WriterState m
270inlineToMan opts (Span _ ils) = inlineListToMan opts ils
270inlineToMan opts (Span _ ils) = inlineListToMan opts ils
271inlineToMan opts (Emph lst) =
271inlineToMan opts (Emph lst) =
272 withFontFeature 'I' (inlineListToMan opts lst)
272 withFontFeature 'I' (inlineListToMan opts lst)
273+-- Underline is not supported, so treat the same as Emph
274+inlineToMan opts (Underline lst) =
275+ withFontFeature 'I' (inlineListToMan opts lst)
273inlineToMan opts (Strong lst) =
276inlineToMan opts (Strong lst) =
274 withFontFeature 'B' (inlineListToMan opts lst)
277 withFontFeature 'B' (inlineListToMan opts lst)
275inlineToMan opts (Strikeout lst) = do
278inlineToMan opts (Strikeout lst) = do
src/Text/Pandoc/Writers/Markdown.hs+15
@@ -1045,6 +1045,21 @@ inlineToMarkdown opts (Emph lst) = do
1045 then "_" <> contents <> "_"
1045 then "_" <> contents <> "_"
1046 else contents
1046 else contents
1047 else "*" <> contents <> "*"
1047 else "*" <> contents <> "*"
1048+inlineToMarkdown _ (Underline []) = return empty
1049+inlineToMarkdown opts (Underline lst) = do
1050+ plain <- asks envPlain
1051+ contents <- inlineListToMarkdown opts lst
1052+ case plain of
1053+ True -> return contents
1054+ False | isEnabled Ext_bracketed_spans opts ->
1055+ return $ "[" <> contents <> "]" <> "{.ul}"
1056+ | isEnabled Ext_native_spans opts ->
1057+ return $ tagWithAttrs "span" ("", ["underline"], [])
1058+ <> contents
1059+ <> literal "</span>"
1060+ | isEnabled Ext_raw_html opts ->
1061+ return $ "<u>" <> contents <> "</u>"
1062+ | otherwise -> inlineToMarkdown opts (Emph lst)
1048inlineToMarkdown _ (Strong []) = return empty
1063inlineToMarkdown _ (Strong []) = return empty
1049inlineToMarkdown opts (Strong lst) = do
1064inlineToMarkdown opts (Strong lst) = do
1050 plain <- asks envPlain
1065 plain <- asks envPlain
src/Text/Pandoc/Writers/MediaWiki.hs+4
@@ -372,6 +372,10 @@ inlineToMediaWiki (Emph lst) = do
372 contents <- inlineListToMediaWiki lst
372 contents <- inlineListToMediaWiki lst
373 return $ "''" <> contents <> "''"
373 return $ "''" <> contents <> "''"
374
374
375+inlineToMediaWiki (Underline lst) = do
376+ contents <- inlineListToMediaWiki lst
377+ return $ "<u>" <> contents <> "</u>"
378+
375inlineToMediaWiki (Strong lst) = do
379inlineToMediaWiki (Strong lst) = do
376 contents <- inlineListToMediaWiki lst
380 contents <- inlineListToMediaWiki lst
377 return $ "'''" <> contents <> "'''"
381 return $ "'''" <> contents <> "'''"
src/Text/Pandoc/Writers/Ms.hs+2
@@ -351,6 +351,8 @@ inlineToMs :: PandocMonad m => WriterOptions -> Inline -> MS m (Doc Text)
351inlineToMs opts (Span _ ils) = inlineListToMs opts ils
351inlineToMs opts (Span _ ils) = inlineListToMs opts ils
352inlineToMs opts (Emph lst) =
352inlineToMs opts (Emph lst) =
353 withFontFeature 'I' (inlineListToMs opts lst)
353 withFontFeature 'I' (inlineListToMs opts lst)
354+inlineToMs opts (Underline lst) =
355+ inlineToMs opts (Emph lst)
354inlineToMs opts (Strong lst) =
356inlineToMs opts (Strong lst) =
355 withFontFeature 'B' (inlineListToMs opts lst)
357 withFontFeature 'B' (inlineListToMs opts lst)
356inlineToMs opts (Strikeout lst) = do
358inlineToMs opts (Strikeout lst) = do
src/Text/Pandoc/Writers/Muse.hs+7
@@ -594,6 +594,13 @@ inlineToMuse (Strong [Emph lst]) = do
594 else if null lst' || startsWithSpace lst' || endsWithSpace lst'
594 else if null lst' || startsWithSpace lst' || endsWithSpace lst'
595 then emphasis "**<em>" "</em>**" lst'
595 then emphasis "**<em>" "</em>**" lst'
596 else emphasis "***" "***" lst'
596 else emphasis "***" "***" lst'
597+-- | Underline is only supported in Emacs Muse mode.
598+inlineToMuse (Underline lst) = do
599+ opts <- asks envOptions
600+ contents <- inlineListToMuse lst
601+ if isEnabled Ext_amuse opts
602+ then return $ "_" <> contents <> "_"
603+ else inlineToMuse (Emph lst)
597inlineToMuse (Strong lst) = do
604inlineToMuse (Strong lst) = do
598 useTags <- gets stUseTags
605 useTags <- gets stUseTags
599 let lst' = normalizeInlineList lst
606 let lst' = normalizeInlineList lst
src/Text/Pandoc/Writers/OpenDocument.hs+5
@@ -512,6 +512,7 @@ inlineToOpenDocument o ils
512 LineBreak -> return $ selfClosingTag "text:line-break" []
512 LineBreak -> return $ selfClosingTag "text:line-break" []
513 Str s -> return $ handleSpaces $ escapeStringForXML s
513 Str s -> return $ handleSpaces $ escapeStringForXML s
514 Emph l -> withTextStyle Italic $ inlinesToOpenDocument o l
514 Emph l -> withTextStyle Italic $ inlinesToOpenDocument o l
515+ Underline l -> withTextStyle Under $ inlinesToOpenDocument o l
515 Strong l -> withTextStyle Bold $ inlinesToOpenDocument o l
516 Strong l -> withTextStyle Bold $ inlinesToOpenDocument o l
516 Strikeout l -> withTextStyle Strike $ inlinesToOpenDocument o l
517 Strikeout l -> withTextStyle Strike $ inlinesToOpenDocument o l
517 Superscript l -> withTextStyle Sup $ inlinesToOpenDocument o l
518 Superscript l -> withTextStyle Sup $ inlinesToOpenDocument o l
@@ -692,6 +693,7 @@ paraTableStyles t s (a:xs)
692
693
693data TextStyle = Italic
694data TextStyle = Italic
694 | Bold
695 | Bold
696+ | Under
695 | Strike
697 | Strike
696 | Sub
698 | Sub
697 | Sup
699 | Sup
@@ -710,6 +712,9 @@ textStyleAttr m s
710 | Bold <- s = Map.insert "fo:font-weight" "bold" .
712 | Bold <- s = Map.insert "fo:font-weight" "bold" .
711 Map.insert "style:font-weight-asian" "bold" .
713 Map.insert "style:font-weight-asian" "bold" .
712 Map.insert "style:font-weight-complex" "bold" $ m
714 Map.insert "style:font-weight-complex" "bold" $ m
715+ | Under <- s = Map.insert "style:text-underline-style" "solid" .
716+ Map.insert "style:text-underline-width" "auto" .
717+ Map.insert "style:text-underline-color" "font-color" $ m
713 | Strike <- s = Map.insert "style:text-line-through-style" "solid" m
718 | Strike <- s = Map.insert "style:text-line-through-style" "solid" m
714 | Sub <- s = Map.insert "style:text-position" "sub 58%" m
719 | Sub <- s = Map.insert "style:text-position" "sub 58%" m
715 | Sup <- s = Map.insert "style:text-position" "super 58%" m
720 | Sup <- s = Map.insert "style:text-position" "super 58%" m
src/Text/Pandoc/Writers/Org.hs+3
@@ -329,6 +329,9 @@ inlineToOrg (Span _ lst) =
329inlineToOrg (Emph lst) = do
329inlineToOrg (Emph lst) = do
330 contents <- inlineListToOrg lst
330 contents <- inlineListToOrg lst
331 return $ "/" <> contents <> "/"
331 return $ "/" <> contents <> "/"
332+inlineToOrg (Underline lst) = do
333+ contents <- inlineListToOrg lst
334+ return $ "_" <> contents <> "_"
332inlineToOrg (Strong lst) = do
335inlineToOrg (Strong lst) = do
333 contents <- inlineListToOrg lst
336 contents <- inlineListToOrg lst
334 return $ "*" <> contents <> "*"
337 return $ "*" <> contents <> "*"
src/Text/Pandoc/Writers/Powerpoint/Presentation.hs+3
@@ -323,6 +323,9 @@ inlineToParElems (Str s) = do
323inlineToParElems (Emph ils) =
323inlineToParElems (Emph ils) =
324 local (\r -> r{envRunProps = (envRunProps r){rPropItalics=True}}) $
324 local (\r -> r{envRunProps = (envRunProps r){rPropItalics=True}}) $
325 inlinesToParElems ils
325 inlinesToParElems ils
326+inlineToParElems (Underline ils) =
327+ local (\r -> r{envRunProps = (envRunProps r){rPropUnderline=True}}) $
328+ inlinesToParElems ils
326inlineToParElems (Strong ils) =
329inlineToParElems (Strong ils) =
327 local (\r -> r{envRunProps = (envRunProps r){rPropBold=True}}) $
330 local (\r -> r{envRunProps = (envRunProps r){rPropBold=True}}) $
328 inlinesToParElems ils
331 inlinesToParElems ils
src/Text/Pandoc/Writers/RST.hs+7
@@ -415,6 +415,7 @@ transformInlines = insertBS .
415 hasContents :: Inline -> Bool
415 hasContents :: Inline -> Bool
416 hasContents (Str "") = False
416 hasContents (Str "") = False
417 hasContents (Emph []) = False
417 hasContents (Emph []) = False
418+ hasContents (Underline []) = False
418 hasContents (Strong []) = False
419 hasContents (Strong []) = False
419 hasContents (Strikeout []) = False
420 hasContents (Strikeout []) = False
420 hasContents (Superscript []) = False
421 hasContents (Superscript []) = False
@@ -474,6 +475,7 @@ transformInlines = insertBS .
474 okBeforeComplex _ = False
475 okBeforeComplex _ = False
475 isComplex :: Inline -> Bool
476 isComplex :: Inline -> Bool
476 isComplex (Emph _) = True
477 isComplex (Emph _) = True
478+ isComplex (Underline _) = True
477 isComplex (Strong _) = True
479 isComplex (Strong _) = True
478 isComplex (SmallCaps _) = True
480 isComplex (SmallCaps _) = True
479 isComplex (Strikeout _) = True
481 isComplex (Strikeout _) = True
@@ -538,6 +540,7 @@ mapNested f i = setInlineChildren i (f (dropInlineParent i))
538dropInlineParent :: Inline -> [Inline]
540dropInlineParent :: Inline -> [Inline]
539dropInlineParent (Link _ i _) = i
541dropInlineParent (Link _ i _) = i
540dropInlineParent (Emph i) = i
542dropInlineParent (Emph i) = i
543+dropInlineParent (Underline i) = i
541dropInlineParent (Strong i) = i
544dropInlineParent (Strong i) = i
542dropInlineParent (Strikeout i) = i
545dropInlineParent (Strikeout i) = i
543dropInlineParent (Superscript i) = i
546dropInlineParent (Superscript i) = i
@@ -552,6 +555,7 @@ dropInlineParent i = [i] -- not a parent, like Str or Space
552setInlineChildren :: Inline -> [Inline] -> Inline
555setInlineChildren :: Inline -> [Inline] -> Inline
553setInlineChildren (Link a _ t) i = Link a i t
556setInlineChildren (Link a _ t) i = Link a i t
554setInlineChildren (Emph _) i = Emph i
557setInlineChildren (Emph _) i = Emph i
558+setInlineChildren (Underline _) i = Underline i
555setInlineChildren (Strong _) i = Strong i
559setInlineChildren (Strong _) i = Strong i
556setInlineChildren (Strikeout _) i = Strikeout i
560setInlineChildren (Strikeout _) i = Strikeout i
557setInlineChildren (Superscript _) i = Superscript i
561setInlineChildren (Superscript _) i = Superscript i
@@ -582,6 +586,9 @@ inlineToRST (Span (_,_,kvs) ils) = do
582inlineToRST (Emph lst) = do
586inlineToRST (Emph lst) = do
583 contents <- writeInlines lst
587 contents <- writeInlines lst
584 return $ "*" <> contents <> "*"
588 return $ "*" <> contents <> "*"
589+-- Underline is not supported, fall back to Emph
590+inlineToRST (Underline lst) =
591+ inlineToRST (Emph lst)
585inlineToRST (Strong lst) = do
592inlineToRST (Strong lst) = do
586 contents <- writeInlines lst
593 contents <- writeInlines lst
587 return $ "**" <> contents <> "**"
594 return $ "**" <> contents <> "**"
src/Text/Pandoc/Writers/RTF.hs+3
@@ -351,6 +351,9 @@ inlineToRTF (Span _ lst) = inlinesToRTF lst
351inlineToRTF (Emph lst) = do
351inlineToRTF (Emph lst) = do
352 contents <- inlinesToRTF lst
352 contents <- inlinesToRTF lst
353 return $ "{\\i " <> contents <> "}"
353 return $ "{\\i " <> contents <> "}"
354+inlineToRTF (Underline lst) = do
355+ contents <- inlinesToRTF lst
356+ return $ "{\\pnul " <> contents <> "}"
354inlineToRTF (Strong lst) = do
357inlineToRTF (Strong lst) = do
355 contents <- inlinesToRTF lst
358 contents <- inlinesToRTF lst
356 return $ "{\\b " <> contents <> "}"
359 return $ "{\\b " <> contents <> "}"
src/Text/Pandoc/Writers/TEI.hs+2
@@ -231,6 +231,8 @@ inlineToTEI :: PandocMonad m => WriterOptions -> Inline -> m (Doc Text)
231inlineToTEI _ (Str str) = return $ literal $ escapeStringForXML str
231inlineToTEI _ (Str str) = return $ literal $ escapeStringForXML str
232inlineToTEI opts (Emph lst) =
232inlineToTEI opts (Emph lst) =
233 inTags False "hi" [("rendition","simple:italic")] <$> inlinesToTEI opts lst
233 inTags False "hi" [("rendition","simple:italic")] <$> inlinesToTEI opts lst
234+inlineToTEI opts (Underline lst) =
235+ inTags False "hi" [("rendition","simple:underline")] <$> inlinesToTEI opts lst
234inlineToTEI opts (Strong lst) =
236inlineToTEI opts (Strong lst) =
235 inTags False "hi" [("rendition", "simple:bold")] <$> inlinesToTEI opts lst
237 inTags False "hi" [("rendition", "simple:bold")] <$> inlinesToTEI opts lst
236inlineToTEI opts (Strikeout lst) =
238inlineToTEI opts (Strikeout lst) =
src/Text/Pandoc/Writers/Texinfo.hs+4
@@ -392,6 +392,10 @@ inlineToTexinfo (Span _ lst) =
392inlineToTexinfo (Emph lst) =
392inlineToTexinfo (Emph lst) =
393 inCmd "emph" <$> inlineListToTexinfo lst
393 inCmd "emph" <$> inlineListToTexinfo lst
394
394
395+-- Underline isn't supported, fall back to Emph
396+inlineToTexinfo (Underline lst) =
397+ inlineToTexinfo (Emph lst)
398+
395inlineToTexinfo (Strong lst) =
399inlineToTexinfo (Strong lst) =
396 inCmd "strong" <$> inlineListToTexinfo lst
400 inCmd "strong" <$> inlineListToTexinfo lst
397
401
src/Text/Pandoc/Writers/Textile.hs+6
@@ -386,6 +386,12 @@ inlineToTextile opts (Emph lst) = do
386 then "<em>" <> contents <> "</em>"
386 then "<em>" <> contents <> "</em>"
387 else "_" <> contents <> "_"
387 else "_" <> contents <> "_"
388
388
389+inlineToTextile opts (Underline lst) = do
390+ contents <- inlineListToTextile opts lst
391+ return $ if '+' `elemText` contents
392+ then "<u>" <> contents <> "</u>"
393+ else "+" <> contents <> "+"
394+
389inlineToTextile opts (Strong lst) = do
395inlineToTextile opts (Strong lst) = do
390 contents <- inlineListToTextile opts lst
396 contents <- inlineListToTextile opts lst
391 return $ if '*' `elemText` contents
397 return $ if '*' `elemText` contents
src/Text/Pandoc/Writers/XWiki.hs+4
@@ -163,6 +163,10 @@ inlineToXWiki (Emph lst) = do
163 contents <- inlineListToXWiki lst
163 contents <- inlineListToXWiki lst
164 return $ "//" <> contents <> "//"
164 return $ "//" <> contents <> "//"
165
165
166+inlineToXWiki (Underline lst) = do
167+ contents <- inlineListToXWiki lst
168+ return $ "__" <> contents <> "__"
169+
166inlineToXWiki (Strong lst) = do
170inlineToXWiki (Strong lst) = do
167 contents <- inlineListToXWiki lst
171 contents <- inlineListToXWiki lst
168 return $ "**" <> contents <> "**"
172 return $ "**" <> contents <> "**"
src/Text/Pandoc/Writers/ZimWiki.hs+4
@@ -273,6 +273,10 @@ inlineToZimWiki opts (Emph lst) = do
273 contents <- inlineListToZimWiki opts lst
273 contents <- inlineListToZimWiki opts lst
274 return $ "//" <> contents <> "//"
274 return $ "//" <> contents <> "//"
275
275
276+inlineToZimWiki opts (Underline lst) = do
277+ contents <- inlineListToZimWiki opts lst
278+ return $ "__" <> contents <> "__"
279+
276inlineToZimWiki opts (Strong lst) = do
280inlineToZimWiki opts (Strong lst) = do
277 contents <- inlineListToZimWiki opts lst
281 contents <- inlineListToZimWiki opts lst
278 return $ "**" <> contents <> "**"
282 return $ "**" <> contents <> "**"
test/Tests/Readers/DokuWiki.hs+2−3
@@ -22,7 +22,6 @@ import Tests.Helpers
22import Text.Pandoc
22import Text.Pandoc
23import Text.Pandoc.Arbitrary ()
23import Text.Pandoc.Arbitrary ()
24import Text.Pandoc.Builder
24import Text.Pandoc.Builder
25−import Text.Pandoc.Shared (underlineSpan)
26
25
27dokuwiki :: Text -> Pandoc
26dokuwiki :: Text -> Pandoc
28dokuwiki = purely $ readDokuWiki def{ readerStandalone = True }
27dokuwiki = purely $ readDokuWiki def{ readerStandalone = True }
@@ -42,7 +41,7 @@ tests = [ testGroup "inlines"
42 para (emph "italic")
41 para (emph "italic")
43 , "Underlined" =:
42 , "Underlined" =:
44 "__underlined__" =?>
43 "__underlined__" =?>
45− para (underlineSpan "underlined")
44+ para (underline "underlined")
46 , "Monospaced" =:
45 , "Monospaced" =:
47 "''monospaced''" =?>
46 "''monospaced''" =?>
48 para (code "monospaced")
47 para (code "monospaced")
@@ -51,7 +50,7 @@ tests = [ testGroup "inlines"
51 para (code "monospaced")
50 para (code "monospaced")
52 , "Combined" =:
51 , "Combined" =:
53 "**__//''combine''//__**" =?>
52 "**__//''combine''//__**" =?>
54− para (strong $ underlineSpan $ emph $ code "combine")
53+ para (strong $ underline $ emph $ code "combine")
55 , "Nowiki" =:
54 , "Nowiki" =:
56 T.unlines [ "<nowiki>"
55 T.unlines [ "<nowiki>"
57 , "This is some text which contains addresses like this: http://www.splitbrain.org and **formatting**, but nothing is done with it."
56 , "This is some text which contains addresses like this: http://www.splitbrain.org and **formatting**, but nothing is done with it."
test/Tests/Readers/Muse.hs+1−2
@@ -25,7 +25,6 @@ import Tests.Helpers
25import Text.Pandoc
25import Text.Pandoc
26import Text.Pandoc.Arbitrary ()
26import Text.Pandoc.Arbitrary ()
27import Text.Pandoc.Builder
27import Text.Pandoc.Builder
28−import Text.Pandoc.Shared (underlineSpan)
29import Text.Pandoc.Writers.Shared (toLegacyTable)
28import Text.Pandoc.Writers.Shared (toLegacyTable)
30import Text.Pandoc.Walk
29import Text.Pandoc.Walk
31
30
@@ -209,7 +208,7 @@ tests =
209 para (strong . emph $ "foo******bar")
208 para (strong . emph $ "foo******bar")
210
209
211 , test emacsMuse "Underline"
210 , test emacsMuse "Underline"
212− ("_Underline_" =?> para (underlineSpan "Underline"))
211+ ("_Underline_" =?> para (underline "Underline"))
213
212
214 , "Superscript tag" =: "<sup>Superscript</sup>" =?> para (superscript "Superscript")
213 , "Superscript tag" =: "<sup>Superscript</sup>" =?> para (superscript "Superscript")
215
214
test/Tests/Readers/Org/Inline.hs+1−2
@@ -19,7 +19,6 @@ import Test.Tasty (TestTree, testGroup)
19import Tests.Helpers ((=?>))
19import Tests.Helpers ((=?>))
20import Tests.Readers.Org.Shared ((=:), spcSep)
20import Tests.Readers.Org.Shared ((=:), spcSep)
21import Text.Pandoc.Builder
21import Text.Pandoc.Builder
22−import Text.Pandoc.Shared (underlineSpan)
23import qualified Data.Text as T
22import qualified Data.Text as T
24import qualified Tests.Readers.Org.Inline.Citation as Citation
23import qualified Tests.Readers.Org.Inline.Citation as Citation
25import qualified Tests.Readers.Org.Inline.Note as Note
24import qualified Tests.Readers.Org.Inline.Note as Note
@@ -49,7 +48,7 @@ tests =
49
48
50 , "Underline" =:
49 , "Underline" =:
51 "_underline_" =?>
50 "_underline_" =?>
52− para (underlineSpan "underline")
51+ para (underline "underline")
53
52
54 , "Strikeout" =:
53 , "Strikeout" =:
55 "+Kill Bill+" =?>
54 "+Kill Bill+" =?>
test/Tests/Readers/Txt2Tags.hs+2−3
@@ -23,7 +23,6 @@ import Tests.Helpers
23import Text.Pandoc
23import Text.Pandoc
24import Text.Pandoc.Arbitrary ()
24import Text.Pandoc.Arbitrary ()
25import Text.Pandoc.Builder
25import Text.Pandoc.Builder
26−import Text.Pandoc.Shared (underlineSpan)
27
26
28t2t :: Text -> Pandoc
27t2t :: Text -> Pandoc
29-- t2t = handleError . readTxt2Tags (T2TMeta "date" "mtime" "in" "out") def
28-- t2t = handleError . readTxt2Tags (T2TMeta "date" "mtime" "in" "out") def
@@ -94,12 +93,12 @@ tests =
94
93
95 , "Inline markup is greedy" =:
94 , "Inline markup is greedy" =:
96 "***** ///// _____ ----- ````` \"\"\"\"\" '''''" =?>
95 "***** ///// _____ ----- ````` \"\"\"\"\" '''''" =?>
97− para (spcSep [strong "*", emph "/", underlineSpan "_"
96+ para (spcSep [strong "*", emph "/", underline "_"
98 , strikeout "-", code "`", text "\""
97 , strikeout "-", code "`", text "\""
99 , rawInline "html" "'"])
98 , rawInline "html" "'"])
100 , "Markup must be greedy" =:
99 , "Markup must be greedy" =:
101 "********** ////////// __________ ---------- `````````` \"\"\"\"\"\"\"\"\"\" ''''''''''" =?>
100 "********** ////////// __________ ---------- `````````` \"\"\"\"\"\"\"\"\"\" ''''''''''" =?>
102− para (spcSep [strong "******", emph "//////", underlineSpan "______"
101+ para (spcSep [strong "******", emph "//////", underline "______"
103 , strikeout "------", code "``````", text "\"\"\"\"\"\""
102 , strikeout "------", code "``````", text "\"\"\"\"\"\""
104 , rawInline "html" "''''''"])
103 , rawInline "html" "''''''"])
105 , "Inlines must be glued" =:
104 , "Inlines must be glued" =:
test/docx/alternate_document_path.native+2−1
@@ -1,2 +1,3 @@
1+Pandoc (Meta {unMeta = fromList []})
1[Header 1 ("test",[],[]) [Str "Test"]
2[Header 1 ("test",[],[]) [Str "Test"]
2−,Para [Str "This",Space,Str "is",Space,Emph [Str "italic"],Str ",",Space,Strong [Str "bold"],Str ",",Space,Span ("",["underline"],[]) [Str "underlined"],Str ",",Space,Emph [Span ("",["underline"],[]) [Str "italic",Space,Str "underlined"]],Str ",",Space,Strong [Span ("",["underline"],[]) [Str "bold",Space,Str "underlined"]],Str ",",Space,Emph [Strong [Span ("",["underline"],[]) [Str "bold",Space,Str "italic",Space,Str "underlined"]]],Str "."]]
3+,Para [Str "This",Space,Str "is",Space,Emph [Str "italic"],Str ",",Space,Strong [Str "bold"],Str ",",Space,Underline [Str "underlined"],Str ",",Space,Emph [Underline [Str "italic",Space,Str "underlined"]],Str ",",Space,Strong [Underline [Str "bold",Space,Str "underlined"]],Str ",",Space,Emph [Strong [Underline [Str "bold",Space,Str "italic",Space,Str "underlined"]]],Str "."]]
test/docx/golden/inline_formatting.docx

Binary file not shown.

test/docx/inline_formatting.native+2−1
@@ -1,5 +1,6 @@
1+Pandoc (Meta {unMeta = fromList []})
1[Para [Str "Regular",Space,Str "text",Space,Emph [Str "italics"],Space,Strong [Str "bold",Space,Emph [Str "bold",Space,Str "italics"]],Str "."]
2[Para [Str "Regular",Space,Str "text",Space,Emph [Str "italics"],Space,Strong [Str "bold",Space,Emph [Str "bold",Space,Str "italics"]],Str "."]
2,Para [Str "This",Space,Str "is",Space,SmallCaps [Str "Small",Space,Str "Caps"],Str ",",Space,Str "and",Space,Str "this",Space,Str "is",Space,Strikeout [Str "strikethrough"],Str "."]
3,Para [Str "This",Space,Str "is",Space,SmallCaps [Str "Small",Space,Str "Caps"],Str ",",Space,Str "and",Space,Str "this",Space,Str "is",Space,Strikeout [Str "strikethrough"],Str "."]
3−,Para [Str "Some",Space,Str "people",Space,Str "use",Space,Span ("",["underline"],[]) [Str "single",Space,Str "underlines",Space,Str "for",Space,Emph [Str "emphasis"]],Str "."]
4+,Para [Str "Some",Space,Str "people",Space,Str "use",Space,Underline [Str "single",Space,Str "underlines",Space,Str "for",Space],Emph [Underline [Str "emphasis"]],Str "."]
4,Para [Str "Above",Space,Str "the",Space,Str "line",Space,Str "is",Space,Superscript [Str "superscript"],Space,Str "and",Space,Str "below",Space,Str "the",Space,Str "line",Space,Str "is",Space,Subscript [Str "subscript"],Str "."]
5,Para [Str "Above",Space,Str "the",Space,Str "line",Space,Str "is",Space,Superscript [Str "superscript"],Space,Str "and",Space,Str "below",Space,Str "the",Space,Str "line",Space,Str "is",Space,Subscript [Str "subscript"],Str "."]
5,Para [Str "A",Space,Str "line",LineBreak,Str "break."]]
6,Para [Str "A",Space,Str "line",LineBreak,Str "break."]]
test/html-reader.native+1−1
@@ -211,7 +211,7 @@ Pandoc (Meta {unMeta = fromList [("generator",MetaInlines [Str "pandoc"]),("titl
211,Para [Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word."]
211,Para [Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word."]
212,Para [Str "This",Space,Str "is",Space,Str "code:",Space,Code ("",[],[]) ">",Str ",",Space,Code ("",[],[]) "$",Str ",",Space,Code ("",[],[]) "\\",Str ",",Space,Code ("",[],[]) "\\$",Str ",",Space,Code ("",[],[]) "<html>",Str "."]
212,Para [Str "This",Space,Str "is",Space,Str "code:",Space,Code ("",[],[]) ">",Str ",",Space,Code ("",[],[]) "$",Str ",",Space,Code ("",[],[]) "\\",Str ",",Space,Code ("",[],[]) "\\$",Str ",",Space,Code ("",[],[]) "<html>",Str "."]
213,Para [Str "This",Space,Str "is",Space,SmallCaps [Str "small",Space,Str "caps"],Str "."]
213,Para [Str "This",Space,Str "is",Space,SmallCaps [Str "small",Space,Str "caps"],Str "."]
214−,Para [Str "These",Space,Str "are",Space,Str "all",Space,Str "underlined:",Space,Span ("",["underline"],[]) [Str "foo"],Space,Str "and",Space,Span ("",["underline"],[]) [Str "bar"],Str "."]
214+,Para [Str "These",Space,Str "are",Space,Str "all",Space,Str "underlined:",Space,Underline [Str "foo"],Space,Str "and",Space,Underline [Str "bar"],Str "."]
215,Para [Str "These",Space,Str "are",Space,Str "all",Space,Str "strikethrough:",Space,Strikeout [Str "foo"],Str ",",Space,Strikeout [Str "bar"],Str ",",Space,Str "and",Space,Strikeout [Str "baz"],Str "."]
215,Para [Str "These",Space,Str "are",Space,Str "all",Space,Str "strikethrough:",Space,Strikeout [Str "foo"],Str ",",Space,Strikeout [Str "bar"],Str ",",Space,Str "and",Space,Strikeout [Str "baz"],Str "."]
216,HorizontalRule
216,HorizontalRule
217,Header 1 ("smart-quotes-ellipses-dashes",[],[]) [Str "Smart",Space,Str "quotes,",Space,Str "ellipses,",Space,Str "dashes"]
217,Header 1 ("smart-quotes-ellipses-dashes",[],[]) [Str "Smart",Space,Str "quotes,",Space,Str "ellipses,",Space,Str "dashes"]
test/textile-reader.native+1−1
@@ -86,7 +86,7 @@ Pandoc (Meta {unMeta = fromList []})
86 ,([Str "beer"],
86 ,([Str "beer"],
87 [[Plain [Str "fresh",Space,Str "and",Space,Str "bitter"]]])]
87 [[Plain [Str "fresh",Space,Str "and",Space,Str "bitter"]]])]
88,Header 1 ("inline-markup",[],[]) [Str "Inline",Space,Str "Markup"]
88,Header 1 ("inline-markup",[],[]) [Str "Inline",Space,Str "Markup"]
89−,Para [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ",",Space,Str "and",Space,Str "so",Space,Emph [Str "is",Space,Str "this"],Str ".",LineBreak,Str "This",Space,Str "is",Space,Strong [Str "strong"],Str ",",Space,Str "and",Space,Str "so",Space,Strong [Str "is",Space,Str "this"],Str ".",LineBreak,Str "This",Space,Str "is",Space,Span ("",["underline"],[]) [Str "inserted"],Str ",",Space,Str "and",Space,Str "this",Space,Str "is",Space,Strikeout [Str "deleted"],Str ".",LineBreak,Str "Hyphenated-words-are-ok,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "strange_underscore_notation.",LineBreak,Str "A",Space,Link ("",[],[]) [Strong [Str "strong",Space,Str "link"]] ("http://www.foobar.com",""),Str "."]
89+,Para [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ",",Space,Str "and",Space,Str "so",Space,Emph [Str "is",Space,Str "this"],Str ".",LineBreak,Str "This",Space,Str "is",Space,Strong [Str "strong"],Str ",",Space,Str "and",Space,Str "so",Space,Strong [Str "is",Space,Str "this"],Str ".",LineBreak,Str "This",Space,Str "is",Space,Underline [Str "inserted"],Str ",",Space,Str "and",Space,Str "this",Space,Str "is",Space,Strikeout [Str "deleted"],Str ".",LineBreak,Str "Hyphenated-words-are-ok,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "strange_underscore_notation.",LineBreak,Str "A",Space,Link ("",[],[]) [Strong [Str "strong",Space,Str "link"]] ("http://www.foobar.com",""),Str "."]
90,Para [Emph [Strong [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em."]],LineBreak,Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word",Space,Str "and",Space,Emph [Strong [Str "that",Space,Str "one"]],Str ".",LineBreak,Strikeout [Str "This",Space,Str "is",Space,Str "strikeout",Space,Str "and",Space,Strong [Str "strong"]]]
90,Para [Emph [Strong [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em."]],LineBreak,Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word",Space,Str "and",Space,Emph [Strong [Str "that",Space,Str "one"]],Str ".",LineBreak,Strikeout [Str "This",Space,Str "is",Space,Str "strikeout",Space,Str "and",Space,Strong [Str "strong"]]]
91,Para [Str "Superscripts:",Space,Str "a",Superscript [Str "bc"],Str "d",Space,Str "a",Space,Superscript [Strong [Str "hello"]],Space,Str "a",Superscript [Str "hello",Space,Str "there"],Str ".",LineBreak,Str "Subscripts:",Space,Subscript [Str "here"],Space,Str "H",Space,Subscript [Str "2"],Str "O,",Space,Str "H",Space,Subscript [Str "23"],Str "O,",Space,Str "H",Space,Subscript [Str "many",Space,Str "of",Space,Str "them"],Str "O."]
91,Para [Str "Superscripts:",Space,Str "a",Superscript [Str "bc"],Str "d",Space,Str "a",Space,Superscript [Strong [Str "hello"]],Space,Str "a",Superscript [Str "hello",Space,Str "there"],Str ".",LineBreak,Str "Subscripts:",Space,Subscript [Str "here"],Space,Str "H",Space,Subscript [Str "2"],Str "O,",Space,Str "H",Space,Subscript [Str "23"],Str "O,",Space,Str "H",Space,Subscript [Str "many",Space,Str "of",Space,Str "them"],Str "O."]
92,Para [Str "Dashes",Space,Str ":",Space,Str "How",Space,Str "cool",Space,Str "\8212",Space,Str "automatic",Space,Str "dashes."]
92,Para [Str "Dashes",Space,Str ":",Space,Str "How",Space,Str "cool",Space,Str "\8212",Space,Str "automatic",Space,Str "dashes."]
test/txt2tags.native+2−2
@@ -29,8 +29,8 @@ Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "author"]]
29,Para [Strikeout [Str "-------+--------"]]
29,Para [Strikeout [Str "-------+--------"]]
30,Para [Str "(",Space,Strikeout [Str "----------------"],Space,Str ")"]
30,Para [Str "(",Space,Strikeout [Str "----------------"],Space,Str ")"]
31,Header 1 ("inline",[],[]) [Str "Inline"]
31,Header 1 ("inline",[],[]) [Str "Inline"]
32−,Para [Str "i)",Space,Strong [Str "b"],Space,Emph [Str "i"],Space,Span ("",["underline"],[]) [Str "u"],Space,Strikeout [Str "s"],Space,Code ("",[],[]) "m",Space,Str "r",Space,RawInline (Format "html") "t",SoftBreak,Str "i)",Space,Strong [Str "bo"],Space,Emph [Str "it"],Space,Span ("",["underline"],[]) [Str "un"],Space,Strikeout [Str "st"],Space,Code ("",[],[]) "mo",Space,Str "ra",Space,RawInline (Format "html") "tg",SoftBreak,Str "i)",Space,Strong [Str "bold"],Space,Emph [Str "ital"],Space,Span ("",["underline"],[]) [Str "undr"],Space,Strikeout [Str "strk"],Space,Code ("",[],[]) "mono",Space,Str "raw",Space,RawInline (Format "html") "tggd",SoftBreak,Str "i)",Space,Strong [Str "bo",Space,Str "ld"],Space,Emph [Str "it",Space,Str "al"],Space,Span ("",["underline"],[]) [Str "un",Space,Str "dr"],Space,Strikeout [Str "st",Space,Str "rk"],Space,Code ("",[],[]) "mo no",Space,Str "r",Space,Str "aw",Space,RawInline (Format "html") "tg gd",SoftBreak,Str "i)",Space,Strong [Str "bo",Space,Str "*",Space,Str "ld"],Space,Emph [Str "it",Space,Str "/",Space,Str "al"],Space,Span ("",["underline"],[]) [Str "un",Space,Str "_",Space,Str "dr"],Space,Strikeout [Str "st",Space,Str "-",Space,Str "rk"],Space,Code ("",[],[]) "mo ` no",Space,Str "r",Space,Str "\"",Space,Str "aw",Space,RawInline (Format "html") "tg ' gd",SoftBreak,Str "i)",Space,Strong [Str "bo",Space,Str "**ld"],Space,Emph [Str "it",Space,Str "//al"],Space,Span ("",["underline"],[]) [Str "un",Space,Str "__dr"],Space,Strikeout [Str "st",Space,Str "--rk"],Space,Code ("",[],[]) "mo ``no",Space,Str "r",Space,Str "\"\"aw",Space,RawInline (Format "html") "tg ''gd",SoftBreak,Str "i)",Space,Strong [Str "bo",Space,Str "**",Space,Str "ld"],Space,Emph [Str "it",Space,Str "//",Space,Str "al"],Space,Span ("",["underline"],[]) [Str "un",Space,Str "__",Space,Str "dr"],Space,Strikeout [Str "st",Space,Str "--",Space,Str "rk"],Space,Code ("",[],[]) "mo `` no",Space,Str "r",Space,Str "\"\"",Space,Str "aw",Space,RawInline (Format "html") "tg '' gd",SoftBreak,Str "i)",Space,Strong [Str "**bold**"],Space,Emph [Str "//ital//"],Space,Span ("",["underline"],[]) [Str "__undr__"],Space,Strikeout [Str "--strk--"],Space,Code ("",[],[]) "``mono``",Space,Str "\"\"raw\"\"",Space,RawInline (Format "html") "''tggd''",SoftBreak,Str "i)",Space,Strong [Str "*bold*"],Space,Emph [Str "/ital/"],Space,Span ("",["underline"],[]) [Str "_undr_"],Space,Strikeout [Str "-strk-"],Space,Code ("",[],[]) "`mono`",Space,Str "\"raw\"",Space,RawInline (Format "html") "'tggd'"]
32+,Para [Str "i)",Space,Strong [Str "b"],Space,Emph [Str "i"],Space,Underline [Str "u"],Space,Strikeout [Str "s"],Space,Code ("",[],[]) "m",Space,Str "r",Space,RawInline (Format "html") "t",SoftBreak,Str "i)",Space,Strong [Str "bo"],Space,Emph [Str "it"],Space,Underline [Str "un"],Space,Strikeout [Str "st"],Space,Code ("",[],[]) "mo",Space,Str "ra",Space,RawInline (Format "html") "tg",SoftBreak,Str "i)",Space,Strong [Str "bold"],Space,Emph [Str "ital"],Space,Underline [Str "undr"],Space,Strikeout [Str "strk"],Space,Code ("",[],[]) "mono",Space,Str "raw",Space,RawInline (Format "html") "tggd",SoftBreak,Str "i)",Space,Strong [Str "bo",Space,Str "ld"],Space,Emph [Str "it",Space,Str "al"],Space,Underline [Str "un",Space,Str "dr"],Space,Strikeout [Str "st",Space,Str "rk"],Space,Code ("",[],[]) "mo no",Space,Str "r",Space,Str "aw",Space,RawInline (Format "html") "tg gd",SoftBreak,Str "i)",Space,Strong [Str "bo",Space,Str "*",Space,Str "ld"],Space,Emph [Str "it",Space,Str "/",Space,Str "al"],Space,Underline [Str "un",Space,Str "_",Space,Str "dr"],Space,Strikeout [Str "st",Space,Str "-",Space,Str "rk"],Space,Code ("",[],[]) "mo ` no",Space,Str "r",Space,Str "\"",Space,Str "aw",Space,RawInline (Format "html") "tg ' gd",SoftBreak,Str "i)",Space,Strong [Str "bo",Space,Str "**ld"],Space,Emph [Str "it",Space,Str "//al"],Space,Underline [Str "un",Space,Str "__dr"],Space,Strikeout [Str "st",Space,Str "--rk"],Space,Code ("",[],[]) "mo ``no",Space,Str "r",Space,Str "\"\"aw",Space,RawInline (Format "html") "tg ''gd",SoftBreak,Str "i)",Space,Strong [Str "bo",Space,Str "**",Space,Str "ld"],Space,Emph [Str "it",Space,Str "//",Space,Str "al"],Space,Underline [Str "un",Space,Str "__",Space,Str "dr"],Space,Strikeout [Str "st",Space,Str "--",Space,Str "rk"],Space,Code ("",[],[]) "mo `` no",Space,Str "r",Space,Str "\"\"",Space,Str "aw",Space,RawInline (Format "html") "tg '' gd",SoftBreak,Str "i)",Space,Strong [Str "**bold**"],Space,Emph [Str "//ital//"],Space,Underline [Str "__undr__"],Space,Strikeout [Str "--strk--"],Space,Code ("",[],[]) "``mono``",Space,Str "\"\"raw\"\"",Space,RawInline (Format "html") "''tggd''",SoftBreak,Str "i)",Space,Strong [Str "*bold*"],Space,Emph [Str "/ital/"],Space,Underline [Str "_undr_"],Space,Strikeout [Str "-strk-"],Space,Code ("",[],[]) "`mono`",Space,Str "\"raw\"",Space,RawInline (Format "html") "'tggd'"]
33−,Para [Str "i)",Space,Strong [Str "*"],Space,Emph [Str "/"],Space,Span ("",["underline"],[]) [Str "_"],Space,Strikeout [Str "-"],Space,Code ("",[],[]) "`",Space,Str "\"",Space,RawInline (Format "html") "'",SoftBreak,Str "i)",Space,Strong [Str "**"],Space,Emph [Str "//"],Space,Span ("",["underline"],[]) [Str "__"],Space,Strikeout [Str "--"],Space,Code ("",[],[]) "``",Space,Str "\"\"",Space,RawInline (Format "html") "''",SoftBreak,Str "i)",Space,Strong [Str "***"],Space,Emph [Str "///"],Space,Span ("",["underline"],[]) [Str "___"],Space,Strikeout [Str "---"],Space,Code ("",[],[]) "```",Space,Str "\"\"\"",Space,RawInline (Format "html") "'''",SoftBreak,Str "i)",Space,Strong [Str "****"],Space,Emph [Str "////"],Space,Span ("",["underline"],[]) [Str "____"],Space,Strikeout [Str "----"],Space,Code ("",[],[]) "````",Space,Str "\"\"\"\"",Space,RawInline (Format "html") "''''",SoftBreak,Str "i)",Space,Strong [Str "*****"],Space,Emph [Str "/////"],Space,Span ("",["underline"],[]) [Str "_____"],Space,Strikeout [Str "-----"],Space,Code ("",[],[]) "`````",Space,Str "\"\"\"\"\"",Space,RawInline (Format "html") "'''''",SoftBreak,Str "i)",Space,Strong [Str "******"],Space,Emph [Str "//////"],Space,Span ("",["underline"],[]) [Str "______"],Space,Strikeout [Str "------"],Space,Code ("",[],[]) "``````",Space,Str "\"\"\"\"\"\"",Space,RawInline (Format "html") "''''''"]
33+,Para [Str "i)",Space,Strong [Str "*"],Space,Emph [Str "/"],Space,Underline [Str "_"],Space,Strikeout [Str "-"],Space,Code ("",[],[]) "`",Space,Str "\"",Space,RawInline (Format "html") "'",SoftBreak,Str "i)",Space,Strong [Str "**"],Space,Emph [Str "//"],Space,Underline [Str "__"],Space,Strikeout [Str "--"],Space,Code ("",[],[]) "``",Space,Str "\"\"",Space,RawInline (Format "html") "''",SoftBreak,Str "i)",Space,Strong [Str "***"],Space,Emph [Str "///"],Space,Underline [Str "___"],Space,Strikeout [Str "---"],Space,Code ("",[],[]) "```",Space,Str "\"\"\"",Space,RawInline (Format "html") "'''",SoftBreak,Str "i)",Space,Strong [Str "****"],Space,Emph [Str "////"],Space,Underline [Str "____"],Space,Strikeout [Str "----"],Space,Code ("",[],[]) "````",Space,Str "\"\"\"\"",Space,RawInline (Format "html") "''''",SoftBreak,Str "i)",Space,Strong [Str "*****"],Space,Emph [Str "/////"],Space,Underline [Str "_____"],Space,Strikeout [Str "-----"],Space,Code ("",[],[]) "`````",Space,Str "\"\"\"\"\"",Space,RawInline (Format "html") "'''''",SoftBreak,Str "i)",Space,Strong [Str "******"],Space,Emph [Str "//////"],Space,Underline [Str "______"],Space,Strikeout [Str "------"],Space,Code ("",[],[]) "``````",Space,Str "\"\"\"\"\"\"",Space,RawInline (Format "html") "''''''"]
34,Para [Str "i)",Space,Str "****",Space,Str "////",Space,Str "____",Space,Str "----",Space,Str "````",Space,Str "\"\"\"\"",Space,Str "''''",SoftBreak,Str "i)",Space,Str "**",Space,Str "**",Space,Str "//",Space,Str "//",Space,Str "__",Space,Str "__",Space,Str "--",Space,Str "--",Space,Str "``",Space,Str "``",Space,Str "\"\"",Space,Str "\"\"",Space,Str "''",Space,Str "''"]
34,Para [Str "i)",Space,Str "****",Space,Str "////",Space,Str "____",Space,Str "----",Space,Str "````",Space,Str "\"\"\"\"",Space,Str "''''",SoftBreak,Str "i)",Space,Str "**",Space,Str "**",Space,Str "//",Space,Str "//",Space,Str "__",Space,Str "__",Space,Str "--",Space,Str "--",Space,Str "``",Space,Str "``",Space,Str "\"\"",Space,Str "\"\"",Space,Str "''",Space,Str "''"]
35,Para [Str "i)",Space,Str "**",Space,Str "bold**",Space,Str "//",Space,Str "ital//",Space,Str "__",Space,Str "undr__",Space,Str "--",Space,Str "strk--",Space,Str "``",Space,Str "mono``",Space,Str "\"\"",Space,Str "raw\"\"",Space,Str "''",Space,Str "tggd''",SoftBreak,Str "i)",Space,Str "**bold",Space,Str "**",Space,Str "//ital",Space,Str "//",Space,Str "__undr",Space,Str "__",Space,Str "--strk",Space,Str "--",Space,Str "``mono",Space,Str "``",Space,Str "\"\"raw",Space,Str "\"\"",Space,Str "''tggd",Space,Str "''",SoftBreak,Str "i)",Space,Str "**",Space,Str "bold",Space,Str "**",Space,Str "//",Space,Str "ital",Space,Str "//",Space,Str "__",Space,Str "undr",Space,Str "__",Space,Str "--",Space,Str "strk",Space,Str "--",Space,Str "``",Space,Str "mono",Space,Str "``",Space,Str "\"\"",Space,Str "raw",Space,Str "\"\"",Space,Str "''",Space,Str "tggd",Space,Str "''"]
35,Para [Str "i)",Space,Str "**",Space,Str "bold**",Space,Str "//",Space,Str "ital//",Space,Str "__",Space,Str "undr__",Space,Str "--",Space,Str "strk--",Space,Str "``",Space,Str "mono``",Space,Str "\"\"",Space,Str "raw\"\"",Space,Str "''",Space,Str "tggd''",SoftBreak,Str "i)",Space,Str "**bold",Space,Str "**",Space,Str "//ital",Space,Str "//",Space,Str "__undr",Space,Str "__",Space,Str "--strk",Space,Str "--",Space,Str "``mono",Space,Str "``",Space,Str "\"\"raw",Space,Str "\"\"",Space,Str "''tggd",Space,Str "''",SoftBreak,Str "i)",Space,Str "**",Space,Str "bold",Space,Str "**",Space,Str "//",Space,Str "ital",Space,Str "//",Space,Str "__",Space,Str "undr",Space,Str "__",Space,Str "--",Space,Str "strk",Space,Str "--",Space,Str "``",Space,Str "mono",Space,Str "``",Space,Str "\"\"",Space,Str "raw",Space,Str "\"\"",Space,Str "''",Space,Str "tggd",Space,Str "''"]
36,Header 1 ("link",[],[]) [Str "Link"]
36,Header 1 ("link",[],[]) [Str "Link"]