pop↑ push↓

☆ (ゝω・)v

プログラムを改造する(5)

EU4のパッチに関する技術情報です。

前回

パッチです。 popush.hatenablog.com

文字の修正1

概略

 8/24のメモには文字を修正した1と書かれていました。実際は前回(幅関連?)のバグフィックスでした。

修正

 ローカル変数に上書きするのを忘れていた処理を追加しただけ。 f:id:saito-matanki:20170930200427p:plain

文字の修正2

概要

 8/25のメモには文字を修正した2と書かれていましたが日付的に下記の変更ですので、改行周りの修正になります。

popush.hatenablog.com

 そもそも文章が改行されないのは、欧文はスペースで区切られているのが基本であり、そのどこかで改行をするのが一般的だからです。これをword wrapといいます。EU4では文字を1文字づつ送り出していきながら、送り幅を合計していき、文字にスペースが来たときに初めて送り幅の合計と表示できるエリアの幅を比較して、文字を改行するかどうか(バイト列に改行コードを入れるか)を決定します。よってスペースが1個も無いと、1回も比較されることがなくなり、文字がズビャビーと長くなってしまいます。

 そして修正方を色々と考えたのですが、面倒だったため、UCS2が0xFFを超えていたら(エスケープされていたら)、強制的に幅を比較する分岐に入るようにしました。本当はもっと良いアルゴリズムがあると思います。上記の記事で技術的に妥協というのはそうゆうことです。

修正

UCS2を比較に使えるようにとっておきます。 f:id:saito-matanki:20170930203419p:plain

f:id:saito-matanki:20170930203540p:plain

UCS2が0xFFより大きいと強制的に比較処理に入るようにします。 f:id:saito-matanki:20170930203704p:plain

f:id:saito-matanki:20170930203726p:plain

結果として文章が改行されます。

f:id:saito-matanki:20170930205847p:plain

次回はプログラムを改造する(6)です