Doxygen の文字化け

現在の最新版 Doxygen 1.8.6 で不可解な文字化けに遭遇したのでメモ。

/**
 * @file
 * This header file provides useful functions for handling UTF-8 and UTF-16 string.
 *
 * @section VALID_UTF8 Valid UTF-8 sequences.
 *
 * <pre>
 * +--------------------+--------+--------+--------+--------+
 * |     Code point     | byte 1 | byte 2 | byte 3 | byte 4 |
 * +--------------------+--------+--------+--------+--------+
 * | U+000000..U+00007F | 00..7F |        |        |        |
 * | U+000080..U+0007FF | C2..DF | 80..BF |        |        |
 * | U+000800..U+000FFF | E0     | A0..BF | 80..BF |        |
 * | U+001000..U+00CFFF | E1..EC | 80..BF | 80..BF |        |
 * | U+00D000..U+00D7FF | ED     | 80..9F | 80..BF |        |
 * | U+00D800..U+00DFFF |  Reserved area for Surrogate Pair |
 * | U+00E000..U+00FFFF | EE..EF | 80..BF | 80..BF |        |
 * | U+010000..U+03FFFF | F0     | 90..BF | 80..BF | 80..BF |
 * | U+040000..U+0FFFFF | F1..F3 | 80..BF | 80..BF | 80..BF |
 * | U+100000..U+10FFFF | F4     | 80..8F | 80..BF | 80..BF |
 * +--------------------+--------+--------+--------+--------+
 * </pre>
 *
 * This is specified by RFC-3629. The following BNF is RFC-3629 specified.
 *
 * <pre>
 * UTF8-octets = *( UTF8-char )
 * UTF8-char   = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4
 * UTF8-1      = %x00-7F
 * UTF8-2      = %xC2-DF UTF8-tail
 * UTF8-3      = %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
 *               %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
 * UTF8-4      = %xF0 %x90-BF 2( UTF8-tail ) / %xF1-F3 3( UTF8-tail ) /
 *               %xF4 %x80-8F 2( UTF8-tail )
 * UTF8-tail   = %x80-BF
 * </pre>
 *
 * - RFC-3629: UTF-8, a transformation format of ISO 10646
 *
 * @section VALID_UTF16 Valid UTF-16 sequences.
 *
 * <pre>
 * +--------------------+------------+------------+
 * |     Code point     |   SP High  |   SP Low   |
 * +--------------------+------------+------------+
 * | U+000000..U+00D7FF |            | 0000..D7FF |
 * | U+00E000..U+00FFFF |            | E000..FFFF |
 * | U+010000..U+10FFFF | D800..DBFF | DC00..DFFF |
 * +--------------------+------------+------------+
 * </pre>
 */

こんな感じのヘッダドキュメントを Doxygen で出力しながら確認していたところ、どうやっても最後のテーブルがずれてしまう。

これは、ドキュメントの最後の段落に表っぽいものがあると、具体的には -+ という部分が —+ という文字に置き換わってしまうためのようである。置き換わった後の文字は U+E28094 で "EM DASH" という名前の数あるダッシュのひとつ。何故置き換わってしまうのかは不明。pre タグに入っているかどうかは関係なく、最後の段落にあるというのが問題。

この問題は以下の方法で回避可能。

  • 最後を避ける
  • 表を pre タグではなく Markdown 記法にする

とりあえず、最後を避ける事で以下のように治った。