@@ -38,7 +38,8 @@ import Text.Pandoc.Pretty (render)
3838import Text.Pandoc.ImageSize
3939import Text.Pandoc.Templates (renderTemplate')
4040import Text.Pandoc.XML ( escapeStringForXML )
41−import Data.List ( intersect, intercalate )
41+import Data.List ( intercalate )
42+import qualified Data.Set as Set
4243import Network.URI ( isURI )
4344import Control.Monad.Reader
4445import Control.Monad.State
@@ -137,23 +138,15 @@ blockToMediaWiki (Header level _ inlines) = do
137138 return $ eqs ++ " " ++ contents ++ " " ++ eqs ++ "\n"
138139
139140blockToMediaWiki (CodeBlock (_,classes,_) str) = do
140− let at = classes `intersect` ["actionscript", "ada", "apache", "applescript", "asm", "asp",
141− "autoit", "bash", "blitzbasic", "bnf", "c", "c_mac", "caddcl", "cadlisp", "cfdg", "cfm",
142− "cpp", "cpp-qt", "csharp", "css", "d", "delphi", "diff", "div", "dos", "eiffel", "fortran",
143− "freebasic", "gml", "groovy", "html4strict", "idl", "ini", "inno", "io", "java", "java5",
144− "javascript", "latex", "lisp", "lua", "matlab", "mirc", "mpasm", "mysql", "nsis", "objc",
145− "ocaml", "ocaml-brief", "oobas", "oracle8", "pascal", "perl", "php", "php-brief", "plsql",
146− "python", "qbasic", "rails", "reg", "robots", "ruby", "sas", "scheme", "sdlbasic",
147− "smalltalk", "smarty", "sql", "tcl", "", "thinbasic", "tsql", "vb", "vbnet", "vhdl",
148− "visualfoxpro", "winbatch", "xml", "xpp", "z80"]
141+ let at = Set.fromList classes `Set.intersection` highlightingLangs
149142 return $
150− if null at
151− then "<pre" ++ (if null classes
152− then ">"
153− else " class=\"" ++ unwords classes ++ "\">") ++
154− escapeString str ++ "</pre>"
155− else "<source lang=\"" ++ head at ++ "\">" ++ str ++ "</source>"
156− -- note: no escape!
143+ case Set.toList at of
144+ [] -> "<pre" ++ (if null classes
145+ then ">"
146+ else " class=\"" ++ unwords classes ++ "\">") ++
147+ escapeString str ++ "</pre>"
148+ (l:_) -> "<source lang=\"" ++ l ++ "\">" ++ str ++ "</source>"
149+ -- note: no escape! even for <!
157150
158151blockToMediaWiki (BlockQuote blocks) = do
159152 contents <- blockListToMediaWiki blocks
@@ -440,3 +433,634 @@ inlineToMediaWiki (Note contents) = do
440433 modify (\s -> s { stNotes = True })
441434 return $ "<ref>" ++ contents' ++ "</ref>"
442435 -- note - may not work for notes with multiple blocks
436+
437+highlightingLangs :: Set.Set String
438+highlightingLangs = Set.fromList [
439+ "abap",
440+ "abl",
441+ "abnf",
442+ "aconf",
443+ "actionscript",
444+ "actionscript3",
445+ "ada",
446+ "ada2005",
447+ "ada95",
448+ "adl",
449+ "agda",
450+ "ahk",
451+ "alloy",
452+ "ambienttalk",
453+ "ambienttalk/2",
454+ "antlr",
455+ "antlr-actionscript",
456+ "antlr-as",
457+ "antlr-c#",
458+ "antlr-cpp",
459+ "antlr-csharp",
460+ "antlr-java",
461+ "antlr-objc",
462+ "antlr-perl",
463+ "antlr-python",
464+ "antlr-rb",
465+ "antlr-ruby",
466+ "apache",
467+ "apacheconf",
468+ "apl",
469+ "applescript",
470+ "arduino",
471+ "arexx",
472+ "as",
473+ "as3",
474+ "asm",
475+ "aspectj",
476+ "aspx-cs",
477+ "aspx-vb",
478+ "asy",
479+ "asymptote",
480+ "at",
481+ "autohotkey",
482+ "autoit",
483+ "awk",
484+ "b3d",
485+ "basemake",
486+ "bash",
487+ "basic",
488+ "bat",
489+ "batch",
490+ "bbcode",
491+ "because",
492+ "befunge",
493+ "bf",
494+ "blitzbasic",
495+ "blitzmax",
496+ "bmax",
497+ "bnf",
498+ "boo",
499+ "boogie",
500+ "bplus",
501+ "brainfuck",
502+ "bro",
503+ "bsdmake",
504+ "bugs",
505+ "c",
506+ "c#",
507+ "c++",
508+ "c++-objdumb",
509+ "c-objdump",
510+ "ca65",
511+ "cadl",
512+ "camkes",
513+ "cbmbas",
514+ "ceylon",
515+ "cf3",
516+ "cfc",
517+ "cfengine3",
518+ "cfg",
519+ "cfm",
520+ "cfs",
521+ "chai",
522+ "chaiscript",
523+ "chapel",
524+ "cheetah",
525+ "chpl",
526+ "cirru",
527+ "cl",
528+ "clay",
529+ "clipper",
530+ "clj",
531+ "cljs",
532+ "clojure",
533+ "clojurescript",
534+ "cmake",
535+ "cobol",
536+ "cobolfree",
537+ "coffee",
538+ "coffee-script",
539+ "coffeescript",
540+ "common-lisp",
541+ "componentpascal",
542+ "console",
543+ "control",
544+ "coq",
545+ "cp",
546+ "cpp",
547+ "cpp-objdump",
548+ "cpsa",
549+ "crmsh",
550+ "croc",
551+ "cry",
552+ "cryptol",
553+ "csh",
554+ "csharp",
555+ "csound",
556+ "csound-csd",
557+ "csound-document",
558+ "csound-orc",
559+ "csound-sco",
560+ "csound-score",
561+ "css",
562+ "css+django",
563+ "css+erb",
564+ "css+genshi",
565+ "css+genshitext",
566+ "css+jinja",
567+ "css+lasso",
568+ "css+mako",
569+ "css+mozpreproc",
570+ "css+myghty",
571+ "css+php",
572+ "css+ruby",
573+ "css+smarty",
574+ "cu",
575+ "cucumber",
576+ "cuda",
577+ "cxx-objdump",
578+ "cypher",
579+ "cython",
580+ "d",
581+ "d-objdump",
582+ "dart",
583+ "debcontrol",
584+ "debsources",
585+ "delphi",
586+ "dg",
587+ "diff",
588+ "django",
589+ "docker",
590+ "dockerfile",
591+ "dosbatch",
592+ "doscon",
593+ "dosini",
594+ "dpatch",
595+ "dtd",
596+ "duby",
597+ "duel",
598+ "dylan",
599+ "dylan-console",
600+ "dylan-lid",
601+ "dylan-repl",
602+ "earl-grey",
603+ "earlgrey",
604+ "easytrieve",
605+ "ebnf",
606+ "ec",
607+ "ecl",
608+ "eg",
609+ "eiffel",
610+ "elisp",
611+ "elixir",
612+ "elm",
613+ "emacs",
614+ "erb",
615+ "erl",
616+ "erlang",
617+ "evoque",
618+ "ex",
619+ "exs",
620+ "ezhil",
621+ "factor",
622+ "fan",
623+ "fancy",
624+ "felix",
625+ "fish",
626+ "fishshell",
627+ "flx",
628+ "fortran",
629+ "fortranfixed",
630+ "foxpro",
631+ "fsharp",
632+ "fy",
633+ "gap",
634+ "gas",
635+ "gawk",
636+ "genshi",
637+ "genshitext",
638+ "gherkin",
639+ "glsl",
640+ "gnuplot",
641+ "go",
642+ "golo",
643+ "gooddata-cl",
644+ "gosu",
645+ "groff",
646+ "groovy",
647+ "gst",
648+ "haml",
649+ "handlebars",
650+ "haskell",
651+ "haxe",
652+ "haxeml",
653+ "hexdump",
654+ "hs",
655+ "html",
656+ "html+cheetah",
657+ "html+django",
658+ "html+erb",
659+ "html+evoque",
660+ "html+genshi",
661+ "html+handlebars",
662+ "html+jinja",
663+ "html+kid",
664+ "html+lasso",
665+ "html+mako",
666+ "html+myghty",
667+ "html+php",
668+ "html+ruby",
669+ "html+smarty",
670+ "html+spitfire",
671+ "html+twig",
672+ "html+velocity",
673+ "htmlcheetah",
674+ "htmldjango",
675+ "http",
676+ "hx",
677+ "hxml",
678+ "hxsl",
679+ "hy",
680+ "hybris",
681+ "hylang",
682+ "i6",
683+ "i6t",
684+ "i7",
685+ "idl",
686+ "idl4",
687+ "idr",
688+ "idris",
689+ "iex",
690+ "igor",
691+ "igorpro",
692+ "ik",
693+ "inform6",
694+ "inform7",
695+ "ini",
696+ "io",
697+ "ioke",
698+ "irb",
699+ "irc",
700+ "isabelle",
701+ "j",
702+ "jade",
703+ "jags",
704+ "jasmin",
705+ "jasminxt",
706+ "java",
707+ "javascript",
708+ "javascript+cheetah",
709+ "javascript+django",
710+ "javascript+erb",
711+ "javascript+genshi",
712+ "javascript+genshitext",
713+ "javascript+jinja",
714+ "javascript+lasso",
715+ "javascript+mako",
716+ "javascript+mozpreproc",
717+ "javascript+myghty",
718+ "javascript+php",
719+ "javascript+ruby",
720+ "javascript+smarty",
721+ "javascript+spitfire",
722+ "jbst",
723+ "jcl",
724+ "jinja",
725+ "jl",
726+ "jlcon",
727+ "jproperties",
728+ "js",
729+ "js+cheetah",
730+ "js+django",
731+ "js+erb",
732+ "js+genshi",
733+ "js+genshitext",
734+ "js+jinja",
735+ "js+lasso",
736+ "js+mako",
737+ "js+myghty",
738+ "js+php",
739+ "js+ruby",
740+ "js+smarty",
741+ "js+spitfire",
742+ "json",
743+ "json-ld",
744+ "jsonld",
745+ "jsonml+bst",
746+ "jsp",
747+ "julia",
748+ "kal",
749+ "kconfig",
750+ "kernel-config",
751+ "kid",
752+ "koka",
753+ "kotlin",
754+ "ksh",
755+ "lagda",
756+ "lasso",
757+ "lassoscript",
758+ "latex",
759+ "lcry",
760+ "lcryptol",
761+ "lean",
762+ "less",
763+ "lhaskell",
764+ "lhs",
765+ "lid",
766+ "lidr",
767+ "lidris",
768+ "lighttpd",
769+ "lighty",
770+ "limbo",
771+ "linux-config",
772+ "liquid",
773+ "lisp",
774+ "literate-agda",
775+ "literate-cryptol",
776+ "literate-haskell",
777+ "literate-idris",
778+ "live-script",
779+ "livescript",
780+ "llvm",
781+ "logos",
782+ "logtalk",
783+ "lsl",
784+ "lua",
785+ "m2",
786+ "make",
787+ "makefile",
788+ "mako",
789+ "man",
790+ "maql",
791+ "mask",
792+ "mason",
793+ "mathematica",
794+ "matlab",
795+ "matlabsession",
796+ "mawk",
797+ "menuconfig",
798+ "mf",
799+ "minid",
800+ "mma",
801+ "modelica",
802+ "modula2",
803+ "moin",
804+ "monkey",
805+ "moo",
806+ "moocode",
807+ "moon",
808+ "moonscript",
809+ "mozhashpreproc",
810+ "mozpercentpreproc",
811+ "mq4",
812+ "mq5",
813+ "mql",
814+ "mql4",
815+ "mql5",
816+ "msc",
817+ "mscgen",
818+ "mupad",
819+ "mxml",
820+ "myghty",
821+ "mysql",
822+ "nasm",
823+ "nawk",
824+ "nb",
825+ "nemerle",
826+ "nesc",
827+ "newlisp",
828+ "newspeak",
829+ "nginx",
830+ "nim",
831+ "nimrod",
832+ "nit",
833+ "nix",
834+ "nixos",
835+ "nroff",
836+ "nsh",
837+ "nsi",
838+ "nsis",
839+ "numpy",
840+ "obj-c",
841+ "obj-c++",
842+ "obj-j",
843+ "objc",
844+ "objc++",
845+ "objdump",
846+ "objdump-nasm",
847+ "objective-c",
848+ "objective-c++",
849+ "objective-j",
850+ "objectivec",
851+ "objectivec++",
852+ "objectivej",
853+ "objectpascal",
854+ "objj",
855+ "ocaml",
856+ "octave",
857+ "odin",
858+ "ooc",
859+ "opa",
860+ "openbugs",
861+ "openedge",
862+ "pacmanconf",
863+ "pan",
864+ "parasail",
865+ "pas",
866+ "pascal",
867+ "pawn",
868+ "pcmk",
869+ "perl",
870+ "perl6",
871+ "php",
872+ "php3",
873+ "php4",
874+ "php5",
875+ "pig",
876+ "pike",
877+ "pkgconfig",
878+ "pl",
879+ "pl6",
880+ "plpgsql",
881+ "po",
882+ "posh",
883+ "postgres",
884+ "postgres-console",
885+ "postgresql",
886+ "postgresql-console",
887+ "postscr",
888+ "postscript",
889+ "pot",
890+ "pov",
891+ "powershell",
892+ "praat",
893+ "progress",
894+ "prolog",
895+ "properties",
896+ "proto",
897+ "protobuf",
898+ "ps1",
899+ "ps1con",
900+ "psm1",
901+ "psql",
902+ "puppet",
903+ "py",
904+ "py3",
905+ "py3tb",
906+ "pycon",
907+ "pypy",
908+ "pypylog",
909+ "pyrex",
910+ "pytb",
911+ "python",
912+ "python3",
913+ "pyx",
914+ "qbasic",
915+ "qbs",
916+ "qml",
917+ "qvt",
918+ "qvto",
919+ "r",
920+ "racket",
921+ "ragel",
922+ "ragel-c",
923+ "ragel-cpp",
924+ "ragel-d",
925+ "ragel-em",
926+ "ragel-java",
927+ "ragel-objc",
928+ "ragel-rb",
929+ "ragel-ruby",
930+ "raw",
931+ "rb",
932+ "rbcon",
933+ "rconsole",
934+ "rd",
935+ "rebol",
936+ "red",
937+ "red/system",
938+ "redcode",
939+ "registry",
940+ "resource",
941+ "resourcebundle",
942+ "rest",
943+ "restructuredtext",
944+ "rexx",
945+ "rhtml",
946+ "rkt",
947+ "roboconf-graph",
948+ "roboconf-instances",
949+ "robotframework",
950+ "rout",
951+ "rql",
952+ "rsl",
953+ "rst",
954+ "rts",
955+ "ruby",
956+ "rust",
957+ "s",
958+ "sage",
959+ "salt",
960+ "sass",
961+ "sc",
962+ "scala",
963+ "scaml",
964+ "scheme",
965+ "scilab",
966+ "scm",
967+ "scss",
968+ "sh",
969+ "shell",
970+ "shell-session",
971+ "shen",
972+ "slim",
973+ "sls",
974+ "smali",
975+ "smalltalk",
976+ "smarty",
977+ "sml",
978+ "snobol",
979+ "sources.list",
980+ "sourceslist",
981+ "sp",
982+ "sparql",
983+ "spec",
984+ "spitfire",
985+ "splus",
986+ "sql",
987+ "sqlite3",
988+ "squeak",
989+ "squid",
990+ "squid.conf",
991+ "squidconf",
992+ "ssp",
993+ "st",
994+ "stan",
995+ "supercollider",
996+ "sv",
997+ "swift",
998+ "swig",
999+ "systemverilog",
1000+ "tads3",
1001+ "tap",
1002+ "tcl",
1003+ "tcsh",
1004+ "tcshcon",
1005+ "tea",
1006+ "termcap",
1007+ "terminfo",
1008+ "terraform",
1009+ "tex",
1010+ "text",
1011+ "tf",
1012+ "thrift",
1013+ "todotxt",
1014+ "trac-wiki",
1015+ "trafficscript",
1016+ "treetop",
1017+ "ts",
1018+ "turtle",
1019+ "twig",
1020+ "typescript",
1021+ "udiff",
1022+ "urbiscript",
1023+ "v",
1024+ "vala",
1025+ "vapi",
1026+ "vb.net",
1027+ "vbnet",
1028+ "vctreestatus",
1029+ "velocity",
1030+ "verilog",
1031+ "vfp",
1032+ "vgl",
1033+ "vhdl",
1034+ "vim",
1035+ "winbatch",
1036+ "winbugs",
1037+ "x10",
1038+ "xbase",
1039+ "xml",
1040+ "xml+cheetah",
1041+ "xml+django",
1042+ "xml+erb",
1043+ "xml+evoque",
1044+ "xml+genshi",
1045+ "xml+jinja",
1046+ "xml+kid",
1047+ "xml+lasso",
1048+ "xml+mako",
1049+ "xml+myghty",
1050+ "xml+php",
1051+ "xml+ruby",
1052+ "xml+smarty",
1053+ "xml+spitfire",
1054+ "xml+velocity",
1055+ "xq",
1056+ "xql",
1057+ "xqm",
1058+ "xquery",
1059+ "xqy",
1060+ "xslt",
1061+ "xten",
1062+ "xtend",
1063+ "xul+mozpreproc",
1064+ "yaml",
1065+ "yaml+jinja",
1066+ "zephir" ]