美咲フォントの調査(メモ その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
« 明けましておめでとう! | トップページ | Raspberry Pi Pico MicroPython用美咲フォントライブラリの更新 »
「パソコン・インターネット」カテゴリの記事
- ブラザー製 レザープリンター HL-L3240CDWを購入しました(2025.09.20)
- Adobe Acrobat Readerの「しおり」を左表示にする(2025.05.31)
- Windows標準のパッケージ管理ツール「Winget」(2024.11.25)
- 美咲フォントの調査(メモ その1)(2024.03.07)
- 初Mac機! MacBook Airを購入しました(2021.05.22)
« 明けましておめでとう! | トップページ | Raspberry Pi Pico MicroPython用美咲フォントライブラリの更新 »

コメント