@@ -26,7 +26,7 @@ import Control.Monad (zipWithM)
26import Control.Monad.Reader (ReaderT, asks, local, runReaderT)
26import Control.Monad.Reader (ReaderT, asks, local, runReaderT)
27import Control.Monad.State.Strict (StateT, evalStateT)
27import Control.Monad.State.Strict (StateT, evalStateT)
28import Data.Default (Default (..))
28import Data.Default (Default (..))
29−import Data.List (intersect, transpose)
29+import Data.List (transpose)
30import Data.Text (Text)
30import Data.Text (Text)
31import qualified Data.Text as T
31import qualified Data.Text as T
32import Text.Pandoc.Class.PandocMonad (PandocMonad, report)
32import Text.Pandoc.Class.PandocMonad (PandocMonad, report)
@@ -39,6 +39,7 @@ import Text.Pandoc.Shared (camelCaseToHyphenated, escapeURI, isURI, linesToPara,
39import Text.Pandoc.Templates (renderTemplate)
39import Text.Pandoc.Templates (renderTemplate)
40import Text.DocLayout (render, literal)
40import Text.DocLayout (render, literal)
41import Text.Pandoc.Writers.Shared (defField, metaToContext, toLegacyTable)
41import Text.Pandoc.Writers.Shared (defField, metaToContext, toLegacyTable)
42+import qualified Data.Map as M
43data WriterState = WriterState {
44data WriterState = WriterState {
@@ -145,20 +146,13 @@ blockToDokuWiki opts (Header level _ inlines) = do
145 let eqs = T.replicate ( 7 - level ) "="
146 let eqs = T.replicate ( 7 - level ) "="
146 return $ eqs <> " " <> contents <> " " <> eqs <> "\n"
147 return $ eqs <> " " <> contents <> " " <> eqs <> "\n"
148−blockToDokuWiki _ (CodeBlock (_,classes,_) str) = do
149+blockToDokuWiki _ (CodeBlock (_,classes,_) str) =
149− let at = classes `intersect` ["actionscript", "ada", "apache", "applescript", "asm", "asp",
150− "autoit", "bash", "blitzbasic", "bnf", "c", "c_mac", "caddcl", "cadlisp", "cfdg", "cfm",
151− "cpp", "cpp-qt", "csharp", "css", "d", "delphi", "diff", "div", "dos", "eiffel", "fortran",
152− "freebasic", "gml", "groovy", "html4strict", "idl", "ini", "inno", "io", "java", "java5",
153− "javascript", "latex", "lisp", "lua", "matlab", "mirc", "mpasm", "mysql", "nsis", "objc",
154− "ocaml", "ocaml-brief", "oobas", "oracle8", "pascal", "perl", "php", "php-brief", "plsql",
155− "python", "qbasic", "rails", "reg", "robots", "ruby", "sas", "scheme", "sdlbasic",
156− "smalltalk", "smarty", "sql", "tcl", "", "thinbasic", "tsql", "vb", "vbnet", "vhdl",
157− "visualfoxpro", "winbatch", "xml", "xpp", "z80"]
158 return $ "<code" <>
150 return $ "<code" <>
159− (case at of
151+ (case classes of
160− [] -> ">\n"
152+ [] -> ""
153+ (x:_) -> " " <> maybe x id (M.lookup x languageNames)) <>
161− (x:_) -> " " <> x <> ">\n") <> str <> "\n</code>"
154+ ">\n" <> str <>
155+ (if "\n" `T.isSuffixOf` str then "" else "\n") <> "</code>\n"
163blockToDokuWiki opts (BlockQuote blocks) = do
157blockToDokuWiki opts (BlockQuote blocks) = do
164 contents <- blockListToDokuWiki opts blocks
158 contents <- blockListToDokuWiki opts blocks
@@ -507,3 +501,19 @@ imageDims opts attr = go (toPx $ dimension Width attr) (toPx $ dimension Height
507 go (Just w) (Just h) = "?" <> w <> "x" <> h
501 go (Just w) (Just h) = "?" <> w <> "x" <> h
508 go Nothing (Just h) = "?0x" <> h
502 go Nothing (Just h) = "?0x" <> h
509 go Nothing Nothing = ""
503 go Nothing Nothing = ""
505+languageNames :: M.Map Text Text
506+languageNames = M.fromList $
508+ ,("coffee", "cofeescript")
509+ ,("commonlisp", "lisp")
512+ ,("makefile", "make")
513+ ,("objectivec", "objc")
515+ ,("sqlmysql", "mysql")
516+ ,("sqlpostgresql", "postgresql")
518+ ,("xorg", "xorgconf")