Add sourcepos extension for commonmarke
* Add `Ext_sourcepos` constructor for `Extension`. * Add `sourcepos` extension (only for commonmark). * Bump to 2.11.3 With the `sourcepos` extension set set, `data-pos` attributes are added to the AST by the commonmark reader. No other readers are affected. The `data-pos` attributes are put on elements that accept attributes; for other elements, an enlosing Div or Span is added to hold the attributes. Closes #4565.
This commit is contained in:
parent
8c9010864c
commit
a3eb87b2ea
5 changed files with 20 additions and 6 deletions
|
@ -5127,6 +5127,13 @@ for regular emphasis, add extra blank space around headings.
|
||||||
|
|
||||||
[Project Gutenberg]: https://www.gutenberg.org
|
[Project Gutenberg]: https://www.gutenberg.org
|
||||||
|
|
||||||
|
#### Extension: `sourcepos` ####
|
||||||
|
|
||||||
|
Include source position attributes when parsing `commonmark`.
|
||||||
|
For elements that accept attributes, a `data-pos` attribute
|
||||||
|
is added; other elements are placed in a surrounding
|
||||||
|
Div or Span elemnet with a `data-pos` attribute.
|
||||||
|
|
||||||
## Markdown variants
|
## Markdown variants
|
||||||
|
|
||||||
In addition to pandoc's extended Markdown, the following Markdown
|
In addition to pandoc's extended Markdown, the following Markdown
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
cabal-version: 2.2
|
cabal-version: 2.2
|
||||||
name: pandoc
|
name: pandoc
|
||||||
version: 2.11.2
|
version: 2.11.3
|
||||||
build-type: Simple
|
build-type: Simple
|
||||||
license: GPL-2.0-or-later
|
license: GPL-2.0-or-later
|
||||||
license-file: COPYING.md
|
license-file: COPYING.md
|
||||||
|
|
|
@ -154,6 +154,7 @@ data Extension =
|
||||||
| Ext_yaml_metadata_block -- ^ YAML metadata block
|
| Ext_yaml_metadata_block -- ^ YAML metadata block
|
||||||
| Ext_gutenberg -- ^ Use Project Gutenberg conventions for plain
|
| Ext_gutenberg -- ^ Use Project Gutenberg conventions for plain
|
||||||
| Ext_attributes -- ^ Generic attribute syntax
|
| Ext_attributes -- ^ Generic attribute syntax
|
||||||
|
| Ext_sourcepos -- ^ Include source position attributes
|
||||||
deriving (Show, Read, Enum, Eq, Ord, Bounded, Data, Typeable, Generic)
|
deriving (Show, Read, Enum, Eq, Ord, Bounded, Data, Typeable, Generic)
|
||||||
|
|
||||||
-- | Extensions to be used with pandoc-flavored markdown.
|
-- | Extensions to be used with pandoc-flavored markdown.
|
||||||
|
@ -503,6 +504,7 @@ getAllExtensions f = universalExtensions <> getAll f
|
||||||
, Ext_implicit_header_references
|
, Ext_implicit_header_references
|
||||||
, Ext_attributes
|
, Ext_attributes
|
||||||
, Ext_fenced_code_attributes
|
, Ext_fenced_code_attributes
|
||||||
|
, Ext_sourcepos
|
||||||
]
|
]
|
||||||
getAll "commonmark_x" = getAll "commonmark"
|
getAll "commonmark_x" = getAll "commonmark"
|
||||||
getAll "org" = autoIdExtensions <>
|
getAll "org" = autoIdExtensions <>
|
||||||
|
|
|
@ -65,6 +65,7 @@ data ReaderOptions = ReaderOptions{
|
||||||
, readerDefaultImageExtension :: Text -- ^ Default extension for images
|
, readerDefaultImageExtension :: Text -- ^ Default extension for images
|
||||||
, readerTrackChanges :: TrackChanges -- ^ Track changes setting for docx
|
, readerTrackChanges :: TrackChanges -- ^ Track changes setting for docx
|
||||||
, readerStripComments :: Bool -- ^ Strip HTML comments instead of parsing as raw HTML
|
, readerStripComments :: Bool -- ^ Strip HTML comments instead of parsing as raw HTML
|
||||||
|
-- (only implemented in commonmark)
|
||||||
} deriving (Show, Read, Data, Typeable, Generic)
|
} deriving (Show, Read, Data, Typeable, Generic)
|
||||||
|
|
||||||
instance HasSyntaxExtensions ReaderOptions where
|
instance HasSyntaxExtensions ReaderOptions where
|
||||||
|
|
|
@ -32,11 +32,15 @@ import Data.Typeable
|
||||||
|
|
||||||
-- | Parse a CommonMark formatted string into a 'Pandoc' structure.
|
-- | Parse a CommonMark formatted string into a 'Pandoc' structure.
|
||||||
readCommonMark :: PandocMonad m => ReaderOptions -> Text -> m Pandoc
|
readCommonMark :: PandocMonad m => ReaderOptions -> Text -> m Pandoc
|
||||||
readCommonMark opts s = do
|
readCommonMark opts s
|
||||||
let res = runIdentity $ commonmarkWith (specFor opts) "" s
|
| isEnabled Ext_sourcepos opts =
|
||||||
case res of
|
case runIdentity (commonmarkWith (specFor opts) "" s) of
|
||||||
Left err -> throwError $ PandocParsecError s err
|
Left err -> throwError $ PandocParsecError s err
|
||||||
Right (Cm bls :: Cm () Blocks) -> return $ B.doc bls
|
Right (Cm bls :: Cm SourceRange Blocks) -> return $ B.doc bls
|
||||||
|
| otherwise =
|
||||||
|
case runIdentity (commonmarkWith (specFor opts) "" s) of
|
||||||
|
Left err -> throwError $ PandocParsecError s err
|
||||||
|
Right (Cm bls :: Cm () Blocks) -> return $ B.doc bls
|
||||||
|
|
||||||
specFor :: (Monad m, Typeable m, Typeable a,
|
specFor :: (Monad m, Typeable m, Typeable a,
|
||||||
Rangeable (Cm a Inlines), Rangeable (Cm a Blocks))
|
Rangeable (Cm a Inlines), Rangeable (Cm a Blocks))
|
||||||
|
|
Loading…
Add table
Reference in a new issue