@@ -919,14 +919,22 @@ addNewRole roleText fields = do
919919 (baseRole, baseFmt, baseAttr) =
920920 getBaseRole (parentRole, Nothing , nullAttr) customRoles
921921 fmt = if parentRole == " raw" then lookup " format" fields else baseFmt
922- annotate :: [Text ] -> [Text ]
923- annotate = maybe id (:) $
924- if baseRole == " code"
925- then lookup " language" fields
926- else Nothing
927- attr = let (ident, classes, keyValues) = baseAttr
928- -- nub in case role name & language class are the same
929- in (ident, nub . (role : ) . annotate $ classes, keyValues)
922+
923+ updateClasses :: [Text ] -> [Text ]
924+ updateClasses oldClasses = let
925+
926+ codeLanguageClass = if baseRole == " code"
927+ then maybeToList (lookup " language" fields)
928+ else []
929+
930+ -- if no ":class:" field is given, the default is the role name
931+ classFieldClasses = maybe [role] T. words (lookup " class" fields)
932+
933+ -- nub in case role name & language class are the same
934+ in nub (classFieldClasses ++ codeLanguageClass ++ oldClasses)
935+
936+ attr = let (ident, baseClasses, keyValues) = baseAttr
937+ in (ident, updateClasses baseClasses, keyValues)
930938
931939 -- warn about syntax we ignore
932940 forM_ fields $ \ (key, _) -> case key of
0 commit comments