git.iko.soy/typeable/pandoc
on master help sign in
Markdown reader: treat span with class `smallcaps` as SmallCaps.

This allows users to specify small caps in Markdown this way: [my text]{.smallcaps} See #1592.

commit0795244458868839cf8135ed20724b8a0b1a173f authorJohn MacFarlane <jgm@berkeley.edu> dateSat 4 Mar 2017, 14:38 (10 years ago) parent738880b
1 file changed+18−13
src/Text/Pandoc/Readers/Markdown.hs+18−13
src/Text/Pandoc/Readers/Markdown.hs+18−13
@@ -1780,13 +1780,21 @@ bracketedSpan = try $ do
17801780 guardEnabled Ext_bracketed_spans
17811781 (lab,_) <- reference
17821782 attr <- attributes
1783− let (ident,classes,keyvals) = attr
1784− case lookup "style" keyvals of
1785− Just s | null ident && null classes &&
1786− map toLower (filter (`notElem` " \t;") s) ==
1787− "font-variant:small-caps"
1788− -> return $ B.smallcaps <$> lab
1789− _ -> return $ B.spanWith attr <$> lab
1783+ return $ if isSmallCaps attr
1784+ then B.smallcaps <$> lab
1785+ else B.spanWith attr <$> lab
1786+
1787+-- | We treat a span as SmallCaps if class is "smallcaps" (and
1788+-- no other attributes are set or if style is "font-variant:small-caps"
1789+-- (and no other attributes are set).
1790+isSmallCaps :: Attr -> Bool
1791+isSmallCaps ("",["smallcaps"],[]) = True
1792+isSmallCaps ("",[],kvs) =
1793+ case lookup "style" kvs of
1794+ Just s -> map toLower (filter (`notElem` " \t;") s) ==
1795+ "font-variant:small-caps"
1796+ Nothing -> False
1797+isSmallCaps _ = False
17901798
17911799regLink :: PandocMonad m
17921800 => (Attr -> String -> String -> Inlines -> Inlines)
@@ -1930,12 +1938,9 @@ spanHtml = try $ do
19301938 let ident = fromMaybe "" $ lookup "id" attrs
19311939 let classes = maybe [] words $ lookup "class" attrs
19321940 let keyvals = [(k,v) | (k,v) <- attrs, k /= "id" && k /= "class"]
1933− case lookup "style" keyvals of
1934− Just s | null ident && null classes &&
1935− map toLower (filter (`notElem` " \t;") s) ==
1936− "font-variant:small-caps"
1937− -> return $ B.smallcaps <$> contents
1938− _ -> return $ B.spanWith (ident, classes, keyvals) <$> contents
1941+ return $ if isSmallCaps (ident, classes, keyvals)
1942+ then B.smallcaps <$> contents
1943+ else B.spanWith (ident, classes, keyvals) <$> contents
19391944
19401945divHtml :: PandocMonad m => MarkdownParser m (F Blocks)
19411946divHtml = try $ do