LaTeX reader: Read optional attributes in lstlisting environment.

We convert these to pandoc standard names, e.g. "numberLines"
for "numbers=left", "startFrom=100" from "firstnumber=100".

Still need to add code to convert the language names.
This commit is contained in:
John MacFarlane 2013-03-04 09:50:11 -08:00
parent 0bbee1bcf6
commit 3692e371a7

View file

@ -768,6 +768,20 @@ verbCmd = do
rest <- getInput
return (r, rest)
keyval :: LP (String, String)
keyval = try $ do
key <- many1 alphaNum
char '='
val <- many1 alphaNum
skipMany spaceChar
optional (char ',')
skipMany spaceChar
return (key, val)
keyvals :: LP [(String, String)]
keyvals = try $ char '[' *> manyTill keyval (char ']')
verbatimEnv :: LP (String, String)
verbatimEnv = do
(_,r) <- withRaw $ do
@ -804,7 +818,14 @@ environments = M.fromList
verbEnv "code"))
, ("verbatim", codeBlock <$> (verbEnv "verbatim"))
, ("Verbatim", codeBlock <$> (verbEnv "Verbatim"))
, ("lstlisting", codeBlock <$> (verbEnv "lstlisting"))
, ("lstlisting", do options <- option [] keyvals
let classes = [ "numberLines" |
lookup "numbers" options == Just "left" ]
let kvs = [ (if k == "firstnumber"
then "startFrom"
else k, v) | (k,v) <- options ]
let attr = ("",classes,kvs)
codeBlockWith attr <$> (verbEnv "lstlisting"))
, ("minted", liftA2 (\l c -> codeBlockWith ("",[l],[]) c)
(grouped (many1 $ satisfy (/= '}'))) (verbEnv "minted"))
, ("obeylines", parseFromString