Haddock で日本語が出ない原因を調べる
Haddock では non-ASCII な文字は全て ෝ 形式で出力するという仕様となっている。乱暴だとは思うが、とりあえずこうしておけばブラウザからはちゃんと見えるし、仕様については、まぁいいんでないかなと思う。
しかし実際にやってみると、これすらも出力されない。この原因を調べた。
文字列変換部分
< や > といった文字は、HTML で出力するためにはエスケープしなければならない。こういった処理を行なっているのが、次の関数。
-- Haddock.Utils.Html.hs -- Processing Strings into Html friendly things. -- This converts a String to a Html String. stringToHtmlString :: String -> String stringToHtmlString = concatMap fixChar where fixChar '<' = "<" fixChar '>' = ">" fixChar '&' = "&" fixChar '"' = """ fixChar c | isAscii c = [c] | otherwise = "&#x" ++ showHex (ord c) ";"
ASCII ならそのまま、それ以外なら数値化した文字を 16 進表記で文字列化している。問題なさそうだ。
では、そもそもこの関数に渡される文字列はどうなっているのか。trace してみた。
import Debug.Trace (trace) trace :: (Show a) => a -> a trace' x = trace' (show x) x stringToHtmlString = concatMap fixChar . trace'
結果は、日本語の部分が空白となって出力された。つまり stringToHtmlString に渡される前の時点で空白になっちゃってるので、stringToHtmlString でどうにかしようと思ってもどうにもできないでいるのだ。