こういう感じのスタイルシートを当てておいて,
pre.code { position: relative; } pre.code[data-lang-label]::before { content: attr(data-lang-label); font-family: 'Helvetica Neue', 'Helvetica', 'Arial', 'Hiragino Kaku Gothic Pro', 'Meiryo', 'MS PGothic', sans-serif; font-style: italic; position: absolute; top: 0; right: 0; background-color: #FFFFFF; border-radius: 0 0 0 4px; padding: 0 7px; } pre.code[data-lang-label]:hover::before { display: none; }
雑なスクリプトをフッターとかに置いて pre.code
に data-lang-label
という属性をつけてやる.
<script type="text/javascript"> window.addEventListener("load", function onLoad() { window.removeEventListener("load", onLoad); var langLabels = { "actionscript": "ActionScript", "awk" : "AWK", "bc" : "bc", "brainfuck" : "Brainfuck", "c" : "C", "cabal" : "Cabal", "cl" : "Common Lisp", "clojure" : "Clojure", "cmake" : "CMake", "cpp" : "C++", "cs" : "C#", "css" : "CSS", "coffee" : "CoffeeScript", "crystal" : "Crystal", "d" : "D", "dart" : "Dart", "elixir" : "Elixir", "erlang" : "Erlang", "fortran" : "Fortran", "fsharp" : "F#", "go" : "Go", "haskell" : "Haskell", "hatena" : "Hatena", "haxe" : "Haxe", "html" : "HTML", "io" : "Io", "lex" : "Lex", "lhaskell" : "Literate Haskell", "lisp" : "Lisp", "lua" : "Lua", "java" : "Java", "javascript" : "JavaScript", "json" : "JSON", "julia" : "Julia", "kotlin" : "Kotlin", "make" : "Makefile", "markdown" : "Markdown", "objc" : "Objective-C", "ocaml" : "OCaml", "perl" : "Perl", "perl6" : "Perl6", "php" : "PHP", "prolog" : "Prolog", "python" : "Python", "r" : "R", "ruby" : "Ruby", "rust" : "Rust", "sass" : "Sass", "sed" : "sed", "scala" : "Scala", "scheme" : "Scheme", "sh" : "Shell script", "sml" : "Standard ML", "sql" : "SQL", "svg" : "SVG", "swift" : "Swift", "tex" : "TeX", "typescript" : "TypeScript", "vim" : "Vim script", "xml" : "XML", "yacc" : "Yacc", "yaml" : "YAML", "zsh" : "Zsh", }; var codes = document.querySelectorAll("pre.code"); var len = codes.length; for (var i = 0; i < len; i++) { var code = codes[i]; var lang = code.dataset.lang; if (lang) { code.dataset.langLabel = langLabels[lang.toLowerCase()] || lang; } } }); </script>
はてなブログでシンタックスハイライトできるものの一覧はここにありますが, 全部書くのはしんどかったので, 適当に私自身が使うかもしれないやつ (たぶんほとんどは使わないけど) だけ用意してあります. もしコピペするときは適当に増やしたり減らしたりしてください.
どのように表示されるかは見ての通り. マウスホバーで消えるので邪魔になることはないと思う.
console.log("ハロー!!");
main = putStrLn "きんいろ"
let _ = print_endline "モザイク"
ちなみにハイライトできない言語名を書いても (HTML に反映されないので) 表示されません.