AI解体新書 ―PGFの解説―
なんだかうっとうしい天気が続いています。今年はとうとう海に行けずに終わってしまいました。残念。なのでもう少し気候が良くなってから友が島あたりに渡ってみようかなと思います。まあ、海で遊ぶわけではないですが。
お庭のトマトも8月中旬を境にぴたっと生産活動を停止して休眠期に入っています。このまま9月中旬まで放置すると再び花をつけて実が成るのですが、そう広い畑ではないので来年の事を考えると、この辺で終了しておいた方が良いので悩む所です。
まあ、いつもの通り内容には全く関係ない事ばかり書いていますが、本日はイラストレーターさんのふぁいるふぉーまっとに関連する情報を書きなぐっておきます。かなりコアなものです。さらっと読み流して下さい。
コンテンツリカバリーモードを利用するとPGFはテキストとして抽出されます。
このような状態ですね。ここまでは単純にプレファレンスの設定のみでたどり着けます。しかし、肝心のテキストストリームはAscii85エンコーディングストリームの中に納められたままです。
Ascii85ストリームを正しく展開すると…
こんな状態です。オペランド等はasciiコードレンジのキャラクタで書かれているのですが、プロパティ等のデータ領域はヘッダ部分が文字コードとは整合性がなく、どのキャラクタコードを拾っても文字化けを生じます。ですから展開したストリームの扱いはバイナリとして扱う必要があります。
以下が実際にイラストレーターでファイルを開いた状態です。
テキストストリームの実体は以下の部分
ユニコードで記述されています。テキストオブジェクトを抜き出したのが以下
/TextObjects [
<<
/Model
<<
/Text (0xfeff 0x30c6 0x30b9 0x30c8 0x000d)
/ParagraphRun
<<
/RunArray [
<<
/RunData
<<
/ParagraphSheet
<<
/Name (0xfeff)
/Features
<<
/ParagraphDirection 0
/ComposerEngine 0
>>
/Parent 0
>>
>>
/Length 4
>>
]
>>
/StorySheet
<<
/AntiAlias 4
/UseFractionalGlyphWidths true >>
>>
/View
<<
/Frames [
<<
/Resource 0
>>
]
/Strikes [
<<
/99 /PC
/ChildProcession 0
/Children [
<<
/99 /F
/Frame 0
/Transform
<<
/Origin [ 8020.0 7845.0 ]
>>
/ChildProcession 2
/Children [
<<
/99 /R
/Children [
<<
/99 /R
/ChildProcession 2
/Children [
<<
/99 /L
/SelectionAscent -10.56006
/SelectionDescent 4.06805
/Bounds [ 0.0 -10.56006 0.0 4.06805 ]
/Children [
<<
/99 /S
/Mapping
<<
/CharacterCount 4
/GlyphCount 0
/WRValid false
>>
/Children [
<<
/99 /G
/Bounds [ 0.0 -10.56006 36.0 4.06805 ]
&nb
sp; /Glyphs [ 962 949 964 1 ]
/VisualBounds [ 8020.0 7834.43994 8056.0 7849.06787 ]
/Invalidation [ 8020.0 7834.43994 8062.77686 7849.06787 ]
/EndsInCR true
/SelectionAscent -10.56006
/SelectionDescent 4.06805
/MainDir 0
>>
]
>>
]
>>
]
>>
]
>>
]
>>
]
>>
]
>>
>>
]
バイナリ部分をテキスト表記に書き直していますが、このようなものとなります。文字列の実体はUnicodeの16bitで収容されています。
/Glyphs [ 962 949 964 1 ]
また、この様にGIDも同時に納められています。異字体等の情報はこのGIDにて処理されているのでしょう。
と、この様にPGFの解析作業は8割方終了しました。しかしながら某社も非公開の方針を貫いていますので、手法等の全容を公開する事はしません。興味がある方は直接連絡をください。