SPDL指標付きフォント表現様式

導入

この附属書は,SPDL文書中のSPDL指標付きフォントの表現様式を提供する。

表記上の規約

この附属書で記述する符号化要素は, 特に括弧で囲んだ任意選択という語句で明示的に指定しない限り, すべて必す(須)とする。

この文書全体において, 公的交換用及び私的交換用という語句は, SPDL文書中におけるSPDL指標付きフォント情報の交換のことを指す。 public interchange|公的交換|n|S c.2|t private interchange|私的交換|n|S c.2|t この用法を,&isoiec9541;で規定するフォント資源の交換と混同しては ならない。

この附属書全体を通して,次に示す印刷上の強調表記規約を適用する。

この附属書中には,リテラルオクテット列の小さな集合中の任意の一つを 使用してよい場合が多く現れる。 簡潔かつ読み易くするために, 許されるリテラルオクテット列のいずれかを置ける位置を示すための記法を、 幾つか定義する。

符号化要素中に斜体で書かれた語rdefは, 実際の符号中では次に示すもののどれを置いてもよい位置を示す。

  • def
  • executeonly def
  • readonly def

    符号化要素中に斜体で書かれた語ndefは, 実際の符号化中では次に示すもののどれを置いてもよい位置を示す。

  • def
  • executeonly def
  • readonly def
  • noaccess def

    符号化要素中に斜体で書かれた語nputは, 実際の符号化中では次に示すもののどれを置いてもよい位置を示す。

  • put
  • executeonly put
  • readonly put
  • noaccess put

    定義

    &isoiec9541;で定義されている用語の定義を,参照によってここに編入する。 この規格の3で定義した用語の定義を,参照によって編入する。

    SPDL指標付きフォントの表現

    符号化されたSPDL指標付きフォントは,ヘッダ,PerFont属性,グリフ形状情報の順 に並ぶ三つの部分からなる。各部分について,次に示す。

    ヘッダ

    符号化されたSPDL指標付きフォントの先頭は、 次のとおりでなければならない。

  • %!FONTSTANDARD-STANDARDVERSION: TYPEFACE DATAVERSION

    ここで,FONTSTANDARDは,公的交換用にはISO-9514-3とする。私的 交換用には任意のオクテット列でよい。 STANDARDVERSIONTYPEFACE及び DATAVERSIONは、 公的交換用には&isoiec9541;で定義するとおりとする。 私的交換用には任意のオクテット列でよい。

    この最初の必す(須)符号化要素の後ろに,次に示す行が続かなければならない。

  • %%/CreationDate: TIMESTAMP
  • %%PROPDATA

    ここで,TIMESTAMPは、 公的交換用には&isoiec8824;の世界時刻文字列とする。 私的交換用には任意のオクテット列でよい。 PROPDATAは、 &isoiec9541;で定義するとおりとする。 ISO 8824 Universal Time String -> ?

    ヘッダの中の最後の符号化要素は,次に示す形式の1個以上の行とする。

  • % DATACOPYRIGHT

    及び/又は

  • % DSNCOPYRIGHT

    DATACOPYRIGHT及びDSNCOPYRIGHTは、 &isoiec9541;で定義する。

    PerFont属性

    符号化された指標付きフォントのヘッダの直後には、 PerFont属性が続く。 この属性は,幾つかの最上位属性及び1個のFontInfo属性の部分集合か らなる。 この節の中で述べる最上位属性及びFontInfo属性部分集合は, 符号化中のPerFont属性の中に任意の順序で出現してよい。 ヘッダの末尾と,それに続くPerFont属性の先頭との間は,次に示す行 によって区切られる。

  • FONTDICTSIZE dict begin

    ここで,FONTDICTSIZEは,実際にその指標付きフォントの中に 存在するPerFont属性の数より1大きい値をもつ非負整数とする。 FONTDICTSIZEを計算する際,FontInfo属性部分集合は1個の 属性とみなす。

    PerFont属性の末尾は、次に示す行によって区切られる。

  • currentdict end

    すべてのPerFont属性は(FontInfo属性部分集合も含め), 符号化中に存在する場合,上記の2個の区切り行の間に現れなければならない。 C.4.2.1からC.4.2.8までにおいて,最上位属性,FontInfo属性部分集合及び FontInfo属性部分集合中の各属性の符号化について詳述する。

    FontInfo (任意選択)

    FontInfo属性の部分集合は,幾つかの属性を含み,それらはすべて 任意選択とする。 これらの属性は,FontInfo開始区切り行と終了区切り行の間に,任意 の順序で現れてよい。FontInfo開始区切り行は次に示すとおり。

  • /FontInfo NUMFIATTRIBUTES dict dup begin

    ここで,NUMFIATTRIBUTESは、 FontInfo属性部分集合中に実際に存在する属性の数とする。 FontInfo終了区切り行は次に示すとおり。

  • end rdef

    FontInfo属性部分集合中に存在してよい属性は、次のとおりに符号化される。

    Version (任意選択)

  • /version (DATAVERSION) rdef

    ここで,DATAVERSIONは,公的交換用には&isoiec9541;で定義す るとおりとする。私的交換用には任意のオクテット列でよい。

    Fullname (任意選択)

  • /FullName (TYPEFACENAME) rdef

    ここで,TYPEFACENAMEは、 公的交換用には&isoiec9541;で定義するとおりとする。 私的交換用には任意のオクテット列でよい。

    FamilyName (任意選択)

  • /FamilyName (FONTFAMILY) rdef

    ここで,FONTFAMILYは、 公的交換用には&isoiec9541;で定義するとおりとする。 私的交換用には任意のオクテット列でよい。

    Weight (任意選択)

  • /Weight (WEIGHT) rdef

    ここで,WEIGHTは、 公的交換用には&isoiec9541;で定義するとおりとする。 私的交換用には任意のオクテット列でよい。

    ItalicAngle (任意選択)

  • /ItalicAngle POSTUREANGLE rdef

    ここで,POSTUREANGLEは、 公的交換用には&isoiec9541;で定義するとおりとする。 私的交換用には任意のオクテット列でよい。

    isFixedPitch (任意選択)

  • /isFixedPitch ESCCLASS rdef

    ここで,ESCCLASSは、 公的交換用には&isoiec9541;で定義するとおりとする。 私的交換用には任意のオクテット列でよい。

    UnderlinePosition (任意選択)

  • /UnderlinePosition SCOREOFFSETX rdef

    ここで,SCOREOFFSETXは、 公的交換用には&isoiec9541;で定義するとおりとする。 私的交換用には任意のオクテット列でよい。

    UnderlineThickness (任意選択)

  • /UnderlineThickness SCORETHICK rdef

    ここで,SCORETHICKは、 公的交換用には&isoiec9541;で定義するとおりとする。 私的交換用には任意のオクテット列でよい。

    FontName (任意選択)
  • /FontName /FONTNAME rdef

    ここで,FONTNAMEは、 公的交換用には&isoiec9541;で定義するとおりとする。 私的交換用には任意のオクテット列でよい。

    PaintType

  • /PaintType STRUCTURE rdef

    ここで,STRUCTUREは、 公的交換用には&isoiec9541;で定義するとおりとする。 私的交換用には任意のオクテット列でよい。

    FontType

  • /FontType FONTTYPE rdef

    ここで,FONTTYPEの値の型は、非負整数型とする。 GlyphShapeTechnology属性(&isoiec9541-3;参照)の値が ISO/STANDARD/9541-3/TYPE1である場合,FONTTYPEの値は1とする。 私的交換用には,FONTTYPEは101以上998以下の 任意の非負整数型の値でよい。

    FontMatrix
  • /FontMatrix [a b c d e f] rdef

    又は

  • /FontMatrix {a b c d e f} rdef

    グリフ座標系における座標(X, Y)は、(&isoiec9541;で定義するとおり), 次に示す一次式に従ってSPDLユーザ座標系における座標(x, y)に変換される。

  • x = aX + cY + e
  • y = bX + dY + f

    典型的な場合,b,c,e及びfの値は0となり, a及びdの値はともに1/RELUNITSとなる。 ここで,RELUNITSは&isoiec9541;で定義され, &isoiec9541-3;で審議されたとおりとする。

    Encoding

    Encoding属性は二つの形式をとりうる。 第一の形式は次のとおり。

  • /Encoding PRIVATEENCODING rdef

    ここで,PRIVATEENCODINGは任意のオクテット列でよい。 この形式のEncoding属性は,私的交換においてだけ使用してよい。

    Encoding属性がとりうる第二の形式は,指標からグリフ名への写像の並び とする。その写像の並びの開始は次に示すとおりに区切られる。

  • /Encoding 256 array 0 1 255 {1 index exch /DEFAULTGNAME put} for

    ここで,DEFAULTGNAMEは、 Encoding属性の中で明示的に写像されない指標が写像されるべきグリフ名とする。

    上記の区切り子の後ろに,次に示す形式の要素が0個から256個並ぶ。

  • dup INDEX /GNAME put

    ここで,INDEXは非負整数(0以上255以下)で,グリフ名に写像さ れる指標を表す。GNAMEは,公的交換用には&isoiec9541;で定義する とおりのグリフ識別子とする。私的交換用には任意のオクテット列でよい。

    写像要素の並びは次に示す区切り子で終了する。

  • rdef

    FontBBox
  • /FontBBox {MINX MINY MAXX MAXY} rdef

    又は

  • /FontBBox [MINX MINY MAXX MAXY] rdef

    ここで,MINXMINYMAXX,及び MAXYは,&isoiec9541;の中でMAXFONTEXT属性の元で 定義されるものと同じとする。

    UniqueID (任意選択)
  • /UniqueID UNIQUEID rdef

    ここで,UNIQUEIDの値の型は整数型とする。これが存在する場合, その値はグリフ形状情報部の中のPrivate属性のUniqueIDの値と同じでなければ ならない。

    グリフ形状情報

    PerFont属性部の後ろに,グリフ形状情報部が続く。 グリフ形状情報部全体は,通常,eexec暗号化アルゴリズム(参照)を用いて暗号化されている。 この部分がeexecアルゴリズムを用いて暗号化されている場合に限り, 暗号化されたデータは次に示す区切り子に続いて記述されていなければならない。

  • currentfile eexec

    実際の形状情報(eexec暗号化が用いられている場合にはその暗号化 された部分)そのものは,Private属性及びCharStringsの二つの部分からなる。 これら二つの部分がeexec暗号化される前の符号化については及び で記述する。任意選択のeexec暗号化アルゴリズムについては で記述する。

    Private属性

    Private属性部は幾つかの必す(須)属性及び任意選択属性からなる。 これらの属性の意味は、&isoiec9541-3;で記述する。 これらの属性はPrivate属性部の中に任意の順序で現れてよい。ただし,次 に示す二つの例外がある。

    • RD,ND,及びNP属性及びその任意の部分集合は,Private属性部の前 又は内部のいずれかに,任意の順序で現れてよい。 これらの属性のいずれかをPrivate属性部の前に置くことは許されてはいるが, 推奨されていない。
    • Subrs属性は最後の属性でなければならない。

    Private属性部の先頭は次に示すとおりに区切られる。

  • dup /Private PRIVATESIZE dict dup begin

    ここで,PRIVATESIZEは,Private属性部の中に存在する属性の数を 示す非負整数とする。この数は,Private属性部の前に現れてもよいRD,ND又は NP属性もすべて含まれる。 Private属性部の末尾は次に示す行で区切られる。

  • ND

    ここで,NDはND属性の属性名として定義されたオクテット列とする。 (参照) as part of the ND attribute -> 実はpartは「属性名」の意

    Private属性のすべては,符号化の中に存在するならば,上記の二つの区切り子 の間に現れなければならない(先に述べたようにRD,ND,及びNPを除く)。 C.4.3.1.1からC.4.3.1.21までにおいて,各属性の符号化について詳述する。

    RD

  • /RD {string currentfile exch readstring pop} rdef

    ここでRDは,ND属性の属性名として定義されたオクテット列,NP属性の属性名として定義されたオクテット列,及びその他のすべてのPrivate属性の名前のいずれとも等価でない任意のオクテット列とす る。

    ND

  • /ND {ndef} rdef

    ここでNDは,RD属性の属性名として定義されたオクテット列,NP属性の属性名として定義されたオクテット列,及びその他のすべてのPrivate属性の名前のいずれとも等価でない任意のオクテット列とする。

    NP

  • /NP {nput} rdef

    ここでNPは,RD属性の属性名として定義されたオクテット列,ND属性の属性名として定義されたオクテット列,及びその他のすべてのPrivate属性の名前のいずれとも等価でない任意のオクテット列とする。

    BlueValues

  • /BlueValues [BLUEVALUEPAIRS] ndef

    ここで,BLUEVALUEPAIRSは、0対から7対までの整数対の並びとする。 これらの整数対の意味は&isoiec9541-3;で定義する。

    OtherBlues (任意選択)

  • /OtherBlues [OTHERBLUESPAIRS] ndef

    ここで,OTHERBLUESPAIRSは、0対から5対までの整数対の並びとする。 これらの整数対の意味は&isoiec9541-3;で定義する。

    FamilyBlues (任意選択)

  • /FamilyBlues [FAMILYBLUESPAIRS] ndef

    ここで,FAMILYBLUESPAIRSは0対から7対までの整数対の並びとする。 これらの整数対の意味は&isoiec9541-3;で定義する。

    FamilyOtherBlues (任意選択)

  • /FamilyOtherBlues [FAMILYOTHERBLUESPAIRS] ndef

    ここで,FAMILYOTHERBLUESPAIRSは、0対から5対までの整数対の並びとする。 これらの整数対の意味は&isoiec9541-3;で定義する。

    BlueScale (任意選択)

  • /BlueScale BLUESCALE ndef

    ここで、BLUESCALEの値の型は、数型とする。 BLUESCALEの意味は、&isoiec9541-3;で定義する。

    BlueShift (任意選択)

  • /BlueShift BLUESHIFT ndef

    ここで、BLUESHIFTの値の型は、整数型とする。 BLUESHIFTの意味は、&isoiec9541-3;で定義する。

    BlueFuzz (任意選択)

  • /BlueFuzz BLUEFUZZ ndef

    ここで、BLUEFUZZの値の型は、整数型とする。 BLUEFUZZの意味は、&isoiec9541-3;で定義する。

    StdHW (任意選択)

  • /StdHW [STDHW] ndef

    ここで、STDHWの値の型は、数型とする。 STDHWの意味は、&isoiec9541-3;で定義する。

    StdVW (任意選択)

  • /StdVW [STDVW] ndef

    ここで、STDVWの値の型は、数型とする。 STDVWの意味は、&isoiec9541-3;で定義する。

    StemSnapH (任意選択)

  • /StemSnapH [STEMSNAPHVALUES] ndef

    ここで、STEMSNAPHVALUESは、0個から12個までの数の並びとする。 STEMSNAPHVALUESの意味は、&isoiec9541-3;で定義する。

    StemSnapV (任意選択)

  • /StemSnapV [STEMSNAPVVALUES] ndef

    ここで、STEMSNAPVVALUESは、0個から12個までの数の並びとする。 STEMSNAPVVALUESの意味は、&isoiec9541-3;で定義する。

    ForceBold (任意選択)

  • /ForceBold FORCEBOLD ndef

    ここで、FORCEBOLDの値の型は、論理型とする。 FORCEBOLDの値は、true又はfalseのいずれかでなければならない。 FORCEBOLDの意味は、&isoiec9541-3;で定義する。

    LanguageGroup (任意選択)

  • /LanguageGroup LANGUAGEGROUP ndef

    ここで、LANGUAGEGROUPの値の型は、非負整数型とする。 LANGUAGEGROUPの意味は、&isoiec9541-3;で定義する。

    lenIV (任意選択)

  • /lenIV LENIV ndef

    ここで、LENIVの値の型は、非負整数型とする。 LENIVの意味は、&isoiec9541-3;で定義する。

    MinFeature

  • /MinFeature {16 16} def

    password

  • /password 5839 def

    UniqueID (任意選択)

  • /UniqueID UNIQUEID rdef rdefnをrdefに修正。恐らく原文の誤り。

    ここで、UNIQUEIDの値の型は、整数型とする。 この属性が存在する場合,その値はPerFont属性のUniqueIDの値と同じでなければならない。

    Subrs

    Subrs属性は、charstring暗号化されたSubrが区切られた並びからなる。 Subrsの定義,意味,及び暗号化については&isoiec9541-3;で定義する。 Subrs属性の先頭は、次に示すとおりに区切られる。

  • /Subrs SUBRSSIZE array

    ここで、SUBRSSIZEは、Subrs属性中のSubrの数を示す非負整数とする。

    上記の区切り子の後ろに,次に示す形式の要素がちょうど SUBRSSIZE個並ぶ。

  • dup INDEX SUBRLENGTH RD ENCRYPTEDSUBR NP

    ここで,

    • INDEXは非負整数型の値をもつ一意な指標とする。その値は0以上 (SUBRSSIZE - 1)以下とする。
    • SUBRLENGTHは、charstring暗号化されたSubrのオクテット単位 の長さとする。
    • RDは、RD属性の属性名として定義されたオクテット列とする。
    • RDの値とENCRYPTEDSUBRの最初のオクテットとの間には、 ちょうど1個の空白文字が存在する。
    • ENCRYPTEDSUBRは、長さがSUBRLENGTHオクテットの charstring暗号化されたSubrとする。
    • NPは、NP属性の属性名として定義されたオクテット列とする。

    Subrs属性を構成するSubr要素の並びは,グリフ形状情報部の中のPrivate 属性部の末尾を示すNDによって暗黙的に終了する。

    CharStrings

    グリフ形状情報部の中のCharStrings部は,グリフ名とcharstring暗号化され たCharStringとの対の並びとする。 CharStringsの定義,意味及びcharstring暗号化は,&isoiec9541-3;で定 義する。 CharStrings属性の先頭は、次のとおりに区切られる。

  • 2 index /CharStrings CHARSTRINGSSIZE dict dup begin

    ここで、CHARSTRINGSSIZEは、CharStrings属性の中にある写像の数を示 す非負整数とする。

    上記の区切り子の後ろに,次に示す形式の要素がちょうど CHARSTRINGSSIZE個並ぶ。

  • /GNAME CHARSTRINGLENGTH RD ENCRYPTEDCHARSTRING ND

    ここで,

    • GNAMEは,公的交換用には&isoiec9541;で定義されるとおりのグリ フ識別子とする。私的交換用には任意のオクテット列でよい。
    • CHARSTRINGLENGTHは、charstring暗号化されたCharStringのオクテット単位の長さとする。
    • RDは、RD属性の属性名として定義されたオクテット列とする。
    • RDの値とENCRYPTEDCHARSTRINGの最初のオクテットとの 間には、ちょうど1個の空白文字が存在する。
    • ENCRYPTEDCHARSTRINGは,長さがCHARSTRINGLENGTHオク テットのcharstring暗号化されたCharStringとする。
    • NDは、ND属性の属性名として定義されたオクテット列とする。

    CharString要素群の並びの末尾(及びグリフ形状情報部の中のCharStrings部 の末尾)は、次に示すとおりに区切られる。

  • end
  • end
  • nput
  • nput
  • dup FontName get exch definefont pop

    グリフ形状情報部がeexec暗号化アルゴリズムを用いて暗号化され ていない場合,上記の区切りはグリフ形状情報部の終了及び符号化全体の終了 をも示す。

    グリフ形状情報部がeexec暗号化アルゴリズムを用いて暗号化され ている場合に限り,eexec暗号化されたグリフ形状情報部中における 最後のオクテット列として,次に示すオクテット列が現れなければならない。

  • mark currentfile closefile

    さらに,eexec暗号化されたグリフ形状情報部の後ろに続く平文 (eexec暗号化されていない)として,符号化全体の終了を示すために次に 示すものが現れなければならない。

  • cleartomark

    eexec暗号化アルゴリズム

    eexec暗号化アルゴリズムは、Private属性及びCharStringsを暗号 化するために用いられる。SPDL指標付きフォント表現の暗号化された部分を復 号するためにも,ほとんど同じアルゴリズムが用いられる。

    暗号化

    eexec暗号化アルゴリズムを用いて平文オクテットの列を暗号化する手順は次 のとおり。 上の内容を受けてplaintextをcleartextと同様に訳した。

    1. 0以上255以下の乱数を4個発生させ,これらの乱数から長さが4オクテット のオクテット列を作る。このオクテット列を平文のオクテット列の直前に置く。
    2. 符号なしの16ビット整数型の変数Rを55,665に初期化する。
    3. 手順1で形成されたオクテット列中の各オクテットQについて,次に示す手順を 実行し,Qを暗号化された形式Eで置き換える。
      1. 一時変数TにRの上位8ビットを代入する。
      2. QとTとの排他的論理和をとり,暗号化されたオクテットEを作る。
      3. 新しいRの値を次の式を用いて計算する。
      4. R = ((E + R) 4 52845 + 22719) modulo 65536

    復号

    eexec暗号化されたオクテットの列を,eexec復号アルゴリ ズムを用いて復号する手順は次のとおり。

    1. 符号なしの16ビット整数型の変数Rを55,665に初期化する。
    2. 暗号化されたオクテット列の中の各オクテットEについて,次の手順を実行し, Eを復号された形式Qで置き換える。
      1. 一時変数TにRの上位8ビットを代入。
      2. EとTとの排他的論理和をとり,復号されたオクテットQを作る。
      3. 新しいRの値を次の式を用いて計算する。
      4. R = ((E + R) 4 52845 + 22719) modulo 65536
    3. 得られた復号後のオクテット列の最初の4オクテットを捨てる。残りのオク テット列が復号されたテキストになる。