[11] OpenType ファイルには SVG 形式のグリフデータを格納できます。
SVG
表[25]
SVG
表では、
グリフIDに対してSVG文書を対応付けることができます。
>>13
[107] グリフごとに異なるSVG文書とすることもできますし、 複数のグリフで1つのSVG文書を共有することもできます。
[112] そのフォントのすべてのグリフIDに対して SVG文書を用意しなければならないことはありません。
[113]
SVG
のグリフ記述は、 同じグリフIDの glyf
, CFF
, CFF2
のグリフの記述の代替となる記述を表します。両者は同じ抽象グリフの描写でなければなりません。
>>13
[125] OpenType の他の部分と同様に、エラー処理の規定はあまりありません。ただし SVG文書の処理については一部に規定があります。
[38]
SVG
における SVG文書は、
平文としてまたは gzip 符号化により記述できます。
>>13
[39] 実装はこの両方に対応しなければなりません。 >>13
[124] どちらであるかを明記する方法は用意されていません。先頭バイトで区別できます。
SVG
における gzip[35] RFC 1952 gzip 形式を使うことができます。 >>13
[36] gzip では RFC 1951 deflate 圧縮方式を使わなければなりません。 >>13
[126] Web では普通は仕様書の最新版を使いますが、 OpenType における SVG は特定の版が参照されています。
[127] Webブラウザーではないフォントの実装も含めた相互運用性のための配慮なのでしょう。
[128] とはいえしかし機能を絞りながらも多くの機能が任意選択になっていて、 実際にどの機能が使えるかは実装によってまったく違い、相互運用性は悲惨な状況です。
Scalable Vector Graphics (SVG) 1.1 (Second Edition) specification at
http://www.w3.org/TR/SVG11 リンク .
であると定められています。 >>13
[27] 現時点でそのリンク先 http://www.w3.org/TR/SVG11 は、 >>28 にリダイレクトされ、 >>29 と同じものが表示されます。
[130] SVG 1.1 第2版は W3C が SVG 1.2 の開発に失敗した後に SVG 1.1 に立ち返って不具合修正などを施したものです。 それまでの版よりは幾分マシとはいえ、 現在の水準から見ると曖昧で品質が低い仕様書です。また、古い時代の設計で、 HTML5 以後の新時代の設計に追いつこうと一部修正された SVG2 による変更 (例えば XLink からの脱却) が加わっていないものです。
[131] 開発タイミングの関係からこれを参照する以外に選択肢がなかったとはいえ、 「最新版仕様」ではなく特定時点の仕様書を参照しているのに参照先がこれ、 というのは不安があります。
[30] 以前の版では、
draft
SVG 2 リンク specification.
の context-fill
とその他の context-*
特性値の利用が認められていました。
>>13
[33] ここでそのリンク先は https://www.w3.org/TR/SVG2/ >>31 で、 現時点で >>32 と同じものが表示されます。 「以前の版」がどの時点のものだったかは不明です。
[34] 現在の版ではこれら特性群の利用は非推奨であります。 適合実装は、これら特性群を対応しても構いませんが、 対応することは必須でも推奨でもありません。 フォントにおけるこれら特性群の利用は強く非推奨です。 >>13
[92] 適合する実装は、次のものをすべて対応しなければなりません。 >>13
linearGradient
要素, radialGradient
要素)[51] 適合する OpenType フォントは次の機能を使ってはなりません。 適合する応用は無視しなければなりません。 >>13
text
要素, font
要素, およびそれらと関連付けられた要素foreignObject
要素switch
要素script
要素a
要素view
要素em
, ex
imag
要素における SVG データ<icccolor>
データ型,
color-profile
要素, color-profile
特性,
@color-profile
contentStyleType
属性[97] 適合する OpenType フォントは次の機能を使ってはなりません。 >>13
[64] SVG文書は次の機能を含めて構いませんが、実装は無視します。 >>13
[68] 次の機能は適合実装において必須の能力ではありませんが、 応用によっては対応しているかもしれません。 フォント開発者は想定対象環境で利用できるか評価するべきです。 広範囲の環境での相互運用性のため利用を避けるべきです。 >>13
style
要素style=""
属性calc()
filter
要素と関係する属性 (enableBackground
を含む。)pattern
要素mask
要素marker
要素symbol
要素image
要素における JPEG と PNG 以外の画像形式zoomAndPan
属性,
cursor
特性, cursor
要素)[88] 広く使われる想定のフォントには CSS によるスタイル付けよりも広く対応が見込まれる XML presentation attribute による指定が推奨されます。 >>13 (Note)
[119] CSSアニメーション, SVGアニメーションは広範囲の配布を想定したフォントでは推奨されません。 >>13
[89] 媒体クエリーによる環境変化への対応は、対応している応用に於いても推奨されません。 (他の OpenType の仕組みとの相互作用が可能であるので) 上位層表現フレームワークに於いて環境変化を扱うべきです。 >>13 (Note)
[100]
color
特性は currentColor
の値を上書きしますが、
その他に使い道はないので、 color
値を設定するのは避けるべきです。
>>13 (Note)
[41] SVG文書の文字符号化は、 UTF-8 でなければなりません。 >>13
[42]
SVG文書は XML文書であることも HTML構文で記述されることもありますが、
OpenType フォントの SVG文書は XML文書でなければなりません。
SVG
の SVG文書に対応する応用は XML文書に対応しなければなりません。
HTML構文にも対応した SVG 構文解析ライブラリーを使っても構いません。
>>13
[43]
SVG
の応用は XML名前空間に完全に対応する必要はありません。
>>13
[44]
SVG文書の根要素は SVG を既定名前空間
http://www.w3.org/2000/svg
として宣言しなければなりません。
>>13
[46]
xlink:href
属性を使うときは、
根要素で xmlns:xlink="http://www.w3.org/1999/xlink"
としなければなりません。
>>13
[47] 他の XLink の属性を文書中で使ってはいけません。 >>13
[48] 他の機構を文書中で使ってはいけません。 他の名前空間宣言を要素に使うべきではありません。 >>13
[108]
SVG
においてグリフID g が参照する SVG文書は、
glyphg
というIDを持つ要素を含まなければなりません。
ここで
g
は零埋めしない10進数です。
>>13
[109]
font engine
は、
当該要素が
defs
要素の子供であり、
use
要素でその ID を参照したかのようにグリフをレンダリングしなければなりません。
>>13
[110]
仕様書で明文規定されているのはこれだけなのでやや曖昧ですが、例示を見ると当該要素から参照されている可能性がある、
当該要素の兄弟の defs
は含め、当該要素以外のグリフの要素は含まない、ということになっています。
しかし当該要素以外のグリフの要素の子孫への参照が含まれるという可能性も排除されていません。
結局 SVG文書の全体が必要になりそうに思われます。
[111] 従って
をレンダリングするのと同等、と考えるべきでしょうか。
[116]
仕様書には svg
要素に ID を付与した例文もいくつかあります。
その場合は >>111 でもうまくいきません。
>>109 >>110 >>111 あたりはあくまで説明の便宜でそう書いていただけなのでしょう...
[132] SVG の処理にはいくつかの異なる方式がありますが (スクリプトを実行するかなど)、 ここで定められているのはそのいずれとも異なります。
[133] 従って通常の SVG の処理と共通化できるところも多いとはいえ、 どの機能を有効にするかなどに多くの条件分岐が必要となります。
[91]
実装のCSS変数への対応は任意選択です (>>68) が、
var()
と
CPAL
表の色を参照する色変数に対応することは強く推奨されます。
フォントは SVG文書内で独自の変数を定義するべきではありません。
var()
は色値を受け付ける属性や特性でのみ使うべきで、
値の最初の項目としてのみ出現するべきです。
>>13
[101]
CPAL
パレットに対応しない実装でも、
var()
には対応し、第2引数のフォールバック値を使うことが強く推奨されます。
広範囲の配布を想定するフォントはこの方法によって
CPAL
未対応の応用でもフォールバック値を使えます。
>>13 (Note)
[102]
text-layout engine や応用は、
各パレット entry に対してカスタム特性を定義して色値を割り当てます。
カスタム色特性は CPAL
表を含むフォントのみ定義するべきです。
応用はカスタム特性の値を一般的には CPAL
のパレット entry を使って設定するべきですが、
利用者入力その他の方法で値を割り当てることもできます。
CPAL
のパレットの entry から値を割り当てるときは、
通常は最初のパレットを使うべきですが、
USABLE_WITH_LIGHT_BACKGROUND
や
USABLE_WITH_DARK_BACKGROUND
のフラグが付いたパレットがフォントに含まれるときは、
そのいずれかを既定値として使えます。
>>13
[103]
いずれにせよカスタム特性の名前は
--colorn
の形式で、
n
は0埋めしない10進数で、
--color0
, --color1
, ...
と
numPaletteEntries
より 1
小さな値までとしなければなりません。
>>13
CPAL
色 entry が
shape element の特性 fill
や stroke
,
gradient stop element の stop-color
,
feFlood filter element の flood-color
特性に適用されるときは、
α値は [ 0, 1 ]
の範囲に変換し、同じ要素の対応する特性
fill-opacity
,
stroke-opacity
,
stop-opacity
,
flood-opacity
に乗じなければなりません。
>>13feDiffuseLighting
や feSpecularLighting
に対応する場合でパレット entry
が
lighting-color
特性に適用される場合は、
α値は無視されます。
>>13[99]
currentColor
の初期値は、
text-layout engine や応用環境によって設定しなければなりません。
応用に於いて最適なものを設定できます。
一般には当該文章の連なりに適用される文章前景色とすることが推奨されます。
>>13
[114]
まず通常の方法で text layout を行ってグリフIDの列と x, y 位置
(と scale や rotation の行列)
を得ます。
次に SVG
のグリフ記述があれば、
それを通常のグリフ記述のかわりに使います。
>>13
[115] glyph ink bounding box には多少変化もあるかもしれませんが、 advance width や advance height は変化しません。 line layout が bounding box に依存する場合を除き、 行の再度の layout は必須とならないはずです。 >>13
[120] SVGアニメーション, CSSアニメーションに対応した応用は、 場合によっては (例えば印刷時)、 静的なレンダリングを必須とするかもしれません。 静的なレンダリングは、 SVG文書中のアニメーションを無視して実行させないことで得ることにご注意 (アニメーションを実行して時刻 0 の初期フレームを撮影するのではありません)。 >>13
[121]
advance width, advance height はアニメーションで変化させられません。
bounding box はアニメーションで変化することがあります。
[15] CSS at-rule: `@font-face`: OpenType SVG rendering | Can I use... Support tables for HTML5, CSS3, etc, https://caniuse.com/mdn-css_at-rules_font-face_opentype_svg
[16] >>15 によると Firefox と Safari は対応していますが、 Blink は対応していません。
[17] >>18 によると EdgeHTML は対応していたようですが...
[122] >>18 によると Firefox はアニメーションに対応していますが、 EdgeHTML は対応していませんでした。
[5] SVG Fonts は、 SVG を使って記述されたフォントでした。
[10] 一部の Webブラウザーが実装していましたが、 削除されました。
[7] 代替として、 通常の OpenType による Web Fonts を利用できます。
[12]
SVG Fonts はスタイル指定の挙動が理解不能になることや、
OpenType
の
GSUB
/ GPOS
に相当する機能が欠落していて実用が困難であるとされました。
>>2
[4] Note how the SVG currently implemented in browsers is a mix of SVG 1.… · whatwg/html@969c45b ( 版) https://github.com/whatwg/html/commit/969c45b2478d1d2d3be8564ec85dc316a53c8bcf
[6] Henri Sivonenさんのツイート: "Today I wrote a patch to make Gecko’s HTML parser unaware of IE5 databinding, Web Forms 2.0 repetition and SVG fonts." () https://twitter.com/hsivonen/status/855048094320398336
[8] Reference SVG 2 (dstorey著, ) https://github.com/whatwg/html/commit/7069de4fcf2f92295dded520ed5d7275addab2e7
[1] Well, I'm Back: SVG In OpenType: A New Approach To SVG Fonts ( ( 版)) http://robert.ocallahan.org/2013/02/svg-in-opentype-new-approach-to-svg.html
[2] SVGOpenTypeFonts - MozillaWiki ( ( 版)) https://wiki.mozilla.org/SVGOpenTypeFonts
[3] For the record: Adobe's Draft 1 of the OT 'SVG ' table ( (Sairus Patel 著, 版)) http://lists.w3.org/Archives/Public/public-svgopentype/2011Oct/0000.html
[18] OpenTypeフォントにSVGアニメーションを突っ込んでみる - にせねこメモ, https://nixeneko.hatenablog.com/entry/2017/10/31/211922
[19] SVG & colors in OpenType fonts - Mozilla Hacks - the Web developer blog, https://hacks.mozilla.org/2014/10/svg-colors-in-opentype-fonts/
[20] SVG Glyphs in OpenType Specification, , https://www.w3.org/2013/10/SVG_in_OpenType/
[21] SVG glyphs for OpenType Community Group, https://www.w3.org/community/svgopentype/
SVG
のsvgDocLength
で指定するのは、 符号化された状態のデータの長さであって、復号後の長さではありません。 >>13