@@ -26,7 +26,7 @@ import Control.Monad (zipWithM)
2626import Control.Monad.Reader (ReaderT, asks, local, runReaderT)
2727import Control.Monad.State.Strict (StateT, evalStateT)
2828import Data.Default (Default (..))
29−import Data.List (intersect, transpose)
29+import Data.List (transpose)
3030import Data.Text (Text)
3131import qualified Data.Text as T
3232import Text.Pandoc.Class.PandocMonad (PandocMonad, report)
@@ -39,6 +39,7 @@ import Text.Pandoc.Shared (camelCaseToHyphenated, escapeURI, isURI, linesToPara,
3939import Text.Pandoc.Templates (renderTemplate)
4040import Text.DocLayout (render, literal)
4141import Text.Pandoc.Writers.Shared (defField, metaToContext, toLegacyTable)
42+import qualified Data.Map as M
4243
4344data WriterState = WriterState {
4445 }
@@ -145,20 +146,13 @@ blockToDokuWiki opts (Header level _ inlines) = do
145146 let eqs = T.replicate ( 7 - level ) "="
146147 return $ eqs <> " " <> contents <> " " <> eqs <> "\n"
147148
148−blockToDokuWiki _ (CodeBlock (_,classes,_) str) = do
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"]
149+blockToDokuWiki _ (CodeBlock (_,classes,_) str) =
158150 return $ "<code" <>
159− (case at of
160− [] -> ">\n"
161− (x:_) -> " " <> x <> ">\n") <> str <> "\n</code>"
151+ (case classes of
152+ [] -> ""
153+ (x:_) -> " " <> maybe x id (M.lookup x languageNames)) <>
154+ ">\n" <> str <>
155+ (if "\n" `T.isSuffixOf` str then "" else "\n") <> "</code>\n"
162156
163157blockToDokuWiki opts (BlockQuote blocks) = do
164158 contents <- blockListToDokuWiki opts blocks
@@ -507,3 +501,19 @@ imageDims opts attr = go (toPx $ dimension Width attr) (toPx $ dimension Height
507501 go (Just w) (Just h) = "?" <> w <> "x" <> h
508502 go Nothing (Just h) = "?0x" <> h
509503 go Nothing Nothing = ""
504+
505+languageNames :: M.Map Text Text
506+languageNames = M.fromList $
507+ [("cs", "csharp")
508+ ,("coffee", "cofeescript")
509+ ,("commonlisp", "lisp")
510+ ,("gcc", "c")
511+ ,("html", "html5")
512+ ,("makefile", "make")
513+ ,("objectivec", "objc")
514+ ,("r", "rsplus")
515+ ,("sqlmysql", "mysql")
516+ ,("sqlpostgresql", "postgresql")
517+ ,("sci", "scilab")
518+ ,("xorg", "xorgconf")
519+ ]