git.iko.soy/typeable/pandoc
on master help sign in
CommonMark reader: Use native pandoc auto_identifiers.
commit9b3b9da2c576ac400fe5b9860e3941b84a472b3b authorJohn MacFarlane <jgm@berkeley.edu> dateFri 3 Apr 2020, 17:55 (7 years ago) parentcc77938
2 files changed+20−3
src/Text/Pandoc/Readers/CommonMark.hs+19−2 stack.yaml+1−1
src/Text/Pandoc/Readers/CommonMark.hs+19−2
@@ -25,8 +25,12 @@ import Text.Pandoc.Class.PandocMonad (PandocMonad)
2525import Text.Pandoc.Definition
2626import Text.Pandoc.Builder as B
2727import Text.Pandoc.Options
28+import Text.Pandoc.Walk (walkM)
29+import Text.Pandoc.Shared (uniqueIdent)
2830import Text.Pandoc.Error
2931import Control.Monad.Except
32+import Control.Monad.State
33+import qualified Data.Set as Set
3034
3135-- | Parse a CommonMark formatted string into a 'Pandoc' structure.
3236readCommonMark :: PandocMonad m => ReaderOptions -> Text -> m Pandoc
@@ -35,7 +39,10 @@ readCommonMark opts s = do
3539 (foldr (<>) defaultSyntaxSpec exts) (tokenize "input" s)
3640 case res of
3741 Left err -> throwError $ PandocParsecError s err
38− Right (Cm bls :: Cm () Blocks) -> return $ B.doc bls
42+ Right (Cm bls :: Cm () Blocks) -> return $
43+ (if isEnabled Ext_auto_identifiers opts
44+ then addHeaderIdentifiers opts
45+ else id) $ B.doc bls
3946 where
4047 exts = [ hardLineBreaksSpec | isEnabled Ext_hard_line_breaks opts ] ++
4148 [ smartPunctuationSpec | isEnabled Ext_smart opts ] ++
@@ -55,7 +62,17 @@ readCommonMark opts s = do
5562 isEnabled Ext_inline_code_attributes opts ] ++
5663 [ pipeTableSpec | isEnabled Ext_pipe_tables opts ] ++
5764 [ autolinkSpec | isEnabled Ext_autolink_bare_uris opts ] ++
58− [ autoIdentifiersSpec | isEnabled Ext_auto_identifiers opts ] ++
5965 [ emojiSpec | isEnabled Ext_emoji opts ] -- ++
6066 -- [ taskListSpec | isEnabled Ext_task_lists opts ]
6167
68+addHeaderIdentifiers :: ReaderOptions -> Pandoc -> Pandoc
69+addHeaderIdentifiers opts d =
70+ evalState (walkM (addHeaderId opts) d) mempty
71+
72+addHeaderId :: ReaderOptions -> Block -> State (Set.Set Text) Block
73+addHeaderId opts (Header lev (_,classes,kvs) ils) = do
74+ ids <- get
75+ let ident = uniqueIdent (readerExtensions opts) ils ids
76+ modify (Set.insert ident)
77+ return $ Header lev (ident,classes,kvs) ils
78+addHeaderId _ x = return x
stack.yaml+1−1
@@ -31,7 +31,7 @@ extra-deps:
3131- HsYAML-aeson-0.2.0.0
3232- doctemplates-0.8.2
3333- git: https://github.com/jgm/commonmark-hs
34− commit: 96a20cba162d9a8379aa29705a3983ce2976f371
34+ commit: 751dbe89ea2a94d32e9ba27436c5cccfcfda4358
3535 subdirs:
3636 - commonmark
3737 - commonmark-extensions