git.iko.soy/typeable/pandoc
on master help sign in
Hide Text.Pandoc.Highlighting.

* Moved code for translating listings language names to highlighting-kate names and back from LaTeX reader to Highlighting. * Text.Pandoc.Highlighting no longer exposed (API change) * Text.Pandoc.Highlighting exports toListingsLang, fromListingsLang

commit3b63cb0903baf4bc551d2b63d884c0fa556f11a0 authorJohn MacFarlane <fiddlosopher@gmail.com> dateTue 5 Mar 2013, 22:09 (14 years ago) parentfd65798
5 files changed+78−60
pandoc.cabal+2−1 pandoc.hs+1−1 src/Text/Pandoc/Highlighting.hs+70 src/Text/Pandoc/Writers/LaTeX.hs+4−57 tests/Tests/Writers/HTML.hs+1−1
pandoc.cabal+2−1
@@ -272,7 +272,6 @@ Library
272272 Text.Pandoc.Options,
273273 Text.Pandoc.Pretty,
274274 Text.Pandoc.Shared,
275− Text.Pandoc.Highlighting,
276275 Text.Pandoc.Readers.HTML,
277276 Text.Pandoc.Readers.LaTeX,
278277 Text.Pandoc.Readers.Markdown,
@@ -312,6 +311,7 @@ Library
312311 Text.Pandoc.UUID,
313312 Text.Pandoc.ImageSize,
314313 Text.Pandoc.Slides,
314+ Text.Pandoc.Highlighting,
315315 Paths_pandoc
316316
317317 Buildable: True
@@ -375,6 +375,7 @@ Test-Suite test-pandoc
375375 directory >= 1 && < 1.3,
376376 filepath >= 1.1 && < 1.4,
377377 process >= 1 && < 1.2,
378+ highlighting-kate >= 0.5.3.7 && < 0.6,
378379 Diff >= 0.2 && < 0.4,
379380 test-framework >= 0.3 && < 0.9,
380381 test-framework-hunit >= 0.2 && < 0.4,
pandoc.hs+1−1
@@ -37,7 +37,7 @@ import Text.Pandoc.Shared ( tabFilter, readDataFileUTF8, safeRead,
3737 headerShift, normalize, err, warn )
3838import Text.Pandoc.XML ( toEntities, fromEntities )
3939import Text.Pandoc.SelfContained ( makeSelfContained )
40−import Text.Pandoc.Highlighting ( languages, Style, tango, pygments,
40+import Text.Highlighting.Kate ( languages, Style, tango, pygments,
4141 espresso, zenburn, kate, haddock, monochrome )
4242import System.Environment ( getArgs, getProgName )
4343import System.Exit ( exitWith, ExitCode (..) )
src/Text/Pandoc/Highlighting.hs+70
@@ -45,6 +45,8 @@ module Text.Pandoc.Highlighting ( languages
4545 , monochrome
4646 , haddock
4747 , Style
48+ , fromListingsLanguage
49+ , toListingsLanguage
4850 ) where
4951import Text.Pandoc.Definition
5052import Text.Pandoc.Shared (safeRead)
@@ -52,6 +54,8 @@ import Text.Highlighting.Kate
5254import Data.List (find)
5355import Data.Maybe (fromMaybe)
5456import Data.Char (toLower)
57+import qualified Data.Map as M
58+import Control.Applicative ((<|>))
5559
5660lcLanguages :: [String]
5761lcLanguages = map (map toLower) languages
@@ -76,3 +80,69 @@ highlight formatter (_, classes, keyvals) rawCode =
7680 containerClasses = classes }
7781 $ highlightAs language rawCode
7882
83+-- Functions for correlating latex listings package's language names
84+-- with highlighting-kate language names:
85+
86+langToListingsMap :: M.Map String String
87+langToListingsMap = M.fromList langsList
88+
89+listingsToLangMap :: M.Map String String
90+listingsToLangMap = M.fromList $ reverse langsList
91+
92+langsList :: [(String, String)]
93+langsList = [("ada","Ada")
94+ ,("java","Java")
95+ ,("prolog","Prolog")
96+ ,("python","Python")
97+ ,("gnuassembler","Assembler")
98+ ,("commonlisp","Lisp")
99+ ,("r","R")
100+ ,("awk","Awk")
101+ ,("bash","bash")
102+ ,("makefile","make")
103+ ,("c","C")
104+ ,("matlab","Matlab")
105+ ,("ruby","Ruby")
106+ ,("cpp","C++")
107+ ,("ocaml","Caml")
108+ ,("modula2","Modula-2")
109+ ,("sql","SQL")
110+ ,("eiffel","Eiffel")
111+ ,("tcl","tcl")
112+ ,("erlang","erlang")
113+ ,("verilog","Verilog")
114+ ,("fortran","Fortran")
115+ ,("vhdl","VHDL")
116+ ,("pascal","Pascal")
117+ ,("perl","Perl")
118+ ,("xml","XML")
119+ ,("haskell","Haskell")
120+ ,("php","PHP")
121+ ,("xslt","XSLT")
122+ ,("html","HTML")
123+ ]
124+
125+listingsLangs :: [String]
126+listingsLangs = ["Ada","Java","Prolog","Algol","JVMIS","Promela",
127+ "Ant","ksh","Python","Assembler","Lisp","R","Awk",
128+ "Logo","Reduce","bash","make","Rexx","Basic",
129+ "Mathematica","RSL","C","Matlab","Ruby","C++",
130+ "Mercury","S","Caml","MetaPost","SAS","Clean",
131+ "Miranda","Scilab","Cobol","Mizar","sh","Comal",
132+ "ML","SHELXL","csh","Modula-2","Simula","Delphi",
133+ "MuPAD","SQL","Eiffel","NASTRAN","tcl","Elan",
134+ "Oberon-2","TeX","erlang","OCL","VBScript","Euphoria",
135+ "Octave","Verilog","Fortran","Oz","VHDL","GCL",
136+ "Pascal","VRML","Gnuplot","Perl","XML","Haskell",
137+ "PHP","XSLT","HTML","PL/I"]
138+
139+-- Determine listings language name from highlighting-kate language name.
140+toListingsLanguage :: String -> Maybe String
141+toListingsLanguage lang = (if lang `elem` listingsLangs
142+ then Just lang
143+ else Nothing) <|>
144+ M.lookup (map toLower lang) langToListingsMap
145+
146+-- Determine highlighting-kate language name from listings language name.
147+fromListingsLanguage :: String -> Maybe String
148+fromListingsLanguage lang = M.lookup lang listingsToLangMap
src/Text/Pandoc/Writers/LaTeX.hs+4−57
@@ -35,18 +35,18 @@ import Text.Pandoc.Shared
3535import Text.Pandoc.Options
3636import Text.Pandoc.Templates
3737import Text.Printf ( printf )
38−import qualified Data.Map as M
3938import Network.URI ( isAbsoluteURI, unEscapeString )
4039import Data.List ( (\\), isSuffixOf, isInfixOf,
4140 isPrefixOf, intercalate, intersperse )
4241import Data.Char ( toLower, isPunctuation )
43−import Control.Monad.State
4442import Control.Applicative ((<|>))
43+import Control.Monad.State
4544import Text.Pandoc.Pretty
4645import System.FilePath (dropExtension)
4746import Text.Pandoc.Slides
4847import Text.Pandoc.Highlighting (highlight, styleToLaTeX,
49− formatLaTeXInline, formatLaTeXBlock)
48+ formatLaTeXInline, formatLaTeXBlock,
49+ toListingsLanguage)
5050
5151data WriterState =
5252 WriterState { stInNote :: Bool -- true if we're in a note
@@ -762,60 +762,7 @@ citationsToBiblatex (c:cs) = do
762762
763763citationsToBiblatex _ = return empty
764764
765−-- correlate pandoc language names with listings names
766−langsMap :: M.Map String String
767−langsMap = M.fromList
768− [("ada","Ada")
769− ,("java","Java")
770− ,("prolog","Prolog")
771− ,("python","Python")
772− ,("gnuassembler","Assembler")
773− ,("commonlisp","Lisp")
774− ,("r","R")
775− ,("awk","Awk")
776− ,("bash","bash")
777− ,("makefile","make")
778− ,("c","C")
779− ,("matlab","Matlab")
780− ,("ruby","Ruby")
781− ,("cpp","C++")
782− ,("ocaml","Caml")
783− ,("modula2","Modula-2")
784− ,("sql","SQL")
785− ,("eiffel","Eiffel")
786− ,("tcl","tcl")
787− ,("erlang","erlang")
788− ,("verilog","Verilog")
789− ,("fortran","Fortran")
790− ,("vhdl","VHDL")
791− ,("pascal","Pascal")
792− ,("perl","Perl")
793− ,("xml","XML")
794− ,("haskell","Haskell")
795− ,("php","PHP")
796− ,("xslt","XSLT")
797− ,("html","HTML")
798− ]
799−
800−listingsLangs :: [String]
801−listingsLangs = ["Ada","Java","Prolog","Algol","JVMIS","Promela",
802− "Ant","ksh","Python","Assembler","Lisp","R","Awk",
803− "Logo","Reduce","bash","make","Rexx","Basic",
804− "Mathematica","RSL","C","Matlab","Ruby","C++",
805− "Mercury","S","Caml","MetaPost","SAS","Clean",
806− "Miranda","Scilab","Cobol","Mizar","sh","Comal",
807− "ML","SHELXL","csh","Modula-2","Simula","Delphi",
808− "MuPAD","SQL","Eiffel","NASTRAN","tcl","Elan",
809− "Oberon-2","TeX","erlang","OCL","VBScript","Euphoria",
810− "Octave","Verilog","Fortran","Oz","VHDL","GCL",
811− "Pascal","VRML","Gnuplot","Perl","XML","Haskell",
812− "PHP","XSLT","HTML","PL/I"]
813−
814765-- Determine listings language from list of class attributes.
815766getListingsLanguage :: [String] -> Maybe String
816767getListingsLanguage [] = Nothing
817−getListingsLanguage (x:xs) = (if x `elem` listingsLangs
818− then Just x
819− else Nothing) <|>
820− M.lookup (map toLower x) langsMap <|>
821− getListingsLanguage xs
768+getListingsLanguage (x:xs) = toListingsLanguage x <|> getListingsLanguage xs
tests/Tests/Writers/HTML.hs+1−1
@@ -6,7 +6,7 @@ import Text.Pandoc.Builder
66import Text.Pandoc
77import Tests.Helpers
88import Tests.Arbitrary()
9−import Text.Pandoc.Highlighting (languages) -- null if no hl support
9+import Text.Highlighting.Kate (languages) -- null if no hl support
1010
1111html :: (ToString a, ToPandoc a) => a -> String
1212html = writeHtmlString def{ writerWrapText = False } . toPandoc