美咲フォントの調査(メモ その1)
以前作成した Arduino用の漢字フォントライブラリの更新を前提に実装の見直し中です。
ライブラリはLittle Limitさんが開発&公開している「美咲フォント」を利用しています。
ライブラリは美咲フォントの古いバージョン(2012-06-03 正式公開初版)のJISコードベース版を利用しており、
面倒くさいコード変換(JISコード⇒ユニコード)をしていました。そのための不都合が若干生じていました。
最新版の美咲フォントでは、ユニコードを採用しているので、最新版を使った方が当然良いですね。
そこで、ライブラリ見直しのための調査を行うことにしました。この記事はその調査のメモです。
美咲フォント 最新版(X11 BDF 形式(misaki_bdf_2021-05-05.zip)の「美咲ゴシック第2」を利用する予定です。
□ 美咲フォントのサポート文字
美咲フォントは7,170文字のフォントを実装しています。調べてみると具体的に次の文字ブロックを網羅しています。
Unicode範囲 | 文字ブロック | 文字数 | 美咲フォント 実装文字数 |
備考 |
0000~007F | C0制御文字と基本ラテン文字 | 95 | 95 | 非漢字 |
0080~00FF | C1制御文字とラテン1補助 | 95 | 15 | 非漢字 |
0370~03FF | ギリシア文字及びコプト文字 | 135 | 48 | 非漢字 |
0400~04FF | キリル文字 | 256 | 66 | 非漢字 |
2000~206F | 一般句読点 | 111 | 20 | 非漢字 |
2100~214F | 文字様記号 | 80 | 4 | 非漢字(℃№℡Å) |
2150~218F | 数字に準じるもの | 60 | 10 | 非漢字(ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ) |
2190~21FF | 矢印 | 112 | 6 | 非漢字(←↑→↓⇒⇔) |
2200~22FF | 数学記号 | 256 | 37 | 非漢字 |
2300~23FF | その他の技術用記号 | 256 | 1 | 非漢字(⌒) |
2460~24FF | 囲み英数字 | 160 | 20 | 非漢字 |
2500~257F | けい線素辺 | 128 | 43 | 非漢字 |
2580~259F | ブロック要素 | 32 | 17 | 非漢字 |
25A0~25FF | 幾何学模様 | 96 | 16 | 非漢字 |
2600~26FF | その他の記号 | 256 | 15 | 非漢字(★☆♀♂♠♡♢♣♤♥♦♧♪♭♯) |
3000~303F | CJKの記号及び句読点 | 64 | 24 | 非漢字 |
3040~309F | 平仮名 | 93 | 87 | ひらがな |
30A0~30FF | 片仮名 | 96 | 90 | カタカナ |
3200~32FF | 囲みCJK文字・月 | 256 | 9 | 非漢字(㈱㈲㈹㊤㊥㊦㊧㊨㋿) |
3300~33FF | CJK互換用文字 | 256 | 28 | 非漢字 |
4E00~9FFF | CJK統合漢字 | 20,992 | 6,356 | 漢字・非漢字 |
FF00~FFEF | 半角・全角形 | 225 | 163 | |
合計 | 24,446 | 7,170 |
□ 美咲フォントの1バイト文字のサポート文字
美咲フォントの「C0制御文字と基本ラテン文字」、「C1制御文字とラテン1補助」ブロックの対応状況です。
※ utf-8では、0x80以降は11ビット扱いで2バイトになることに注意
このブロックでの留意事項
・半角 ”¥" は0xA5 を使う。日本語Windows環境では、半角"\" 0x5cが"¥"になるので要注意
・「ラテン1補助」 "§", "¨", "°", "±", "´", "¶", "×", "÷" は
Windows環境の日本語等幅フォントでは全角幅、欧文等幅フォントでは半角幅となる
これらの文字は、シフトJISでは2バイト文字なんですが、ユニコード(※utf-8はで2バイト)では1バイトなんですよね..
シフトJIS環境を慣れ親しんだ私には、若干違和感がありますね~
美咲フォント的には、これらの文字は全角幅扱いです
例:”±"のフォント
□ 半角・全角文字変換に関する留意点
組み込み環境で液晶やLEDドットマトリックスなどの表示器にフォントを表示する場合、全角・半角を意識する必要があります。
半角・全角判定、双方向変換を行うために半角・全角の対応を調べて表にしました。
半角文字 | 全角文字 | 備考 | ||||
コード | 16進数 | 文字 | コード | 16進数 | 文字 | |
32 | 0x20 | 12288 | 0x3000 | |||
33 | 0x21 | ! | 65281 | 0xff01 | ! | |
34 | 0x22 | " | 65282 | 0xff02 | " | ダブルクォートは左、右版もある |
35 | 0x23 | # | 65283 | 0xff03 | # | |
36 | 0x24 | $ | 65284 | 0xff04 | $ | |
37 | 0x25 | % | 65285 | 0xff05 | % | |
38 | 0x26 | & | 65286 | 0xff06 | & | |
39 | 0x27 | ' | 65287 | 0xff07 | ' | シングルクォートは左、右版もある |
40 | 0x28 | ( | 65288 | 0xff08 | ( | |
41 | 0x29 | ) | 65289 | 0xff09 | ) | |
42 | 0x2a | * | 65290 | 0xff0a | * | |
43 | 0x2b | + | 65291 | 0xff0b | + | |
44 | 0x2c | , | 65292 | 0xff0c | , | |
45 | 0x2d | - | 65292 | 0xff0d | − | ハイフン・マイナス、他類似文字あり |
46 | 0x2e | . | 65294 | 0xff0e | . | |
47 | 0x2f | / | 65295 | 0xff0f | / | |
48 | 0x30 | 0 | 65296 | 0xff10 | 0 | |
49 | 0x31 | 1 | 65297 | 0xff11 | 1 | |
50 | 0x32 | 2 | 65298 | 0xff12 | 2 | |
51 | 0x33 | 3 | 65299 | 0xff13 | 3 | |
52 | 0x34 | 4 | 65300 | 0xff14 | 4 | |
53 | 0x35 | 5 | 65301 | 0xff15 | 5 | |
54 | 0x36 | 6 | 65302 | 0xff16 | 6 | |
55 | 0x37 | 7 | 65303 | 0xff17 | 7 | |
56 | 0x38 | 8 | 65304 | 0xff18 | 8 | |
57 | 0x39 | 9 | 65305 | 0xff19 | 9 | |
58 | 0x3a | : | 65306 | 0xff1a | : | |
59 | 0x3b | ; | 65307 | 0xff1b | ; | |
60 | 0x3c | < | 65308 | 0xff1c | < | |
61 | 0x3d | = | 65309 | 0xff1d | = | |
62 | 0x3e | > | 65310 | 0xff1e | > | |
63 | 0x3f | ? | 65311 | 0xff1f | ? | |
64 | 0x40 | @ | 65312 | 0xff20 | @ | |
65 | 0x41 | A | 65313 | 0xff21 | A | |
66 | 0x42 | B | 65314 | 0xff22 | B | |
67 | 0x43 | C | 65315 | 0xff23 | C | |
68 | 0x44 | D | 65316 | 0xff24 | D | |
69 | 0x45 | E | 65317 | 0xff25 | E | |
70 | 0x46 | F | 65318 | 0xff26 | F | |
71 | 0x47 | G | 65319 | 0xff27 | G | |
72 | 0x48 | H | 65320 | 0xff28 | H | |
73 | 0x49 | I | 65321 | 0xff29 | I | |
74 | 0x4a | J | 65322 | 0xff2a | J | |
75 | 0x4b | K | 65323 | 0xff2b | K | |
76 | 0x4c | L | 65324 | 0xff2c | L | |
77 | 0x4d | M | 65325 | 0xff2d | M | |
78 | 0x4e | N | 65326 | 0xff2e | N | |
79 | 0x4f | O | 65327 | 0xff2f | O | |
80 | 0x50 | P | 65328 | 0xff30 | P | |
81 | 0x51 | Q | 65329 | 0xff31 | Q | |
82 | 0x52 | R | 65330 | 0xff32 | R | |
83 | 0x53 | S | 65331 | 0xff33 | S | |
84 | 0x54 | T | 65332 | 0xff34 | T | |
85 | 0x55 | U | 65333 | 0xff35 | U | |
86 | 0x56 | V | 65334 | 0xff36 | V | |
87 | 0x57 | W | 65335 | 0xff37 | W | |
88 | 0x58 | X | 65336 | 0xff38 | X | |
89 | 0x59 | Y | 65337 | 0xff39 | Y | |
90 | 0x5a | Z | 65338 | 0xff3a | Z | |
91 | 0x5b | [ | 65339 | 0xff3b | [ | |
92 | 0x5c | \ | 65340 | 0xff3c | \ | "¥"は0xa5を使う |
93 | 0x5d | ] | 65341 | 0xff3d | ] | |
94 | 0x5e | ^ | 65342 | 0xff3e | ^ | |
95 | 0x5f | _ | 65343 | 0xff3f | _ | |
96 | 0x60 | ` | 65344 | 0xff40 | ` | |
97 | 0x61 | a | 65345 | 0xff41 | a | |
98 | 0x62 | b | 65346 | 0xff42 | b | |
99 | 0x63 | c | 65347 | 0xff43 | c | |
100 | 0x64 | d | 65348 | 0xff44 | d | |
101 | 0x65 | e | 65349 | 0xff45 | e | |
102 | 0x66 | f | 65350 | 0xff46 | f | |
103 | 0x67 | g | 65351 | 0xff47 | g | |
104 | 0x68 | h | 65352 | 0xff48 | h | |
105 | 0x69 | i | 65353 | 0xff49 | i | |
106 | 0x6a | j | 65354 | 0xff4a | j | |
107 | 0x6b | k | 65355 | 0xff4b | k | |
108 | 0x6c | l | 65356 | 0xff4c | l | |
109 | 0x6d | m | 65357 | 0xff4d | m | |
110 | 0x6e | n | 65358 | 0xff4e | n | |
111 | 0x6f | o | 65359 | 0xff4f | o | |
112 | 0x70 | p | 65360 | 0xff50 | p | |
113 | 0x71 | q | 65361 | 0xff51 | q | |
114 | 0x72 | r | 65362 | 0xff52 | r | |
115 | 0x73 | s | 65363 | 0xff53 | s | |
116 | 0x74 | t | 65364 | 0xff54 | t | |
117 | 0x75 | u | 65365 | 0xff55 | u | |
118 | 0x76 | v | 65366 | 0xff56 | v | |
119 | 0x77 | w | 65367 | 0xff57 | w | |
120 | 0x78 | x | 65368 | 0xff58 | x | |
121 | 0x79 | y | 65369 | 0xff59 | y | |
122 | 0x7a | z | 65370 | 0xff5a | z | |
123 | 0x7b | { | 65371 | 0xff5b | { | |
124 | 0x7c | | | 65372 | 0xff5c | | | |
125 | 0x7d | } | 65373 | 0xff5d | } | |
126 | 0x7e | ~ | 65374 | 0xff5e | ~ | |
162 | 0xa2 | ¢ | 65504 | 0xffe0 | ¢ | |
163 | 0xa3 | £ | 65505 | 0xffe1 | £ | |
165 | 0xa5 | ¥ | 65509 | 0xffe5 | ¥ | \記号はこれを使う |
166 | 0xa6 | ¦ | 65508 | 0xffe4 | ¦ | |
167 | 0xa7 | § | 167 | 0xa7 | § | 1バイトで全角幅 |
168 | 0xa8 | ¨ | 168 | 0xa8 | ¨ | 1バイトで全角幅 |
172 | 0xac | ¬ | 65506 | 0xffe2 | ¬ | |
173 | 0xad | | 173 | 0xad | | ソフトハイフン、1バイトで全角幅 |
175 | 0xaf | ¯ | 65507 | 0xffe3 |  ̄ | マクロン |
176 | 0xb0 | ° | 176 | 0xb0 | ° | 度、1バイトで全角幅 |
177 | 0xb1 | ± | 177 | 0xb1 | ± | 1バイトで全角幅 |
180 | 0xb4 | ´ | 180 | 0xb4 | ´ | アクセント、1バイトで全角幅 |
182 | 0xb6 | ¶ | 182 | 0xb6 | ¶ | 段落記号、1バイトで全角幅 |
215 | 0xd7 | × | 215 | 0xd7 | × | 乗算記号、1バイトで全角幅 |
247 | 0xf7 | ÷ | 247 | 0xf7 | ÷ | 除算記号、1バイトで全角幅 |
65377 | 0xff61 | 。 | 12290 | 0x3002 | 。 | |
65378 | 0xff62 | 「 | 12300 | 0x300c | 「 | |
65379 | 0xff63 | 」 | 12301 | 0x300d | 」 | |
65380 | 0xff64 | 、 | 12289 | 0x3001 | 、 | |
65381 | 0xff65 | ・ | 12539 | 0x30fb | ・ | |
65382 | 0xff66 | ヲ | 12530 | 0x30f2 | ヲ | |
65383 | 0xff67 | ァ | 12449 | 0x30a1 | ァ | |
65384 | 0xff68 | ィ | 12451 | 0x30a3 | ィ | |
65385 | 0xff69 | ゥ | 12453 | 0x30a5 | ゥ | |
65386 | 0xff6a | ェ | 12455 | 0x30a7 | ェ | |
65387 | 0xff6b | ォ | 12457 | 0x30a9 | ォ | |
65388 | 0xff6c | ャ | 12515 | 0x30e3 | ャ | |
65389 | 0xff6d | ュ | 12517 | 0x30e5 | ュ | |
65390 | 0xff6e | ョ | 12519 | 0x30e7 | ョ | |
65391 | 0xff6f | ッ | 12483 | 0x30c3 | ッ | |
65392 | 0xff70 | ー | 12540 | 0x30fc | ー | |
65393 | 0xff71 | ア | 12450 | 0x30a2 | ア | |
65394 | 0xff72 | イ | 12452 | 0x30a4 | イ | |
65395 | 0xff73 | ウ | 12454 | 0x30a6 | ウ | |
65396 | 0xff74 | エ | 12456 | 0x30a8 | エ | |
65397 | 0xff75 | オ | 12458 | 0x30aa | オ | |
65398 | 0xff76 | カ | 12459 | 0x30ab | カ | |
65399 | 0xff77 | キ | 12461 | 0x30ad | キ | |
65400 | 0xff78 | ク | 12463 | 0x30af | ク | |
65401 | 0xff79 | ケ | 12465 | 0x30b1 | ケ | |
65402 | 0xff7a | コ | 12467 | 0x30b3 | コ | |
65403 | 0xff7b | サ | 12469 | 0x30b5 | サ | |
65404 | 0xff7c | シ | 12471 | 0x30b7 | シ | |
65405 | 0xff7d | ス | 12473 | 0x30b9 | ス | |
65406 | 0xff7e | セ | 12475 | 0x30bb | セ | |
65407 | 0xff7f | ソ | 12477 | 0x30bd | ソ | |
65408 | 0xff80 | タ | 12479 | 0x30bf | タ | |
65409 | 0xff81 | チ | 12481 | 0x30c1 | チ | |
65410 | 0xff82 | ツ | 12484 | 0x30c4 | ツ | |
65411 | 0xff83 | テ | 12486 | 0x30c6 | テ | |
65412 | 0xff84 | ト | 12488 | 0x30c8 | ト | |
65413 | 0xff85 | ナ | 12490 | 0x30ca | ナ | |
65414 | 0xff86 | ニ | 12491 | 0x30cb | ニ | |
65415 | 0xff87 | ヌ | 12492 | 0x30cc | ヌ | |
65416 | 0xff88 | ネ | 12493 | 0x30cd | ネ | |
65417 | 0xff89 | ノ | 12494 | 0x30ce | ノ | |
65418 | 0xff8a | ハ | 12495 | 0x30cf | ハ | |
65419 | 0xff8b | ヒ | 12498 | 0x30d2 | ヒ | |
65420 | 0xff8c | フ | 12501 | 0x30d5 | フ | |
65421 | 0xff8d | ヘ | 12504 | 0x30d8 | ヘ | |
65422 | 0xff8e | ホ | 12507 | 0x30db | ホ | |
65423 | 0xff8f | マ | 12510 | 0x30de | マ | |
65424 | 0xff90 | ミ | 12511 | 0x30df | ミ | |
65425 | 0xff91 | ム | 12512 | 0x30e0 | ム | |
65426 | 0xff92 | メ | 12513 | 0x30e1 | メ | |
65427 | 0xff93 | モ | 12514 | 0x30e2 | モ | |
65428 | 0xff94 | ヤ | 12516 | 0x30e4 | ヤ | |
65429 | 0xff95 | ユ | 12518 | 0x30e6 | ユ | |
65430 | 0xff96 | ヨ | 12520 | 0x30e8 | ヨ | |
65431 | 0xff97 | ラ | 12521 | 0x30e9 | ラ | |
65432 | 0xff98 | リ | 12522 | 0x30ea | リ | |
65433 | 0xff99 | ル | 12523 | 0x30eb | ル | |
65434 | 0xff9a | レ | 12524 | 0x30ec | レ | |
65435 | 0xff9b | ロ | 12525 | 0x30ed | ロ | |
65436 | 0xff9c | ワ | 12527 | 0x30ef | ワ | |
65437 | 0xff9d | ン | 12531 | 0x30f3 | ン | |
65438 | 0xff9e | ゙ | 12443 | 0x309b | ゛ | |
65439 | 0xff9f | ゚ | 12444 | 0x309c | ゜ |
半角・全角変換での留意点
・基本ラテン文字(半角スペースを除く 0x21~0x7e)の全角コードは連続性があり、次の式で変換できる
全角コード = 半角コード - 0x20 + 0xff00
・ラテン1補助文字(C1を除く 0x80~0xff)は次の文字のみ変換対応すればよい
'¢' 0xa2 ⇒ 0xffe0
'£' 0xa3 ⇒ 0xffe1
'¥' 0xa5 ⇒ 0xffe5
'¦' 0xa6 ⇒ 0xffe4
'¬' 0xac ⇒ 0xffe2
'¯' 0xaf ⇒ 0xffe3
・半角カタカナは、半角コードが連続性があるのに対し、全角コードは連続性がないので変換のためのテーブルが必要となる
1バイトコードのテーブル(配列)を用意して、次のように参照すれば変換できますね
kana_h2z_table = (
0x02,0x0c,0x0d,0x01,0xfb,0xf2,0xa1,0xa3,
0xa5,0xa7,0xa9,0xe3,0xe5,0xe7,0xc3,0xfc,
0xa2,0xa4,0xa6,0xa8,0xaa,0xab,0xad,0xaf,
0xb1,0xb3,0xb5,0xb7,0xb9,0xbb,0xbd,0xbf,
0xc1,0xc4,0xc6,0xc8,0xca,0xcb,0xcc,0xcd,
0xce,0xcf,0xd2,0xd5,0xd8,0xdb,0xde,0xdf,
0xe0,0xe1,0xe2,0xe4,0xe6,0xe8,0xe9,0xea,
0xeb,0xec,0xed,0xef,0xf3,0x9b,0x9c,
)
全角カタカナコード = kana_h2z_table[半角カタカナコード - 0xff61] + 0x3000
最近のコメント