@@ -26,6 +26,7 @@ module Text.Pandoc.Extensions ( Extension(..)
26 , enableExtension
26 , enableExtension
27 , disableExtension
27 , disableExtension
28 , getDefaultExtensions
28 , getDefaultExtensions
29 , pandocExtensions
30 , pandocExtensions
30 , plainExtensions
31 , plainExtensions
31 , strictExtensions
32 , strictExtensions
@@ -312,12 +313,12 @@ strictExtensions = extensionsFromList
313-- | Default extensions from format-describing string.
314-- | Default extensions from format-describing string.
314getDefaultExtensions :: String -> Extensions
315getDefaultExtensions :: String -> Extensions
315−getDefaultExtensions "markdown_strict" = strictExtensions
316+getDefaultExtensions "markdown_strict" = strictExtensions
316getDefaultExtensions "markdown_phpextra" = phpMarkdownExtraExtensions
317getDefaultExtensions "markdown_phpextra" = phpMarkdownExtraExtensions
317−getDefaultExtensions "markdown_mmd" = multimarkdownExtensions
318+getDefaultExtensions "markdown_mmd" = multimarkdownExtensions
318−getDefaultExtensions "markdown_github" = githubMarkdownExtensions
319+getDefaultExtensions "markdown_github" = githubMarkdownExtensions
319−getDefaultExtensions "markdown" = pandocExtensions
320+getDefaultExtensions "markdown" = pandocExtensions
320−getDefaultExtensions "ipynb" =
321+getDefaultExtensions "ipynb" =
321 extensionsFromList
322 extensionsFromList
322 [ Ext_all_symbols_escapable
323 [ Ext_all_symbols_escapable
323 , Ext_pipe_tables
324 , Ext_pipe_tables
@@ -379,16 +380,149 @@ getDefaultExtensions "opml" = pandocExtensions -- affects notes
379getDefaultExtensions _ = extensionsFromList
380getDefaultExtensions _ = extensionsFromList
380 [Ext_auto_identifiers]
381 [Ext_auto_identifiers]
383+allMarkdownExtensions :: Extensions
384+allMarkdownExtensions =
388+ , Ext_angle_brackets_escapable
389+ , Ext_lists_without_preceding_blankline
390+ , Ext_four_space_rule
391+ , Ext_spaced_reference_links
392+ , Ext_hard_line_breaks
393+ , Ext_ignore_line_breaks
394+ , Ext_east_asian_line_breaks
396+ , Ext_tex_math_single_backslash
397+ , Ext_tex_math_double_backslash
398+ , Ext_markdown_attribute
399+ , Ext_mmd_title_block
401+ , Ext_autolink_bare_uris
402+ , Ext_mmd_link_attributes
403+ , Ext_mmd_header_identifiers
404+ , Ext_compact_definition_lists
407+ , Ext_literate_haskell
411+-- | Get all valid extensions for a format. This is used
412+-- mainly in checking format specifications for validity.
413+getAllExtensions :: String -> Extensions
414+getAllExtensions f = universalExtensions <> getAll f
416+ autoIdExtensions = extensionsFromList
417+ [ Ext_auto_identifiers
418+ , Ext_gfm_auto_identifiers
419+ , Ext_ascii_identifiers
421+ universalExtensions = extensionsFromList
422+ [ Ext_east_asian_line_breaks ]
423+ getAll "markdown_strict" = allMarkdownExtensions
424+ getAll "markdown_phpextra" = allMarkdownExtensions
425+ getAll "markdown_mmd" = allMarkdownExtensions
426+ getAll "markdown_github" = allMarkdownExtensions
427+ getAll "markdown" = allMarkdownExtensions
428+ getAll "ipynb" = allMarkdownExtensions
429+ getAll "docx" = extensionsFromList
430+ [ Ext_empty_paragraphs
433+ getAll "opendocument" = extensionsFromList
434+ [ Ext_empty_paragraphs
435+ , Ext_native_numbering
437+ getAll "odt" = getAll "opendocument" <> autoIdExtensions
438+ getAll "muse" = autoIdExtensions <>
441+ getAll "asciidoc" = autoIdExtensions
442+ getAll "plain" = allMarkdownExtensions
443+ getAll "gfm" = githubMarkdownExtensions <>
447+ , Ext_raw_tex -- only supported in writer (for math)
448+ , Ext_hard_line_breaks
451+ getAll "commonmark" = getAll "gfm"
452+ getAll "org" = autoIdExtensions <>
457+ getAll "html" = autoIdExtensions <>
462+ , Ext_empty_paragraphs
466+ , Ext_tex_math_dollars
467+ , Ext_tex_math_single_backslash
468+ , Ext_tex_math_double_backslash
469+ , Ext_literate_haskell
470+ , Ext_epub_html_exts
472+ getAll "html4" = getAll "html"
473+ getAll "html5" = getAll "html"
474+ getAll "epub" = getAll "html"
475+ getAll "epub2" = getAll "epub"
476+ getAll "epub3" = getAll "epub"
477+ getAll "latex" = autoIdExtensions <>
483+ , Ext_literate_haskell
485+ getAll "beamer" = getAll "latex"
486+ getAll "context" = autoIdExtensions <>
492+ getAll "textile" = autoIdExtensions <>
498+ getAll "opml" = allMarkdownExtensions -- affects notes
499+ getAll "twiki" = autoIdExtensions <>
502+ getAll "vimwiki" = autoIdExtensions
503+ getAll "dokuwiki" = autoIdExtensions
504+ getAll "tikiwiki" = autoIdExtensions
505+ getAll "rst" = autoIdExtensions <>
508+ , Ext_literate_haskell
510+ getAll "mediawiki" = autoIdExtensions <>
382−-- | Parse a format-specifying string into a markup format and a function that
516+-- | Parse a format-specifying string into a markup format,
383−-- takes Extensions and enables and disables extensions as defined in the format
517+-- a set of extensions to enable, and a set of extensions to disable.
385parseFormatSpec :: String
518parseFormatSpec :: String
386− -> Either ParseError (String, Extensions -> Extensions)
519+ -> Either ParseError (String, [Extension], [Extension])
387parseFormatSpec = parse formatSpec ""
520parseFormatSpec = parse formatSpec ""
388 where formatSpec = do
521 where formatSpec = do
389 name <- formatName
522 name <- formatName
523+ (extsToEnable, extsToDisable) <- foldl (flip ($)) ([],[]) <$>
390− extMods <- many extMod
524+ many extMod
391− return (name, \x -> foldl (flip ($)) x extMods)
525+ return (name, reverse extsToEnable, reverse extsToDisable)
392 formatName = many1 $ noneOf "-+"
526 formatName = many1 $ noneOf "-+"
393 extMod = do
527 extMod = do
394 polarity <- oneOf "-+"
528 polarity <- oneOf "-+"
@@ -397,10 +531,12 @@ parseFormatSpec = parse formatSpec ""
397 Just n -> return n
531 Just n -> return n
399 | name == "lhs" -> return Ext_literate_haskell
533 | name == "lhs" -> return Ext_literate_haskell
400− | otherwise -> Prelude.fail $ "Unknown extension: " ++ name
534+ | otherwise -> Prelude.fail $
535+ "Unknown extension: " ++ name
536+ return $ \(extsToEnable, extsToDisable) ->
401− return $ case polarity of
537+ case polarity of
402− '-' -> disableExtension ext
538+ '+' -> (ext : extsToEnable, extsToDisable)
403− _ -> enableExtension ext
539+ _ -> (extsToEnable, ext : extsToDisable)
405#ifdef DERIVE_JSON_VIA_TH
541#ifdef DERIVE_JSON_VIA_TH
406$(deriveJSON defaultOptions ''Extension)
542$(deriveJSON defaultOptions ''Extension)