フォト
2026年9月
日 月 火 水 木 金 土
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      
無料ブログはココログ

« 明けましておめでとう! | トップページ | Raspberry Pi Pico MicroPython用美咲フォントライブラリの更新 »

2024年3月 7日 (木)

美咲フォントの調査(メモ その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補助」ブロックの対応状況です。

Unicode-1
 ※ utf-8では、0x80以降は11ビット扱いで2バイトになることに注意

 このブロックでの留意事項
  ・半角 ”¥" は0xA5 を使う。日本語Windows環境では、半角"\" 0x5cが"¥"になるので要注意
  ・「ラテン1補助」 "§", "¨", "°", "±", "´", "¶", "×", "÷" は
   Windows環境の日本語等幅フォントでは全角幅、欧文等幅フォントでは半角幅となる
   Ms
  Consols
   これらの文字は、シフトJISでは2バイト文字なんですが、ユニコード(※utf-8はで2バイト)では1バイトなんですよね..
   シフトJIS環境を慣れ親しんだ私には、若干違和感がありますね~
   美咲フォント的には、これらの文字は全角幅扱いです

   例:”±"のフォント
   20240307-112027

□ 半角・全角文字変換に関する留意点
 組み込み環境で液晶や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用美咲フォントライブラリの更新 »

「パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 明けましておめでとう! | トップページ | Raspberry Pi Pico MicroPython用美咲フォントライブラリの更新 »