@@ -181,11 +181,7 @@ blockToOrg (Header level attr inlines) = do
181181blockToOrg (CodeBlock (_,classes,_) str) = do
182182 opts <- stOptions <$> get
183183 let tabstop = writerTabStop opts
184− let at = classes `intersect` ["asymptote", "C", "clojure", "css", "ditaa",
185− "dot", "emacs-lisp", "gnuplot", "haskell", "js", "latex",
186− "ledger", "lisp", "matlab", "mscgen", "ocaml", "octave",
187− "oz", "perl", "plantuml", "python", "R", "ruby", "sass",
188− "scheme", "screen", "sh", "sql", "sqlite"]
184+ let at = map pandocLangToOrg classes `intersect` orgLangIdentifiers
189185 let (beg, end) = case at of
190186 [] -> ("#+BEGIN_EXAMPLE", "#+END_EXAMPLE")
191187 (x:_) -> ("#+BEGIN_SRC " ++ x, "#+END_SRC")
@@ -385,3 +381,25 @@ orgPath src =
385381 let (scheme, path) = break (== ':') cs
386382 in all (\c -> isAlphaNum c || c `elem` (".-"::String)) scheme
387383 && not (null path)
384+
385+-- | Translate from pandoc's programming language identifiers to those used by
386+-- org-mode.
387+pandocLangToOrg :: String -> String
388+pandocLangToOrg cs =
389+ case cs of
390+ "c" -> "C"
391+ "cpp" -> "C++"
392+ "commonlisp" -> "lisp"
393+ "r" -> "R"
394+ "bash" -> "sh"
395+ _ -> cs
396+
397+-- | List of language identifiers recognized by org-mode.
398+orgLangIdentifiers :: [String]
399+orgLangIdentifiers =
400+ [ "asymptote", "awk", "C", "C++", "clojure", "css", "d", "ditaa", "dot"
401+ , "calc", "emacs-lisp", "fortran", "gnuplot", "haskell", "java", "js"
402+ , "latex", "ledger", "lisp", "lilypond", "matlab", "mscgen", "ocaml"
403+ , "octave", "org", "oz", "perl", "plantuml", "processing", "python", "R"
404+ , "ruby", "sass", "scheme", "screen", "sed", "sh", "sql", "sqlite"
405+ ]