git.iko.soy/typeable/pandoc
on master help sign in
Convert highlighting-kate language to listings language

if --listings is used. Closes #704.

commit4aea26e8e1179a2feb1672256b1b9317d2c3baf8 authorJohn MacFarlane <jgm@berkeley.edu> dateThu 17 Jan 2013, 19:47 (14 years ago) parent820a914
1 file changed+63−19
src/Text/Pandoc/Writers/LaTeX.hs+63−19
src/Text/Pandoc/Writers/LaTeX.hs+63−19
@@ -35,11 +35,13 @@ import Text.Pandoc.Shared
3535import Text.Pandoc.Options
3636import Text.Pandoc.Templates
3737import Text.Printf ( printf )
38+import qualified Data.Map as M
3839import Network.URI ( isAbsoluteURI, unEscapeString )
3940import Data.List ( (\\), isSuffixOf, isInfixOf,
4041 isPrefixOf, intercalate, intersperse )
4142import Data.Char ( toLower, isPunctuation )
4243import Control.Monad.State
44+import Control.Applicative ((<|>))
4345import Text.Pandoc.Pretty
4446import System.FilePath (dropExtension)
4547import Text.Pandoc.Slides
@@ -327,25 +329,9 @@ blockToLaTeX (CodeBlock (_,classes,keyvalAttr) str) = do
327329 listingsCodeBlock = do
328330 st <- get
329331 let params = if writerListings (stOptions st)
330− then take 1
331− [ "language=" ++ lang | lang <- classes
332− , lang `elem` ["ABAP","IDL","Plasm","ACSL","inform"
333− ,"POV","Ada","Java","Prolog","Algol"
334− ,"JVMIS","Promela","Ant","ksh","Python"
335− ,"Assembler","Lisp","R","Awk","Logo"
336− ,"Reduce","bash","make","Rexx","Basic"
337− ,"Mathematica","RSL","C","Matlab","Ruby"
338− ,"C++","Mercury","S","Caml","MetaPost"
339− ,"SAS","Clean","Miranda","Scilab","Cobol"
340− ,"Mizar","sh","Comal","ML","SHELXL","csh"
341− ,"Modula-2","Simula","Delphi","MuPAD"
342− ,"SQL","Eiffel","NASTRAN","tcl","Elan"
343− ,"Oberon-2","TeX","erlang","OCL"
344− ,"VBScript","Euphoria","Octave","Verilog"
345− ,"Fortran","Oz","VHDL","GCL","Pascal"
346− ,"VRML","Gnuplot","Perl","XML","Haskell"
347− ,"PHP","XSLT","HTML","PL/I"]
348− ] ++
332+ then (case getListingsLanguage classes of
333+ Just l -> [ "language=" ++ l ]
334+ Nothing -> []) ++
349335 [ key ++ "=" ++ attr | (key,attr) <- keyvalAttr ]
350336 else []
351337 printParams
@@ -755,3 +741,61 @@ citationsToBiblatex (c:cs) = do
755741 = citeArguments p s k
756742
757743citationsToBiblatex _ = return empty
744+
745+-- correlate pandoc language names with listings names
746+langsMap :: M.Map String String
747+langsMap = M.fromList
748+ [("ada","Ada")
749+ ,("java","Java")
750+ ,("prolog","Prolog")
751+ ,("python","Python")
752+ ,("gnuassembler","Assembler")
753+ ,("commonlisp","Lisp")
754+ ,("r","R")
755+ ,("awk","Awk")
756+ ,("bash","bash")
757+ ,("makefile","make")
758+ ,("c","C")
759+ ,("matlab","Matlab")
760+ ,("ruby","Ruby")
761+ ,("cpp","C++")
762+ ,("ocaml","Caml")
763+ ,("modula2","Modula-2")
764+ ,("sql","SQL")
765+ ,("eiffel","Eiffel")
766+ ,("tcl","tcl")
767+ ,("erlang","erlang")
768+ ,("verilog","Verilog")
769+ ,("fortran","Fortran")
770+ ,("vhdl","VHDL")
771+ ,("pascal","Pascal")
772+ ,("perl","Perl")
773+ ,("xml","XML")
774+ ,("haskell","Haskell")
775+ ,("php","PHP")
776+ ,("xslt","XSLT")
777+ ,("html","HTML")
778+ ]
779+
780+listingsLangs :: [String]
781+listingsLangs = ["Ada","Java","Prolog","Algol","JVMIS","Promela",
782+ "Ant","ksh","Python","Assembler","Lisp","R","Awk",
783+ "Logo","Reduce","bash","make","Rexx","Basic",
784+ "Mathematica","RSL","C","Matlab","Ruby","C++",
785+ "Mercury","S","Caml","MetaPost","SAS","Clean",
786+ "Miranda","Scilab","Cobol","Mizar","sh","Comal",
787+ "ML","SHELXL","csh","Modula-2","Simula","Delphi",
788+ "MuPAD","SQL","Eiffel","NASTRAN","tcl","Elan",
789+ "Oberon-2","TeX","erlang","OCL","VBScript","Euphoria",
790+ "Octave","Verilog","Fortran","Oz","VHDL","GCL",
791+ "Pascal","VRML","Gnuplot","Perl","XML","Haskell",
792+ "PHP","XSLT","HTML","PL/I"]
793+
794+-- Determine listings language from list of class attributes.
795+getListingsLanguage :: [String] -> Maybe String
796+getListingsLanguage [] = Nothing
797+getListingsLanguage (x:xs) = (if x `elem` listingsLangs
798+ then Just x
799+ else Nothing) <|>
800+ M.lookup (map toLower x) langsMap <|>
801+ getListingsLanguage xs