@@ -40,7 +40,8 @@ import Text.Printf ( printf )
40import Network.URI ( isURI, unEscapeString )
40import Network.URI ( isURI, unEscapeString )
41import Data.Aeson (object, (.=), FromJSON)
41import Data.Aeson (object, (.=), FromJSON)
42import Data.List ( (\\), isInfixOf, stripPrefix, intercalate, intersperse, nub, nubBy )
42import Data.List ( (\\), isInfixOf, stripPrefix, intercalate, intersperse, nub, nubBy )
43−import Data.Char ( toLower, isPunctuation, isAscii, isLetter, isDigit, ord )
43+import Data.Char ( toLower, isPunctuation, isAscii, isLetter, isDigit,
44import Data.Maybe ( fromMaybe, isJust, catMaybes )
45import Data.Maybe ( fromMaybe, isJust, catMaybes )
45import qualified Data.Text as T
46import qualified Data.Text as T
46import Control.Applicative ((<|>))
47import Control.Applicative ((<|>))
@@ -471,23 +472,27 @@ blockToLaTeX (CodeBlock (identifier,classes,keyvalAttr) str) = do
471 st <- get
472 st <- get
472 let params = if writerListings (stOptions st)
473 let params = if writerListings (stOptions st)
473 then (case getListingsLanguage classes of
474 then (case getListingsLanguage classes of
474− Just l -> [ "language=" ++ l ]
475+ Just l -> [ "language=" ++ mbBraced l ]
475 Nothing -> []) ++
476 Nothing -> []) ++
476 [ "numbers=left" | "numberLines" `elem` classes
477 [ "numbers=left" | "numberLines" `elem` classes
477 || "number" `elem` classes
478 || "number" `elem` classes
478 || "number-lines" `elem` classes ] ++
479 || "number-lines" `elem` classes ] ++
479 [ (if key == "startFrom"
480 [ (if key == "startFrom"
480 then "firstnumber"
481 then "firstnumber"
481− else key) ++ "=" ++ attr |
482+ else key) ++ "=" ++ mbBraced attr |
482 (key,attr) <- keyvalAttr ] ++
483 (key,attr) <- keyvalAttr ] ++
483 (if identifier == ""
484 (if identifier == ""
485 else [ "label=" ++ ref ])
486 else [ "label=" ++ ref ])
489+ mbBraced x = if not (all isAlphaNum x)
490+ then "{" <> x <> "}"
488 printParams
492 printParams
489 | null params = empty
493 | null params = empty
490− | otherwise = brackets $ hcat (intersperse ", " (map text params))
494+ | otherwise = brackets $ hcat (intersperse ", "
491 return $ flush ("\\begin{lstlisting}" <> printParams $$ text str $$
496 return $ flush ("\\begin{lstlisting}" <> printParams $$ text str $$
492 "\\end{lstlisting}") $$ cr
497 "\\end{lstlisting}") $$ cr
493 let highlightedCodeBlock =
498 let highlightedCodeBlock =