堕天使の煉獄
2020-03
07
00:50:03
結局そうなるのか
今日はゲームPG、フォント周りをガリガリと。
最近の流行的に、システムフォントを使わずにフォントファイルを読み込んで使う方式にしてみようかと。
んで、この外部フォントの読み込み、DXライブラリで用意されている機能では、フォント名とフォントファイル名の両方が必要なのですが。
ただぽんと利用フリーのフォントみつけてきて使おうと思ったときに、このファイル名を調べるのが意外とめんどくさいんですよね。
フォントファイルの中に設定されているフォント名(正確にはふぉんとふぁみりーねーむ)と、完全に一致(カナが半角なら半角じゃないとダメとか)してないと認識してくれないので、フォントファイルについてるドキュメントみても、ほんとにその名前をコピペしただけで使えるかわからないわけですよ。
んで、自動でフォント名とか取ってこれないのかなとググってみたらば、.ttfのフォーマット解説&c++のソースコード付の出てきたので、なんだ情報ある上にサンプルまであるんじゃん。
ってことでぺぺいと実装。
フォントファイルの中身はビッグエンディアンってのがちょっと厄介だったのと、c++のサンプルが、そこに載ってないオレオレライブラリ使用前提の作りで、その部分は結局自分で書き足すことになるので結局半分ぐらいは自前で書くハメになるわ。
肝心の名前の入ってるブロック部分の、文字数と文字開始位置offsetの値が入ってるフィールドの読み込み順が逆になってるし_| ̄|○
文字の長さが800とか1200とかなんでやねーんとしばらく悩んだりで。
おかげで結局、英語のTTFのフォーマット解説のページを見る羽目に。
あとビッグエンディアンだから文字列もstd::reversで全部反転ーとかやってたら、全然文字取得出来ない。
なんでやーとおもったら、utf16で入ってる文字列を全部先頭から末尾まで1バイト単位で逆順にしてたらそら変なのになるわと。
utf16のデータでビッグエンディアンの場合なら、2バイト取得してその2バイトを逆順にする……ってのを文字数分繰り返さなきゃいけないわな。エンディアンが逆ってそのデータサイズ単位での逆だから……。
逆にするってのに囚われての大ボケw
んでもまあ、とはいえすぐにググればフォーマット出てくるし、なんでフォント名自動で読み込みとかDXライブラリでなんで用意されてないのかなーとおもったのですが。
文字列がどんな文字コードで入ってるのかとか、結構不確定なところあって、「プラットフォーム」っていうフィールドの値が 3:Microsoftの場合は文字エンコードの値が何であれUnicode(utf16)で入ってる……らしい(要検証)。
とか日本語の解説サイトでは書かれてたりする。
フォントの作成ツールとか作り手によってちゃんと期待したエンコードの文字列が入ってるのか、いかにも怪しい雰囲気なんですよね。
そんでもって、いくつかフォーマットのバージョンみたいなのもTTFファイル自体と、各ブロック内のデータフォーマットのバージョンとかのフィールドもあったりして。
この手のファイルフォーマットでは普通に良くあるのですが、将来的に拡張されるかもと用意してあるけど、実際にはもう何十年も拡張とかされてなくてほぼバージョンの値は固定値として扱う。
みたいなパターンもあれば、いろんなバージョンのファイルが出回ってるってパターンもあったりして、その辺はフォーマットの情報見てるだけじゃわからないとこあるんですよね。
その辺も、安易に手を出しづらいところなのかもしれない。
まったく使われてる事のないニッチなバージョンなんかに対応するのなんて時間の無駄ですしね。しかし、どのバージョンが主流なのかってとなかなか調べるのには骨が折れるワケですよ。除外対象が絞りにくいぽ。
DXライブラリのような、多くの人、多くの地域、多くの環境に対応するようなライブラリの場合、なんかいい加減な感じで作られたっぽいフォントファイルとかも読めないと、読めないんですけどーとか来ちゃうので、めんどくせぇんだろうなーってかんじが読み取れるからかw
あと、手持ちのフォントいくつか試してみたところ、今のところ全部文字列はutf16で入ってる感じだったんですけど。
なので試せなかったのですが、shift-jisで入ってる場合ってどうなるんだろ。
マルチバイトな文字のビッグエンディアンって、多バイト文字はバイト列逆になるのだろうか??
shift-jisの場合はデータとしてはchar配列なので、1バイト換算なのでエンディアンは関係無いのかな?
UTF-8で符号されたテキストデータはエンディアンに関係無く同一の内容になるてなの見たことあるので、マルチバイト文字は基本エンディアン考慮しなくていいっぽいのかな?
よーわからん。
まあ殆ど使われてないっぽいのと、あくまで簡単に外部フォント設定できる補助的な機能ってかんじなので、まあとりあえず大抵のフォントファイルは読めるっぽい。ぐらいで問題無いか……。
かなり古くからあるフォーマットなので、utf8には対応してないっぽいのですが、エンディアンにも影響しないとなると、ますますutf8マンセーですね。
すぱっとsubstrできないのが泣き所ですが。
あと花粉症しんどい……。
そんでもって、ちょっと前までは暖かかったのに、急にここ数日冷え込んだので、微妙に風邪っぽい症状も。
世間はコロナウィルスで大騒ぎな最中で、めんどくせぇかんじに。
ネットニュースでコロナ対策にはコレ! ってので
「いっぱい食って、いっぱい寝る」
てのがあってワロタ。
結局、弱みを見せるなって事と何でしょうけど。
花粉症で既にグロッキーなんですけど……。
とりえあえず昨日は早めに風呂入って寝たので今日はわりと調子戻ってきた感じはあるのですが。
今日もはやいとこ寝ちまおうかな……。
最近の流行的に、システムフォントを使わずにフォントファイルを読み込んで使う方式にしてみようかと。
んで、この外部フォントの読み込み、DXライブラリで用意されている機能では、フォント名とフォントファイル名の両方が必要なのですが。
ただぽんと利用フリーのフォントみつけてきて使おうと思ったときに、このファイル名を調べるのが意外とめんどくさいんですよね。
フォントファイルの中に設定されているフォント名(正確にはふぉんとふぁみりーねーむ)と、完全に一致(カナが半角なら半角じゃないとダメとか)してないと認識してくれないので、フォントファイルについてるドキュメントみても、ほんとにその名前をコピペしただけで使えるかわからないわけですよ。
んで、自動でフォント名とか取ってこれないのかなとググってみたらば、.ttfのフォーマット解説&c++のソースコード付の出てきたので、なんだ情報ある上にサンプルまであるんじゃん。
ってことでぺぺいと実装。
フォントファイルの中身はビッグエンディアンってのがちょっと厄介だったのと、c++のサンプルが、そこに載ってないオレオレライブラリ使用前提の作りで、その部分は結局自分で書き足すことになるので結局半分ぐらいは自前で書くハメになるわ。
肝心の名前の入ってるブロック部分の、文字数と文字開始位置offsetの値が入ってるフィールドの読み込み順が逆になってるし_| ̄|○
文字の長さが800とか1200とかなんでやねーんとしばらく悩んだりで。
おかげで結局、英語のTTFのフォーマット解説のページを見る羽目に。
あとビッグエンディアンだから文字列もstd::reversで全部反転ーとかやってたら、全然文字取得出来ない。
なんでやーとおもったら、utf16で入ってる文字列を全部先頭から末尾まで1バイト単位で逆順にしてたらそら変なのになるわと。
utf16のデータでビッグエンディアンの場合なら、2バイト取得してその2バイトを逆順にする……ってのを文字数分繰り返さなきゃいけないわな。エンディアンが逆ってそのデータサイズ単位での逆だから……。
逆にするってのに囚われての大ボケw
んでもまあ、とはいえすぐにググればフォーマット出てくるし、なんでフォント名自動で読み込みとかDXライブラリでなんで用意されてないのかなーとおもったのですが。
文字列がどんな文字コードで入ってるのかとか、結構不確定なところあって、「プラットフォーム」っていうフィールドの値が 3:Microsoftの場合は文字エンコードの値が何であれUnicode(utf16)で入ってる……らしい(要検証)。
とか日本語の解説サイトでは書かれてたりする。
フォントの作成ツールとか作り手によってちゃんと期待したエンコードの文字列が入ってるのか、いかにも怪しい雰囲気なんですよね。
そんでもって、いくつかフォーマットのバージョンみたいなのもTTFファイル自体と、各ブロック内のデータフォーマットのバージョンとかのフィールドもあったりして。
この手のファイルフォーマットでは普通に良くあるのですが、将来的に拡張されるかもと用意してあるけど、実際にはもう何十年も拡張とかされてなくてほぼバージョンの値は固定値として扱う。
みたいなパターンもあれば、いろんなバージョンのファイルが出回ってるってパターンもあったりして、その辺はフォーマットの情報見てるだけじゃわからないとこあるんですよね。
その辺も、安易に手を出しづらいところなのかもしれない。
まったく使われてる事のないニッチなバージョンなんかに対応するのなんて時間の無駄ですしね。しかし、どのバージョンが主流なのかってとなかなか調べるのには骨が折れるワケですよ。除外対象が絞りにくいぽ。
DXライブラリのような、多くの人、多くの地域、多くの環境に対応するようなライブラリの場合、なんかいい加減な感じで作られたっぽいフォントファイルとかも読めないと、読めないんですけどーとか来ちゃうので、めんどくせぇんだろうなーってかんじが読み取れるからかw
あと、手持ちのフォントいくつか試してみたところ、今のところ全部文字列はutf16で入ってる感じだったんですけど。
なので試せなかったのですが、shift-jisで入ってる場合ってどうなるんだろ。
マルチバイトな文字のビッグエンディアンって、多バイト文字はバイト列逆になるのだろうか??
shift-jisの場合はデータとしてはchar配列なので、1バイト換算なのでエンディアンは関係無いのかな?
UTF-8で符号されたテキストデータはエンディアンに関係無く同一の内容になるてなの見たことあるので、マルチバイト文字は基本エンディアン考慮しなくていいっぽいのかな?
よーわからん。
まあ殆ど使われてないっぽいのと、あくまで簡単に外部フォント設定できる補助的な機能ってかんじなので、まあとりあえず大抵のフォントファイルは読めるっぽい。ぐらいで問題無いか……。
かなり古くからあるフォーマットなので、utf8には対応してないっぽいのですが、エンディアンにも影響しないとなると、ますますutf8マンセーですね。
すぱっとsubstrできないのが泣き所ですが。
あと花粉症しんどい……。
そんでもって、ちょっと前までは暖かかったのに、急にここ数日冷え込んだので、微妙に風邪っぽい症状も。
世間はコロナウィルスで大騒ぎな最中で、めんどくせぇかんじに。
ネットニュースでコロナ対策にはコレ! ってので
「いっぱい食って、いっぱい寝る」
てのがあってワロタ。
結局、弱みを見せるなって事と何でしょうけど。
花粉症で既にグロッキーなんですけど……。
とりえあえず昨日は早めに風呂入って寝たので今日はわりと調子戻ってきた感じはあるのですが。
今日もはやいとこ寝ちまおうかな……。
Sun
Mon
Tue
Wed
Thu
Fri
Sat
01
02
03
04
■
■
花粉症とバカのドミノ倒し
05
06
07
■
■
結局そうなるのか
08
09
10
11
12
13
14
15
16
17
18
19
20
[春分の日]
21
22
23
24
25
■
■
流動的
26
27
■
■
今頃感あるけど……
28
29
30
31
total:2076204 t:112 y:119
■記事タイトル■
■年度別リスト■
2024年
2024年12月(0)2024年11月(0)
2024年10月(1)
2024年09月(2)
2024年08月(1)
2024年07月(1)
2024年06月(5)
2024年05月(2)
2024年04月(1)
2024年03月(6)
2024年02月(4)
2024年01月(3)
2023年
2023年12月(3)2023年11月(1)
2023年10月(2)
2023年09月(3)
2023年08月(3)
2023年07月(3)
2023年06月(7)
2023年05月(8)
2023年04月(2)
2023年03月(1)
2023年02月(2)
2023年01月(3)
2022年
2022年12月(4)2022年11月(3)
2022年10月(1)
2022年09月(3)
2022年08月(3)
2022年07月(2)
2022年06月(1)
2022年05月(3)
2022年04月(2)
2022年03月(2)
2022年02月(1)
2022年01月(6)
2021年
2021年12月(8)2021年11月(3)
2021年10月(4)
2021年09月(6)
2021年08月(2)
2021年07月(1)
2021年06月(3)
2021年05月(2)
2021年04月(2)
2021年03月(3)
2021年02月(1)
2021年01月(4)
2020年
2020年12月(3)2020年11月(7)
2020年10月(2)
2020年09月(3)
2020年08月(1)
2020年07月(3)
2020年06月(7)
2020年05月(5)
2020年04月(8)
2020年03月(4)
2020年02月(2)
2020年01月(4)
2019年
2019年12月(1)2019年11月(1)
2019年10月(2)
2019年09月(1)
2019年08月(3)
2019年07月(2)
2019年06月(2)
2019年05月(2)
2019年04月(4)
2019年03月(1)
2019年02月(7)
2019年01月(1)
2018年
2018年12月(1)2018年11月(1)
2018年10月(5)
2018年09月(1)
2018年08月(5)
2018年07月(1)
2018年06月(1)
2018年05月(1)
2018年04月(2)
2018年03月(2)
2018年02月(1)
2018年01月(1)
2017年
2017年12月(2)2017年11月(1)
2017年10月(2)
2017年09月(5)
2017年08月(8)
2017年07月(2)
2017年06月(1)
2017年05月(1)
2017年04月(3)
2017年03月(5)
2017年02月(7)
2017年01月(8)
2016年
2016年12月(7)2016年11月(2)
2016年10月(3)
2016年09月(7)
2016年08月(8)
2016年07月(10)
2016年06月(17)
2016年05月(6)
2016年04月(8)
2016年03月(10)
2016年02月(5)
2016年01月(10)
2015年
2015年12月(7)2015年11月(7)
2015年10月(13)
2015年09月(7)
2015年08月(7)
2015年07月(5)
2015年06月(4)
2015年05月(5)
2015年04月(2)
2015年03月(4)
2015年02月(1)
2015年01月(7)
2014年
2014年12月(12)2014年11月(8)
2014年10月(4)
2014年09月(6)
2014年08月(7)
2014年07月(4)
2014年06月(2)
2014年05月(5)
2014年04月(4)
2014年03月(8)
2014年02月(4)
2014年01月(8)
2013年
2013年12月(15)2013年11月(8)
2013年10月(3)
2013年09月(3)
2013年08月(8)
2013年07月(0)
2013年06月(0)
2013年05月(0)
2013年04月(0)
2013年03月(0)
2013年02月(0)
2013年01月(0)
■レス履歴■
■ファイル抽出■
■ワード検索■
堕天使の煉獄
https://rengoku.sakura.ne.jp
管理人
織田霧さくら(oda-x)
E-mail (■を@に)
oda-x■rengoku.sakura.ne.jp