git.iko.soy/typeable/pandoc
on master help sign in
Removed readerSmart and the --smart option; added Ext_smart extension.
6f8b967John MacFarlane
MANUAL.txt+18−27
@@ -394,15 +394,6 @@ Reader options
394 HTML codes and LaTeX environments. (The LaTeX reader does pass through
394 HTML codes and LaTeX environments. (The LaTeX reader does pass through
395 untranslatable LaTeX *commands*, even if `-R` is not specified.)
395 untranslatable LaTeX *commands*, even if `-R` is not specified.)
396
396
397−`-S`, `--smart`
398−
399−: Produce typographically correct output, converting straight quotes
400− to curly quotes, `---` to em-dashes, `--` to en-dashes, and
401− `...` to ellipses. Nonbreaking spaces are inserted after certain
402− abbreviations, such as "Mr." (Note: This option is selected automatically
403− when the output format is `latex` or `context`, unless `--no-tex-ligatures`
404− is used. It has no effect for `latex` input.)
405−
406`--old-dashes`
397`--old-dashes`
407
398
408: Selects the pandoc <= 1.8.2.1 behavior for parsing smart dashes: `-` before
399: Selects the pandoc <= 1.8.2.1 behavior for parsing smart dashes: `-` before
@@ -721,12 +712,12 @@ Options affecting specific writers
721 than parsing ligatures for quotation marks and dashes. In
712 than parsing ligatures for quotation marks and dashes. In
722 writing LaTeX or ConTeXt, print unicode quotation mark and
713 writing LaTeX or ConTeXt, print unicode quotation mark and
723 dash characters literally, rather than converting them to
714 dash characters literally, rather than converting them to
724− the standard ASCII TeX ligatures. Note: normally `--smart`
715+ the standard ASCII TeX ligatures. Note: normally the `smart`
725− is selected automatically for LaTeX and ConTeXt output, but
716+ extension is selected automatically for LaTeX and ConTeXt output,
726− it must be specified explicitly if `--no-tex-ligatures` is
717+ but it must be specified explicitly if `--no-tex-ligatures` is
727 selected. If you use literal curly quotes, dashes, and
718 selected. If you use literal curly quotes, dashes, and
728 ellipses in your source, then you may want to use
719 ellipses in your source, then you may want to use
729− `--no-tex-ligatures` without `--smart`.
720+ `--no-tex-ligatures` without `+smart`.
730
721
731`--listings`
722`--listings`
732
723
@@ -2639,20 +2630,6 @@ two trailing spaces on a line.
2639
2630
2640Backslash escapes do not work in verbatim contexts.
2631Backslash escapes do not work in verbatim contexts.
2641
2632
2642−Smart punctuation
2643−-----------------
2644−
2645−#### Extension ####
2646−
2647−If the `--smart` option is specified, pandoc will produce typographically
2648−correct output, converting straight quotes to curly quotes, `---` to
2649−em-dashes, `--` to en-dashes, and `...` to ellipses. Nonbreaking spaces
2650−are inserted after certain abbreviations, such as "Mr."
2651−
2652−Note: if your LaTeX template or any included header file call for the
2653−[`csquotes`] package, pandoc will detect this automatically and use
2654−`\enquote{...}` for quoted text.
2655−
2656Inline formatting
2633Inline formatting
2657-----------------
2634-----------------
2658
2635
@@ -3410,6 +3387,20 @@ in pandoc, but may be enabled by adding `+EXTENSION` to the format
3410name, where `EXTENSION` is the name of the extension. Thus, for
3387name, where `EXTENSION` is the name of the extension. Thus, for
3411example, `markdown+hard_line_breaks` is Markdown with hard line breaks.
3388example, `markdown+hard_line_breaks` is Markdown with hard line breaks.
3412
3389
3390+#### Extension: `smart` ####
3391+
3392+Produce typographically correct output, converting straight
3393+quotes to curly quotes, `---` to em-dashes, `--` to en-dashes,
3394+and `...` to ellipses. Nonbreaking spaces are inserted after
3395+certain abbreviations, such as "Mr." (Note: This option is
3396+selected automatically when the output format is `latex` or
3397+`context`, unless `--no-tex-ligatures` is used. It has no
3398+effect for `latex` input.)
3399+
3400+Note: if your LaTeX template or any included header file call
3401+for the [`csquotes`] package, pandoc will detect this
3402+automatically and use `\enquote{...}` for quoted text.
3403+
3413#### Extension: `angle_brackets_escapable` ####
3404#### Extension: `angle_brackets_escapable` ####
3414
3405
3415Allow `<` and `>` to be backslash-escaped, as they can be in
3406Allow `<` and `>` to be backslash-escaped, as they can be in
pandoc.hs+10−19
@@ -112,7 +112,6 @@ convertWithOpts opts args = do
112 , optSectionDivs = sectionDivs
112 , optSectionDivs = sectionDivs
113 , optIncremental = incremental
113 , optIncremental = incremental
114 , optSelfContained = selfContained
114 , optSelfContained = selfContained
115− , optSmart = smart
116 , optOldDashes = oldDashes
115 , optOldDashes = oldDashes
117 , optHtml5 = html5
116 , optHtml5 = html5
118 , optHtmlQTags = htmlQTags
117 , optHtmlQTags = htmlQTags
@@ -212,10 +211,6 @@ convertWithOpts opts args = do
212 let conTeXtOutput = format == "context"
211 let conTeXtOutput = format == "context"
213 let html5Output = format == "html5"
212 let html5Output = format == "html5"
214
213
215− let laTeXInput = "latex" `isPrefixOf` readerName' ||
216− "beamer" `isPrefixOf` readerName'
217−
218−
219 -- disabling the custom writer for now
214 -- disabling the custom writer for now
220 writer <- if ".lua" `isSuffixOf` format
215 writer <- if ".lua" `isSuffixOf` format
221 -- note: use non-lowercased version writerName
216 -- note: use non-lowercased version writerName
@@ -295,11 +290,15 @@ convertWithOpts opts args = do
295 uriFragment = "" }
290 uriFragment = "" }
296 _ -> Nothing
291 _ -> Nothing
297
292
298− let readerOpts = def{ readerSmart = if laTeXInput
293+ {- TODO - smart is now an extension, but we should prob make
294+ - texligatures one too...
295+ let smartExt = if laTeXInput
299− then texLigatures
296+ then texLigatures
300− else smart || (texLigatures &&
297+ else smart || (texLigatures &&
301− (laTeXOutput || conTeXtOutput))
298+ (laTeXOutput || conTeXtOutput))
299+ -}
300+
302− , readerStandalone = standalone'
301+ let readerOpts = def{ readerStandalone = standalone'
303 , readerParseRaw = parseRaw
302 , readerParseRaw = parseRaw
304 , readerColumns = columns
303 , readerColumns = columns
305 , readerTabStop = tabStop
304 , readerTabStop = tabStop
@@ -547,7 +546,6 @@ data Opt = Opt
547 , optSectionDivs :: Bool -- ^ Put sections in div tags in HTML
546 , optSectionDivs :: Bool -- ^ Put sections in div tags in HTML
548 , optIncremental :: Bool -- ^ Use incremental lists in Slidy/Slideous/S5
547 , optIncremental :: Bool -- ^ Use incremental lists in Slidy/Slideous/S5
549 , optSelfContained :: Bool -- ^ Make HTML accessible offline
548 , optSelfContained :: Bool -- ^ Make HTML accessible offline
550− , optSmart :: Bool -- ^ Use smart typography
551 , optOldDashes :: Bool -- ^ Parse dashes like pandoc <=1.8.2.1
549 , optOldDashes :: Bool -- ^ Parse dashes like pandoc <=1.8.2.1
552 , optHtml5 :: Bool -- ^ Produce HTML5 in HTML
550 , optHtml5 :: Bool -- ^ Produce HTML5 in HTML
553 , optHtmlQTags :: Bool -- ^ Use <q> tags in HTML
551 , optHtmlQTags :: Bool -- ^ Use <q> tags in HTML
@@ -613,7 +611,6 @@ defaultOpts = Opt
613 , optSectionDivs = False
611 , optSectionDivs = False
614 , optIncremental = False
612 , optIncremental = False
615 , optSelfContained = False
613 , optSelfContained = False
616− , optSmart = False
617 , optOldDashes = False
614 , optOldDashes = False
618 , optHtml5 = False
615 , optHtml5 = False
619 , optHtmlQTags = False
616 , optHtmlQTags = False
@@ -692,15 +689,9 @@ options =
692 (\opt -> return opt { optParseRaw = True }))
689 (\opt -> return opt { optParseRaw = True }))
693 "" -- "Parse untranslatable HTML codes and LaTeX environments as raw"
690 "" -- "Parse untranslatable HTML codes and LaTeX environments as raw"
694
691
695− , Option "S" ["smart"]
696− (NoArg
697− (\opt -> return opt { optSmart = True }))
698− "" -- "Use smart quotes, dashes, and ellipses"
699−
700 , Option "" ["old-dashes"]
692 , Option "" ["old-dashes"]
701 (NoArg
693 (NoArg
702− (\opt -> return opt { optSmart = True
703− , optOldDashes = True }))
694+ (\opt -> return opt { optOldDashes = True }))
704 "" -- "Use smart quotes, dashes, and ellipses"
695 "" -- "Use smart quotes, dashes, and ellipses"
705
696
706 , Option "" ["base-header-level"]
697 , Option "" ["base-header-level"]
src/Text/Pandoc.hs+8−1
@@ -336,7 +336,8 @@ getDefaultExtensions "markdown_github" = githubMarkdownExtensions
336getDefaultExtensions "markdown" = pandocExtensions
336getDefaultExtensions "markdown" = pandocExtensions
337getDefaultExtensions "plain" = plainExtensions
337getDefaultExtensions "plain" = plainExtensions
338getDefaultExtensions "org" = extensionsFromList
338getDefaultExtensions "org" = extensionsFromList
339+ [Ext_citations,
339− [Ext_citations, Ext_auto_identifiers]
340+ Ext_auto_identifiers]
340getDefaultExtensions "textile" = extensionsFromList
341getDefaultExtensions "textile" = extensionsFromList
341 [Ext_auto_identifiers]
342 [Ext_auto_identifiers]
342getDefaultExtensions "html" = extensionsFromList
343getDefaultExtensions "html" = extensionsFromList
@@ -349,6 +350,12 @@ getDefaultExtensions "epub" = extensionsFromList
349 Ext_native_divs,
350 Ext_native_divs,
350 Ext_native_spans,
351 Ext_native_spans,
351 Ext_epub_html_exts]
352 Ext_epub_html_exts]
353+getDefaultExtensions "latex" = extensionsFromList
354+ [Ext_smart,
355+ Ext_auto_identifiers]
356+getDefaultExtensions "context" = extensionsFromList
357+ [Ext_smart,
358+ Ext_auto_identifiers]
352getDefaultExtensions _ = extensionsFromList
359getDefaultExtensions _ = extensionsFromList
353 [Ext_auto_identifiers]
360 [Ext_auto_identifiers]
354
361
src/Text/Pandoc/Extensions.hs+1
@@ -130,6 +130,7 @@ data Extension =
130 | Ext_line_blocks -- ^ RST style line blocks
130 | Ext_line_blocks -- ^ RST style line blocks
131 | Ext_epub_html_exts -- ^ Recognise the EPUB extended version of HTML
131 | Ext_epub_html_exts -- ^ Recognise the EPUB extended version of HTML
132 | Ext_shortcut_reference_links -- ^ Shortcut reference links
132 | Ext_shortcut_reference_links -- ^ Shortcut reference links
133+ | Ext_smart -- ^ "Smart" quotes, apostrophes, ellipses, dashes
133 deriving (Show, Read, Enum, Eq, Ord, Bounded, Data, Typeable, Generic)
134 deriving (Show, Read, Enum, Eq, Ord, Bounded, Data, Typeable, Generic)
134
135
135pandocExtensions :: Extensions
136pandocExtensions :: Extensions
src/Text/Pandoc/Options.hs−2
@@ -54,7 +54,6 @@ import GHC.Generics (Generic)
54
54
55data ReaderOptions = ReaderOptions{
55data ReaderOptions = ReaderOptions{
56 readerExtensions :: Extensions -- ^ Syntax extensions
56 readerExtensions :: Extensions -- ^ Syntax extensions
57− , readerSmart :: Bool -- ^ Smart punctuation
58 , readerStandalone :: Bool -- ^ Standalone document with header
57 , readerStandalone :: Bool -- ^ Standalone document with header
59 , readerParseRaw :: Bool -- ^ Parse raw HTML, LaTeX
58 , readerParseRaw :: Bool -- ^ Parse raw HTML, LaTeX
60 , readerColumns :: Int -- ^ Number of columns in terminal
59 , readerColumns :: Int -- ^ Number of columns in terminal
@@ -74,7 +73,6 @@ data ReaderOptions = ReaderOptions{
74instance Default ReaderOptions
73instance Default ReaderOptions
75 where def = ReaderOptions{
74 where def = ReaderOptions{
76 readerExtensions = pandocExtensions
75 readerExtensions = pandocExtensions
77− , readerSmart = False
78 , readerStandalone = False
76 , readerStandalone = False
79 , readerParseRaw = False
77 , readerParseRaw = False
80 , readerColumns = 80
78 , readerColumns = 80
src/Text/Pandoc/Parsing.hs+1−5
@@ -1105,15 +1105,11 @@ registerHeader (ident,classes,kvs) header' = do
1105 updateState $ updateHeaderMap $ insert' header' ident
1105 updateState $ updateHeaderMap $ insert' header' ident
1106 return (ident,classes,kvs)
1106 return (ident,classes,kvs)
1107
1107
1108−-- | Fail unless we're in "smart typography" mode.
1109−failUnlessSmart :: (Stream s m a, HasReaderOptions st) => ParserT s st m ()
1110−failUnlessSmart = getOption readerSmart >>= guard
1111−
1112smartPunctuation :: (HasReaderOptions st, HasLastStrPosition st, HasQuoteContext st m, Stream s m Char)
1108smartPunctuation :: (HasReaderOptions st, HasLastStrPosition st, HasQuoteContext st m, Stream s m Char)
1113 => ParserT s st m Inlines
1109 => ParserT s st m Inlines
1114 -> ParserT s st m Inlines
1110 -> ParserT s st m Inlines
1115smartPunctuation inlineParser = do
1111smartPunctuation inlineParser = do
1116− failUnlessSmart
1112+ guardEnabled Ext_smart
1117 choice [ quoted inlineParser, apostrophe, dash, ellipses ]
1113 choice [ quoted inlineParser, apostrophe, dash, ellipses ]
1118
1114
1119apostrophe :: Stream s m Char => ParserT s st m Inlines
1115apostrophe :: Stream s m Char => ParserT s st m Inlines
src/Text/Pandoc/Readers/CommonMark.hs+1−1
@@ -43,7 +43,7 @@ import Text.Pandoc.Class (PandocMonad)
43readCommonMark :: PandocMonad m => ReaderOptions -> String -> m Pandoc
43readCommonMark :: PandocMonad m => ReaderOptions -> String -> m Pandoc
44readCommonMark opts s = return $
44readCommonMark opts s = return $
45 nodeToPandoc $ commonmarkToNode opts' $ pack s
45 nodeToPandoc $ commonmarkToNode opts' $ pack s
46− where opts' = if readerSmart opts
46+ where opts' = if extensionEnabled Ext_smart (readerExtensions opts)
47 then [optNormalize, optSmart]
47 then [optNormalize, optSmart]
48 else [optNormalize]
48 else [optNormalize]
49
49
src/Text/Pandoc/Readers/LaTeX.hs+2−2
@@ -187,7 +187,7 @@ mathChars =
187quoted' :: PandocMonad m => (Inlines -> Inlines) -> LP m String -> LP m () -> LP m Inlines
187quoted' :: PandocMonad m => (Inlines -> Inlines) -> LP m String -> LP m () -> LP m Inlines
188quoted' f starter ender = do
188quoted' f starter ender = do
189 startchs <- starter
189 startchs <- starter
190− smart <- getOption readerSmart
190+ smart <- extensionEnabled Ext_smart <$> getOption readerExtensions
191 if smart
191 if smart
192 then do
192 then do
193 ils <- many (notFollowedBy ender >> inline)
193 ils <- many (notFollowedBy ender >> inline)
@@ -209,7 +209,7 @@ doubleQuote = do
209
209
210singleQuote :: PandocMonad m => LP m Inlines
210singleQuote :: PandocMonad m => LP m Inlines
211singleQuote = do
211singleQuote = do
212− smart <- getOption readerSmart
212+ smart <- extensionEnabled Ext_smart <$> getOption readerExtensions
213 if smart
213 if smart
214 then quoted' singleQuoted (string "`") (try $ char '\'' >> notFollowedBy letter)
214 then quoted' singleQuoted (string "`") (try $ char '\'' >> notFollowedBy letter)
215 <|> quoted' singleQuoted (string "‘") (try $ char '’' >> notFollowedBy letter)
215 <|> quoted' singleQuoted (string "‘") (try $ char '’' >> notFollowedBy letter)
src/Text/Pandoc/Readers/Markdown.hs+3−3
@@ -1590,7 +1590,7 @@ code = try $ do
1590math :: PandocMonad m => MarkdownParser m (F Inlines)
1590math :: PandocMonad m => MarkdownParser m (F Inlines)
1591math = (return . B.displayMath <$> (mathDisplay >>= applyMacros'))
1591math = (return . B.displayMath <$> (mathDisplay >>= applyMacros'))
1592 <|> (return . B.math <$> (mathInline >>= applyMacros')) <+?>
1592 <|> (return . B.math <$> (mathInline >>= applyMacros')) <+?>
1593− ((getOption readerSmart >>= guard) *> (return <$> apostrophe)
1593+ (guardEnabled Ext_smart *> (return <$> apostrophe)
1594 <* notFollowedBy (space <|> satisfy isPunctuation))
1594 <* notFollowedBy (space <|> satisfy isPunctuation))
1595
1595
1596-- Parses material enclosed in *s, **s, _s, or __s.
1596-- Parses material enclosed in *s, **s, _s, or __s.
@@ -1697,7 +1697,7 @@ str = do
1697 result <- many1 alphaNum
1697 result <- many1 alphaNum
1698 updateLastStrPos
1698 updateLastStrPos
1699 let spacesToNbr = map (\c -> if c == ' ' then '\160' else c)
1699 let spacesToNbr = map (\c -> if c == ' ' then '\160' else c)
1700− isSmart <- getOption readerSmart
1700+ isSmart <- extensionEnabled Ext_smart <$> getOption readerExtensions
1701 if isSmart
1701 if isSmart
1702 then case likelyAbbrev result of
1702 then case likelyAbbrev result of
1703 [] -> return $ return $ B.str result
1703 [] -> return $ return $ B.str result
@@ -2104,7 +2104,7 @@ citation = try $ do
2104
2104
2105smart :: PandocMonad m => MarkdownParser m (F Inlines)
2105smart :: PandocMonad m => MarkdownParser m (F Inlines)
2106smart = do
2106smart = do
2107− getOption readerSmart >>= guard
2107+ guardEnabled Ext_smart
2108 doubleQuoted <|> singleQuoted <|>
2108 doubleQuoted <|> singleQuoted <|>
2109 choice (map (return <$>) [apostrophe, dash, ellipses])
2109 choice (map (return <$>) [apostrophe, dash, ellipses])
2110
2110
src/Text/Pandoc/Readers/Org/Inlines.hs+1−1
@@ -841,7 +841,7 @@ exportSnippet = try $ do
841
841
842smart :: PandocMonad m => OrgParser m (F Inlines)
842smart :: PandocMonad m => OrgParser m (F Inlines)
843smart = do
843smart = do
844− getOption readerSmart >>= guard
844+ guardEnabled Ext_smart
845 doubleQuoted <|> singleQuoted <|>
845 doubleQuoted <|> singleQuoted <|>
846 choice (map (return <$>) [orgApostrophe, orgDash, orgEllipses])
846 choice (map (return <$>) [orgApostrophe, orgDash, orgEllipses])
847 where
847 where
src/Text/Pandoc/Readers/RST.hs+1−1
@@ -1309,7 +1309,7 @@ note = try $ do
1309
1309
1310smart :: PandocMonad m => RSTParser m Inlines
1310smart :: PandocMonad m => RSTParser m Inlines
1311smart = do
1311smart = do
1312− getOption readerSmart >>= guard
1312+ guardEnabled Ext_smart
1313 doubleQuoted <|> singleQuoted <|>
1313 doubleQuoted <|> singleQuoted <|>
1314 choice [apostrophe, dash, ellipses]
1314 choice [apostrophe, dash, ellipses]
1315
1315
src/Text/Pandoc/Readers/TWiki.hs+1−1
@@ -476,7 +476,7 @@ symbol = count 1 nonspaceChar >>= return . B.str
476
476
477smart :: TWParser B.Inlines
477smart :: TWParser B.Inlines
478smart = do
478smart = do
479− getOption readerSmart >>= guard
479+ guardEnabled Ext_smart
480 doubleQuoted <|> singleQuoted <|>
480 doubleQuoted <|> singleQuoted <|>
481 choice [ apostrophe
481 choice [ apostrophe
482 , dash
482 , dash
tests/Tests/Old.hs+4−4
@@ -47,13 +47,13 @@ tests = [ testGroup "markdown"
47 [ testGroup "writer"
47 [ testGroup "writer"
48 $ writerTests "markdown" ++ lhsWriterTests "markdown"
48 $ writerTests "markdown" ++ lhsWriterTests "markdown"
49 , testGroup "reader"
49 , testGroup "reader"
50− [ test "basic" ["-r", "markdown", "-w", "native", "-s", "-S"]
50+ [ test "basic" ["-r", "markdown+smart", "-w", "native", "-s"]
51 "testsuite.txt" "testsuite.native"
51 "testsuite.txt" "testsuite.native"
52 , test "tables" ["-r", "markdown", "-w", "native", "--columns=80"]
52 , test "tables" ["-r", "markdown", "-w", "native", "--columns=80"]
53 "tables.txt" "tables.native"
53 "tables.txt" "tables.native"
54 , test "pipe tables" ["-r", "markdown", "-w", "native", "--columns=80"]
54 , test "pipe tables" ["-r", "markdown", "-w", "native", "--columns=80"]
55 "pipe-tables.txt" "pipe-tables.native"
55 "pipe-tables.txt" "pipe-tables.native"
56− , test "more" ["-r", "markdown", "-w", "native", "-s", "-S"]
56+ , test "more" ["-r", "markdown+smart", "-w", "native", "-s"]
57 "markdown-reader-more.txt" "markdown-reader-more.native"
57 "markdown-reader-more.txt" "markdown-reader-more.native"
58 , lhsReaderTest "markdown+lhs"
58 , lhsReaderTest "markdown+lhs"
59 ]
59 ]
@@ -65,8 +65,8 @@ tests = [ testGroup "markdown"
65 , testGroup "rst"
65 , testGroup "rst"
66 [ testGroup "writer" (writerTests "rst" ++ lhsWriterTests "rst")
66 [ testGroup "writer" (writerTests "rst" ++ lhsWriterTests "rst")
67 , testGroup "reader"
67 , testGroup "reader"
68− [ test "basic" ["-r", "rst", "-w", "native",
68+ [ test "basic" ["-r", "rst+smart", "-w", "native",
69− "-s", "-S", "--columns=80"] "rst-reader.rst" "rst-reader.native"
69+ "-s", "--columns=80"] "rst-reader.rst" "rst-reader.native"
70 , test "tables" ["-r", "rst", "-w", "native", "--columns=80"]
70 , test "tables" ["-r", "rst", "-w", "native", "--columns=80"]
71 "tables.rst" "tables-rstsubset.native"
71 "tables.rst" "tables-rstsubset.native"
72 , lhsReaderTest "rst+lhs"
72 , lhsReaderTest "rst+lhs"
tests/Tests/Readers/Markdown.hs+2−1
@@ -12,7 +12,8 @@ markdown :: String -> Pandoc
12markdown = purely $ readMarkdown def
12markdown = purely $ readMarkdown def
13
13
14markdownSmart :: String -> Pandoc
14markdownSmart :: String -> Pandoc
15−markdownSmart = purely $ readMarkdown def { readerSmart = True }
15+markdownSmart = purely $ readMarkdown def { readerExtensions =
16+ enableExtension Ext_smart $ readerExtensions def }
16
17
17markdownCDL :: String -> Pandoc
18markdownCDL :: String -> Pandoc
18markdownCDL = purely $ readMarkdown def { readerExtensions = enableExtension
19markdownCDL = purely $ readMarkdown def { readerExtensions = enableExtension
tests/Tests/Readers/Org.hs+2−1
@@ -12,7 +12,8 @@ org :: String -> Pandoc
12org = purely $ readOrg def
12org = purely $ readOrg def
13
13
14orgSmart :: String -> Pandoc
14orgSmart :: String -> Pandoc
15−orgSmart = purely $ readOrg def { readerSmart = True }
15+orgSmart = purely $ readOrg def { readerExtensions =
16+ enableExtension Ext_smart $ readerExtensions def }
16
17
17infix 4 =:
18infix 4 =:
18(=:) :: ToString c
19(=:) :: ToString c