2016-12-09 3 views
2

webappでは、Webフォントに文字が含まれていないとブラウザが別のフォントにフォールバックしないようにする必要があります。これを行う唯一の方法は、フォントスタックに「すべて」の可能な文字を含む別のフォントを追加することです。1fontforgeとfonttoolsを使って軽量フォールバックフォントを作成する

fallbackfontsが既に存在しますが、コードポイントを数字として表示するため、デバッグヘルパーが多くなります。したがって、重い(> 2MB以上)です。

私のusecaseのフォールバックフォントは、欠落している文字を知らせるためのボックスのようなものでなければなりません。

私の考えは、1つのグリフで単純なフォントを生成し、すべてのグリフをこれに置き換えるフィーチャファイルを適用することでした。

私はFontForgeのスクリプト:

import fontforge 
import fontTools.feaLib.builder as feaLibBuilder 
from fontTools.ttLib import TTFont 

font_name = 'maeh.ttf' 
font = fontforge.font() 
glyph = font.createChar(33, "theone") 
pen = glyph.glyphPen() 
pen.moveTo((100,100)) 
pen.lineTo((100,500)) 
pen.lineTo((500,500)) 
pen.lineTo((500,100)) 
pen.closePath() 

for i in range(34, 99): 
    glyph = font.createChar(i) 
    glyph.width=10 

font.cidConvertTo('Adobe', 'Identity', 0) # doesn't make a difference 

font.generate(font_name) 

font = TTFont(font_name) 
feaLibBuilder.addOpenTypeFeatures(font, 'fallback.fea') 
font.save("fea_"+font_name) 

マイ機能ファイル:

languagesystem DFLT dflt; 

@all=[\00035-\00039]; 
#@all=[A-Z] this works 

feature liga { 
    sub @all by theone; 
} liga; 

しかしcid00037のための番号を変更すると

KeyError: ('cid00037', 'SingleSubst[0]', 'Lookup[0]', 'LookupList') 

で上記の結果。

フィーチャーファイルからコメント付きのA-Zを使用すると、このアプローチは完全に間違っているようには見えません。

CID表記で範囲を指定すると、なぜフォントツールがグリフを見つけることができないのですか? すべてのグリフを含むOpenType機能ファイルのクラスを作成する別の方法はありますか?

+1

私たちは続ける前に、なぜフォントフォールバックを防止する必要がありますか?これはウェブサイトが想定しているものなので、選択したフォントにギャップがあるかどうかを示すオフラインバリデーターを書くのではなく、どうしてCSSの動作方法に挑戦しようとしていますか? –

+0

@ Mike'Pomax'Kamermans私はフォントをテストするために使用されるウェブサイトにこれを必要とします。グリフがフォントの一部でない場合は、欠落していることが明らかです。 – tobltobs

+0

so ... *フォールバックを悪用して[Adobeの空白のフォント](https://github.com/adobe-fonts/adobe-blank)または[Adobeのnotdefフォント](https:// github.com/adobe-fonts/adobe-notdef)?それは文字どおりに作られたものです(タイプセットの検証)。つまり、グリフの存在をテストすることは、フロントエンドなしで合理的に行う*ことです。シェイパーを使ってページコードを実行し、ポイントで "あなたは私にストリングXとこのフォントを与えました。使用するはずのグリフインデックス/インデックスはありません "、クライアントでそれを行う必要はありません。しかし、あなたがする必要がある場合:空白を使用します。 –

答えて

0

上記の問題に取り組んでいるうちに、誰かが私に、Adobe NotDefというフォントを暗示しました。これは私が探していたものです。なんらかの理由で、私はAdobe NotDefの.otfをwoffまたはwoff2にfontforgeで変換できませんでした。また、fontsquirrelのようなWebフォントファイルを作成するためのすべてのオンラインツールが失敗しました。 woffファイルを作成するには、woff-toolsパッケージからsfnt2woffを使用しました。 woff2ファイルの場合、私はhttps://github.com/google/woff2を使用しました。

+1

Font Forgeのどのバージョンですか? Adobeの空白とAdobeのnotdefはどちらも新しいCMAPテーブルに依存していますので、古いバージョンを使用している場合は、そのCMAPデータで何をすべきか分かりません。 –

関連する問題