git.iko.soy/typeable/pandoc
on master help sign in
Support implicit_figure extension in commonmark reader.
commitedf630442c351cef9d49c9b251766063bee6fb2d authorJohn MacFarlane <jgm@berkeley.edu> dateThu 14 May 2020, 09:32 (6 years ago) parent28c2c8e
2 files changed+13−1
src/Text/Pandoc/Extensions.hs+2 src/Text/Pandoc/Readers/CommonMark.hs+11−1
src/Text/Pandoc/Extensions.hs+2
@@ -359,6 +359,7 @@ getDefaultExtensions "commonmark_x" = extensionsFromList
359359 , Ext_raw_attribute
360360 , Ext_implicit_header_references
361361 , Ext_attributes
362+ , Ext_implicit_figures
362363 ]
363364getDefaultExtensions "org" = extensionsFromList
364365 [Ext_citations,
@@ -480,6 +481,7 @@ getAllExtensions f = universalExtensions <> getAll f
480481 , Ext_raw_attribute
481482 , Ext_implicit_header_references
482483 , Ext_attributes
484+ , Ext_implicit_figures
483485 ]
484486 getAll "gfm" = getAll "commonmark"
485487 getAll "commonmark_x" = getAll "commonmark"
src/Text/Pandoc/Readers/CommonMark.hs+11−1
@@ -21,8 +21,10 @@ import Commonmark
2121import Commonmark.Extensions
2222import Commonmark.Pandoc
2323import Data.Text (Text)
24+import qualified Data.Text as T
2425import Text.Pandoc.Class.PandocMonad (PandocMonad)
2526import Text.Pandoc.Definition
27+import Text.Pandoc.Walk (walk)
2628import Text.Pandoc.Builder as B
2729import Text.Pandoc.Options
2830import Text.Pandoc.Error
@@ -36,8 +38,11 @@ readCommonMark opts s = do
3638 commonmarkWith (foldr (<>) defaultSyntaxSpec exts) "input" s
3739 case res of
3840 Left err -> throwError $ PandocParsecError s err
39− Right (Cm bls :: Cm () Blocks) -> return $ B.doc bls
41+ Right (Cm bls :: Cm () Blocks) -> return $ B.doc $ postprocess bls
4042 where
43+ postprocess = if isEnabled Ext_implicit_figures opts
44+ then walk makeImplicitFigure
45+ else id
4146 exts = [ hardLineBreaksSpec | isEnabled Ext_hard_line_breaks opts ] ++
4247 [ smartPunctuationSpec | isEnabled Ext_smart opts ] ++
4348 [ strikethroughSpec | isEnabled Ext_strikeout opts ] ++
@@ -64,3 +69,8 @@ readCommonMark opts s = do
6469 [ definitionListSpec | isEnabled Ext_definition_lists opts ] ++
6570 [ taskListSpec | isEnabled Ext_task_lists opts ]
6671
72+makeImplicitFigure :: Block -> Block
73+makeImplicitFigure (Para [Image attr label (src, tit)])
74+ | not ("fig:" `T.isPrefixOf` tit) =
75+ Para [Image attr label (src, "fig:" <> tit)]
76+makeImplicitFigure x = x