Skip to content

Instantly share code, notes, and snippets.

@aminophen
Last active December 23, 2020 15:17
Show Gist options
  • Save aminophen/2c093a4a2d42ed527653f0cd25e753ba to your computer and use it in GitHub Desktop.
Save aminophen/2c093a4a2d42ed527653f0cd25e753ba to your computer and use it in GitHub Desktop.
cjk-gs-integrate の仕様 (2016/12/03 03:10)

cjk-gs-integrate.pl のデータベースと symlink / snippet 作成の仕様

拡張子 otf のファイルの場合

データベースのかきかた:

  • 【必須】Name エントリには「TEXMFLOCAL に作りたい symlink 名(dvipdfmx 用 map などにある名称)」を書く。
  • PSName エントリは、Name エントリの内容と実フォントの PostScript Name が異なる場合に書く。
  • 【必須】Class エントリは Adobe-ナントカ1-[Supplement] の「ナントカ」を書く(Japan / GB / CNS / Korea)。
  • Provides エントリは、当該の実フォントを代表的な PostScript 標準フォントへのエイリアスに採用したい場合に書く。
    • 複数の実フォントに対して同じエイリアスが考えられる場合は、Provides(数値) と書いておくと、数値の小さいものが優先される。
  • 【必須】Filename エントリは候補となるファイル名を書く。
    • ファイル名が複数ありうる場合は Filename(数値) と書いて列挙しておくと、数値の小さいものが優先される。

symlink / snippet のつくりかた:

  • Name / Class / Filename が最低限そろっていることを確認して処理開始。
  • フォントデータベースをパースし、内部的に一旦保存する。
    • 個別フォントのインデックスは PSName エントリ(なければ Name エントリを流用)
      • 以下これは realfontname と呼ばれる
    • 特定のフォントに対しては、以下の項目を取得する:
      • origname = Name エントリ(つまり TEXMFLOCAL に作りたい symlink 名)
      • class = Class エントリ
      • files = Filename すべて
      • provides = Provides すべて
  • files のリストをすべて kpathsea で探索
    • 内部的にデータベースに追記
      • target = 見つかった実ファイルの場所
  • 見つかったファイルに対して実際の処理
    • gs の Resource/CIDFont に symlink を張る (realfontname => target)
    • gs の Resource/Font に realfontname-encoding というファイル名の snippet を多数作成
      • 中身は realfontname と encoding を使って書かれる
    • 当該フォントが最優先の provides ならば、gs の Resource/Font にエイリアス用 snippet も作成
      • 中身は realfontname と encoding を使って書かれる
    • TEXMFLOCAL に symlink を張る (origname.otf => target)

拡張子 ttc/ttf のファイルの場合

データベースのかきかた:

  • 【必須】Name エントリには実フォントの PostScript Name を書く。
    • このため PSName エントリはそもそも要らないし使われない。
  • 【必須】Class エントリは Adobe-ナントカ1-[Supplement] の「ナントカ」を書く(Japan / GB / CNS / Korea)。
  • Provides エントリは、当該の実フォントを代表的な PostScript 標準フォントへのエイリアスに採用したい場合に書く。
    • 複数の実フォントに対して同じエイリアスが考えられる場合は、Provides(数値) と書いておくと、数値の小さいものが優先される。
  • 【必須】Filename エントリは候補となるファイル名を書く。
    • ファイル名が複数ありうる場合は Filename(数値) と書いて列挙しておくと、数値の小さいものが優先される。
    • 最も小さい数値を持つファイル名がそのまま TEXMFLOCAL の symlink 名に採用される。
      • したがって、TEXMFLOCAL に PostScript Name な symlink を作りたい場合は敢えて最小の値を与えて登録しておく。

symlink / snippet のつくりかた:

  • Name / Class / Filename が最低限そろっていることを確認して処理開始。
  • フォントデータベースをパースし、内部的に一旦保存する。
    • 個別フォントのインデックスは(そもそも PSName エントリがないので)自動的に Name エントリ
      • 以下これは realfontname と呼ばれる
    • 特定のフォントに対しては、以下の項目を取得する:
      • origname = Name エントリ(つまり PostScript Name)
      • class = Class エントリ
      • files = Filename すべて
      • provides = Provides すべて
      • ttfname = 最小の数値を持つ Filename エントリ(拡張子 .ttf 込み)
  • files のリストをすべて kpathsea で探索
    • 内部的にデータベースに追記
      • target = 見つかった実ファイルの場所
  • 見つかったファイルに対して実際の処理
    • gs の Resource/CIDSubst に symlink を張る (ttfname => target)
    • gs の Resource/Font に realfontname-encoding というファイル名の snippet を多数作成
      • 中身は realfontname と encoding を使って書かれる
    • 当該フォントが最優先の provides ならば、gs の Resource/Font にエイリアス用 snippet も作成
      • 中身は realfontname と encoding を使って書かれる
    • TEXMFLOCAL に symlink を張る (ttfname => target)
@aminophen
Copy link
Author

2016年に書いたときの状況からかなり変化したので:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment