diff options
| author | John MacFarlane <[email protected]> | 2021-10-03 00:10:46 -0700 |
|---|---|---|
| committer | John MacFarlane <[email protected]> | 2021-10-03 00:10:46 -0700 |
| commit | 87cf1f01c118fd6abed50f220e397d15979b2e0d (patch) | |
| tree | 3ad9f00d8533056fc1f94f3b8bbb41517eb2b7a3 | |
| parent | 2c7b3508233438bd3a1f2577e5320e5198d12012 (diff) | |
Handle abbreviations as AST transform in Markdown reader.
| -rw-r--r-- | src/Text/Pandoc/Readers/Markdown.hs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index 850c21a3b..4733162c9 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -65,7 +65,22 @@ readMarkdown opts s = do parsed <- readWithM parseMarkdown def{ stateOptions = opts } (ensureFinalNewlines 3 (toSources s)) case parsed of - Right result -> return result + Right result -> do + if extensionEnabled Ext_smart (readerExtensions opts) + then do + let escForRegex = T.replace "." "\\." + let re = T.intercalate "|" + (map escForRegex (Set.toList (readerAbbreviations opts))) + let fixAbbrev (Str t) = Str (fixAbbrev' t) + fixAbbrev x = x + fixAbbrev' t = + let (a,b,c) = t =~ re + in case T.uncons c of + Just (' ', t') -> + a <> b <> "\160" <> fixAbbrev' t' + _ -> t + return $ walk fixAbbrev result + else return result Left e -> throwError e -- | Read a YAML string and convert it to pandoc metadata. |
