git.iko.soy/typeable/pandoc
on master help sign in
Writers: Recognize custom syntax definitions (#7241)

Languages defined using `--syntax-definition` were not recognized by `languagesByExtension`. This patch corrects that, allowing the writers to see all custom definitions. The LaTeX still uses the default syntax map, but that's okay in that context, since `--syntax-definition` won't create new listings styles.

commitc56d080a253c1364ca55ae97b8d43ed638acf723 authorJan Tojnar <jtojnar@gmail.com> dateSun 25 Apr 2021, 21:19 (5 years ago) parente9c0f9f
5 files changed+28−23
src/Text/Pandoc/Highlighting.hs+5−5 src/Text/Pandoc/Readers/LaTeX.hs+2−1 src/Text/Pandoc/Writers/Docbook.hs+4−3 src/Text/Pandoc/Writers/JATS.hs+13−11 src/Text/Pandoc/Writers/TEI.hs+4−3
src/Text/Pandoc/Highlighting.hs+5−5
@@ -52,12 +52,12 @@ highlightingStyles =
5252 ("breezedark", breezeDark),
5353 ("haddock", haddock)]
5454
55−languages :: [T.Text]
56−languages = [T.toLower (sName s) | s <- M.elems defaultSyntaxMap]
55+languages :: SyntaxMap -> [T.Text]
56+languages syntaxmap = [T.toLower (sName s) | s <- M.elems syntaxmap]
5757
58−languagesByExtension :: T.Text -> [T.Text]
59−languagesByExtension ext =
60− [T.toLower (sName s) | s <- syntaxesByExtension defaultSyntaxMap (T.unpack ext)]
58+languagesByExtension :: SyntaxMap -> T.Text -> [T.Text]
59+languagesByExtension syntaxmap ext =
60+ [T.toLower (sName s) | s <- syntaxesByExtension syntaxmap (T.unpack ext)]
6161
6262highlight :: SyntaxMap
6363 -> (FormatOptions -> [SourceLine] -> a) -- ^ Formatter
src/Text/Pandoc/Readers/LaTeX.hs+2−1
@@ -32,6 +32,7 @@ import Data.Maybe (fromMaybe, maybeToList)
3232import qualified Data.Set as Set
3333import Data.Text (Text)
3434import qualified Data.Text as T
35+import Skylighting (defaultSyntaxMap)
3536import System.FilePath (addExtension, replaceExtension, takeExtension)
3637import Text.Collate.Lang (renderLang)
3738import Text.Pandoc.Builder as B
@@ -1170,7 +1171,7 @@ inputListing = do
11701171 let (ident,classes,kvs) = parseListingsOptions options
11711172 let classes' =
11721173 (case listingsLanguage options of
1173− Nothing -> (take 1 (languagesByExtension (T.pack $ takeExtension $ T.unpack f)) <>)
1174+ Nothing -> (take 1 (languagesByExtension defaultSyntaxMap (T.pack $ takeExtension $ T.unpack f)) <>)
11741175 Just _ -> id) classes
11751176 let firstline = fromMaybe 1 $ lookup "firstline" options >>= safeRead
11761177 let lastline = fromMaybe (length codeLines) $
src/Text/Pandoc/Writers/Docbook.hs+4−3
@@ -253,17 +253,18 @@ blockToDocbook opts (LineBlock lns) =
253253 blockToDocbook opts $ linesToPara lns
254254blockToDocbook opts (BlockQuote blocks) =
255255 inTagsIndented "blockquote" <$> blocksToDocbook opts blocks
256−blockToDocbook _ (CodeBlock (_,classes,_) str) = return $
256+blockToDocbook opts (CodeBlock (_,classes,_) str) = return $
257257 literal ("<programlisting" <> lang <> ">") <> cr <>
258258 flush (literal (escapeStringForXML str) <> cr <> literal "</programlisting>")
259259 where lang = if null langs
260260 then ""
261261 else " language=\"" <> escapeStringForXML (head langs) <>
262262 "\""
263− isLang l = T.toLower l `elem` map T.toLower languages
263+ syntaxMap = writerSyntaxMap opts
264+ isLang l = T.toLower l `elem` map T.toLower (languages syntaxMap)
264265 langsFrom s = if isLang s
265266 then [s]
266− else languagesByExtension . T.toLower $ s
267+ else (languagesByExtension syntaxMap) . T.toLower $ s
267268 langs = concatMap langsFrom classes
268269blockToDocbook opts (BulletList lst) = do
269270 let attribs = [("spacing", "compact") | isTightList lst]
src/Text/Pandoc/Writers/JATS.hs+13−11
@@ -224,19 +224,21 @@ imageMimeType src kvs =
224224 (T.drop 1 . T.dropWhile (/='/') <$> mbMT)
225225 in (maintype, subtype)
226226
227−languageFor :: [Text] -> Text
228−languageFor classes =
227+languageFor :: WriterOptions -> [Text] -> Text
228+languageFor opts classes =
229229 case langs of
230230 (l:_) -> escapeStringForXML l
231231 [] -> ""
232− where isLang l = T.toLower l `elem` map T.toLower languages
232+ where
233+ syntaxMap = writerSyntaxMap opts
234+ isLang l = T.toLower l `elem` map T.toLower (languages syntaxMap)
233235 langsFrom s = if isLang s
234236 then [s]
235− else languagesByExtension . T.toLower $ s
237+ else (languagesByExtension syntaxMap) . T.toLower $ s
236238 langs = concatMap langsFrom classes
237239
238−codeAttr :: Attr -> (Text, [(Text, Text)])
239−codeAttr (ident,classes,kvs) = (lang, attr)
240+codeAttr :: WriterOptions -> Attr -> (Text, [(Text, Text)])
241+codeAttr opts (ident,classes,kvs) = (lang, attr)
240242 where
241243 attr = [("id", escapeNCName ident) | not (T.null ident)] ++
242244 [("language",lang) | not (T.null lang)] ++
@@ -244,7 +246,7 @@ codeAttr (ident,classes,kvs) = (lang, attr)
244246 "code-version", "executable",
245247 "language-version", "orientation",
246248 "platforms", "position", "specific-use"]]
247− lang = languageFor classes
249+ lang = languageFor opts classes
248250
249251-- | Convert a Pandoc block element to JATS.
250252blockToJATS :: PandocMonad m => WriterOptions -> Block -> JATS m (Doc Text)
@@ -330,9 +332,9 @@ blockToJATS opts (BlockQuote blocks) = do
330332 HorizontalRule -> True
331333 _ -> False
332334 inTagsIndented "disp-quote" <$> wrappedBlocksToJATS needsWrap opts blocks
333−blockToJATS _ (CodeBlock a str) = return $
335+blockToJATS opts (CodeBlock a str) = return $
334336 inTags False tag attr (flush (text (T.unpack $ escapeStringForXML str)))
335− where (lang, attr) = codeAttr a
337+ where (lang, attr) = codeAttr opts a
336338 tag = if T.null lang then "preformat" else "code"
337339blockToJATS _ (BulletList []) = return empty
338340blockToJATS opts (BulletList lst) =
@@ -412,9 +414,9 @@ inlineToJATS opts (Quoted SingleQuote lst) = do
412414inlineToJATS opts (Quoted DoubleQuote lst) = do
413415 contents <- inlinesToJATS opts lst
414416 return $ char '“' <> contents <> char '”'
415−inlineToJATS _ (Code a str) =
417+inlineToJATS opts (Code a str) =
416418 return $ inTags False tag attr $ literal (escapeStringForXML str)
417− where (lang, attr) = codeAttr a
419+ where (lang, attr) = codeAttr opts a
418420 tag = if T.null lang then "monospace" else "code"
419421inlineToJATS _ il@(RawInline f x)
420422 | f == "jats" = return $ literal x
src/Text/Pandoc/Writers/TEI.hs+4−3
@@ -146,16 +146,17 @@ blockToTEI opts (LineBlock lns) =
146146 blockToTEI opts $ linesToPara lns
147147blockToTEI opts (BlockQuote blocks) =
148148 inTagsIndented "quote" <$> blocksToTEI opts blocks
149−blockToTEI _ (CodeBlock (_,classes,_) str) =
149+blockToTEI opts (CodeBlock (_,classes,_) str) =
150150 return $ literal ("<ab type='codeblock " <> lang <> "'>") <> cr <>
151151 flush (literal (escapeStringForXML str) <> cr <> text "</ab>")
152152 where lang = if null langs
153153 then ""
154154 else escapeStringForXML (head langs)
155− isLang l = T.toLower l `elem` map T.toLower languages
155+ syntaxMap = writerSyntaxMap opts
156+ isLang l = T.toLower l `elem` map T.toLower (languages syntaxMap)
156157 langsFrom s = if isLang s
157158 then [s]
158− else languagesByExtension . T.toLower $ s
159+ else (languagesByExtension syntaxMap) . T.toLower $ s
159160 langs = concatMap langsFrom classes
160161blockToTEI opts (BulletList lst) = do
161162 let attribs = [("type", "unordered")]