aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2020-04-26 15:39:49 -0700
committerJohn MacFarlane <jgm@berkeley.edu>2020-07-19 22:51:59 -0700
commit8d523d80d4120413f6b62bf833d6da8f2a69b925 (patch)
tree67a50ffd0a36ab63d90099cc6acc5b28ea8b1672
parent0db4702042344e3b670a53480bb0ab5b41eb9aeb (diff)
downloadpandoc-8d523d80d4120413f6b62bf833d6da8f2a69b925.tar.gz
Add generic `attributes` extension.
This allows attributes to be added to any block or inline element, in principle. (Though in many cases this will be done by adding a Div or Span container, since pandoc's AST doesn't have a slot for attributes for most elements.) Currently this is only possible with the commonmark and gfm readers. Add `Ext_attributes` constructor for `Extension` [API change].
-rw-r--r--MANUAL.txt31
-rw-r--r--src/Text/Pandoc/Extensions.hs6
-rw-r--r--src/Text/Pandoc/Readers/CommonMark.hs5
3 files changed, 34 insertions, 8 deletions
diff --git a/MANUAL.txt b/MANUAL.txt
index b0e21ca75..6db65f155 100644
--- a/MANUAL.txt
+++ b/MANUAL.txt
@@ -4933,6 +4933,37 @@ in pandoc, but may be enabled by adding `+EXTENSION` to the format
name, where `EXTENSION` is the name of the extension. Thus, for
example, `markdown+hard_line_breaks` is Markdown with hard line breaks.
+#### Extension: `attributes` ####
+
+Allows attributes to be attached to any inline or block-level
+element. The syntax for the attributes is the same as that
+used in [`header_attributes`][Extension: `header_attributes`].
+
+- Attributes that occur immediately after an inline
+ element affect that element. If they follow a space, then they
+ belong to the space. (Hence, this option subsumes
+ `inline_code_attributes` and `link_attributes`.)
+- Attributes that occur immediately before a block
+ element, on a line by themselves, affect that
+ element.
+- Consecutive attribute specifiers may be used,
+ either for blocks or for inlines. Their attributes
+ will be combined.
+- Attributes that occur at the end of the text of
+ a Setext or ATX heading (separated by whitespace
+ from the text) affect the heading element. (Hence, this
+ option subsumes `header_attributes`.)
+- Attributes that occur after the opening fence
+ in a fenced code block affect the code block element. (Hence,
+ this option subsumes `fenced_code_attributes`.)
+- Attributes that occur at the end of a reference
+ link definition affect links that refer to that
+ definition.
+
+Note that pandoc's AST does not currently allow attributes
+to be attached to arbitrary elements. Hence a Span or Div
+container will be added if needed.
+
#### Extension: `old_dashes` ####
Selects the pandoc <= 1.8.2.1 behavior for parsing smart dashes:
diff --git a/src/Text/Pandoc/Extensions.hs b/src/Text/Pandoc/Extensions.hs
index 6594b81a1..be8aa1948 100644
--- a/src/Text/Pandoc/Extensions.hs
+++ b/src/Text/Pandoc/Extensions.hs
@@ -150,6 +150,7 @@ data Extension =
| Ext_tex_math_single_backslash -- ^ TeX math btw \(..\) \[..\]
| Ext_yaml_metadata_block -- ^ YAML metadata block
| Ext_gutenberg -- ^ Use Project Gutenberg conventions for plain
+ | Ext_attributes -- ^ Generic attribute syntax
deriving (Show, Read, Enum, Eq, Ord, Bounded, Data, Typeable, Generic)
-- | Extensions to be used with pandoc-flavored markdown.
@@ -447,11 +448,8 @@ getAllExtensions f = universalExtensions <> getAll f
, Ext_fenced_divs
, Ext_bracketed_spans
, Ext_raw_attribute
- , Ext_inline_code_attributes
- , Ext_fenced_code_attributes
- , Ext_link_attributes
- , Ext_header_attributes
, Ext_implicit_header_references
+ , Ext_attributes
]
getAll "commonmark" = getAll "gfm"
getAll "org" = autoIdExtensions <>
diff --git a/src/Text/Pandoc/Readers/CommonMark.hs b/src/Text/Pandoc/Readers/CommonMark.hs
index d2bde1d2a..a85d9aa37 100644
--- a/src/Text/Pandoc/Readers/CommonMark.hs
+++ b/src/Text/Pandoc/Readers/CommonMark.hs
@@ -48,10 +48,7 @@ readCommonMark opts s = do
[ fencedDivSpec | isEnabled Ext_fenced_divs opts ] ++
[ bracketedSpanSpec | isEnabled Ext_bracketed_spans opts ] ++
[ rawAttributeSpec | isEnabled Ext_raw_attribute opts ] ++
- [ attributesSpec | isEnabled Ext_link_attributes opts ||
- isEnabled Ext_inline_code_attributes opts ||
- isEnabled Ext_fenced_code_attributes opts ||
- isEnabled Ext_header_attributes opts ] ++
+ [ attributesSpec | isEnabled Ext_attributes opts ] ++
[ pipeTableSpec | isEnabled Ext_pipe_tables opts ] ++
[ autolinkSpec | isEnabled Ext_autolink_bare_uris opts ] ++
[ emojiSpec | isEnabled Ext_emoji opts ] ++