aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorwillj-dev <94586033+willj-dev@users.noreply.github.com>2021-11-18 17:33:57 -0800
committerGitHub <noreply@github.com>2021-11-18 17:33:57 -0800
commit005dc7ce56a4a165fa9af239cc28a2589f7b169d (patch)
tree08c83231128127f1b6729519d2d35d99ded89940 /src
parent3e5af46471477cc7b006a8ef1cbcd9b182f6fa43 (diff)
downloadpandoc-005dc7ce56a4a165fa9af239cc28a2589f7b169d.tar.gz
RST reader: handle class attribute for for custom roles (#7700)
Previously the class attribute was ignored, and the name of the role used as the class. Closes #7699.
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Readers/RST.hs24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/Text/Pandoc/Readers/RST.hs b/src/Text/Pandoc/Readers/RST.hs
index 8ee017342..88471eb0a 100644
--- a/src/Text/Pandoc/Readers/RST.hs
+++ b/src/Text/Pandoc/Readers/RST.hs
@@ -919,14 +919,22 @@ addNewRole roleText fields = do
(baseRole, baseFmt, baseAttr) =
getBaseRole (parentRole, Nothing, nullAttr) customRoles
fmt = if parentRole == "raw" then lookup "format" fields else baseFmt
- annotate :: [Text] -> [Text]
- annotate = maybe id (:) $
- if baseRole == "code"
- then lookup "language" fields
- else Nothing
- attr = let (ident, classes, keyValues) = baseAttr
- -- nub in case role name & language class are the same
- in (ident, nub . (role :) . annotate $ classes, keyValues)
+
+ updateClasses :: [Text] -> [Text]
+ updateClasses oldClasses = let
+
+ codeLanguageClass = if baseRole == "code"
+ then maybeToList (lookup "language" fields)
+ else []
+
+ -- if no ":class:" field is given, the default is the role name
+ classFieldClasses = maybe [role] T.words (lookup "class" fields)
+
+ -- nub in case role name & language class are the same
+ in nub (classFieldClasses ++ codeLanguageClass ++ oldClasses)
+
+ attr = let (ident, baseClasses, keyValues) = baseAttr
+ in (ident, updateClasses baseClasses, keyValues)
-- warn about syntax we ignore
forM_ fields $ \(key, _) -> case key of