2015-03-24 12 views
5

Interesuje mnie wiedza na temat tego, gdzie zastępy czcionek pasują do stosu kształtowania/renderowania czcionek. Innymi słowy, w którym punkcie brakuje wykrytych glifów i jak je zastępują?W jaki sposób przeglądarki internetowe implementują zastępczą czcionkę?

Widzę w dokumencie this, że narzędzie FontConfig zastępuje czcionkę "na podstawie przezroczystego pokrycia glifu".

więc pytania są:

  1. Jak dokładnie działa ten algorytm?
  2. Czy jest to standardowy algorytm używany przez większość przeglądarek - webkit, gecko (prawdopodobnie nie IE)?
  3. W jaki sposób przywrócenie czcionki w oparciu o brakujące glify w istniejącej czcionce dotyczy zastępczej czcionki CSS (która określa, które czcionki mają być używane po kolei, gdy brakuje całej czcionki)?

Edytuj: Znalazłem this dokument wyjaśniający "co" FontConfig, ale nie "jak". Pytanie 1 dotyczy "sposobu".

Podsumowując - ten wpis naprawdę ma związek tylko z jedną rzeczą - jak działa funkcja zastępowania czcionek, gdy w czcionce brakuje glifów.

Odpowiedz

7

awaryjna czcionki w przeglądarkach (w przeciwieństwie do, powiedzmy, w OS) opiera się na dwóch rzeczach:

  1. specyfikacji CSS, co daje czcionek, które mają być wykorzystane do awaryjnej i
  2. Silnik tekstowy, który wykonuje kształtowanie tekstu.

Spec CSS jest dość trywialne w tym względzie, po prostu podając listę czcionek przy użyciu ich nazw systemowych, ale kilka to możliwe „złapać wszystkie” czcionek, które są w gwarantowanym być taka sama od komputera żaden sposób (nie ma powodu, aby zakładać, że na przykład serif mapuje na Times lub Times New Roman, na przykład).

Algorytm awaryjny wykorzystywany przez silniki tekstowe zależy wyłącznie od silnika, ale zwykle kopie podczas etapu wyszukiwania glifów: silnik tekstowy widzi ciąg punktów kodowych i próbuje użyć czcionki do jej ukształtowania. Dla każdego punktu w sekwencji sprawdza, czy czcionka ma pasujący glif (sprawdzając tabelę CMAP i podtabity), lub regułę, która mówi silnikowi, że glif może być użyty tylko wtedy, gdy podąża za nim więcej punktów kodu. mechanizm gsub (na przykład, czcionka bez glifów dla poszczególnych liter e, t i c, ale z glifów dla & i reguły gsub który mówi sekwencji e + t + c powinny być w tekście zastąpiono pojedynczym glifów &), a kiedy skończy się gromadzenie tego rodzaju "jednostki punktów", kształtuje tekst i oddaje go z powrotem do tego, o co poprosił go kształt tekstu.

Jeśli podczas wyszukiwania glifów okaże się, że czcionka nie zawiera niczego, co pozwala silnikowi na kształtowanie określonego punktu kodowego (np. Przeglądanie danych CMAP oraz reguł GSUB nadal pokazuje "nie ma glifu") następnie silnik tekstowy może zrobić dwie rzeczy:

  1. Poddaj się. Nie ma glifu, zamiast tego użyj konturu .notdef zdefiniowanego jako identyfikator glifu 0 i generalnie dajesz tekst z uroczymi pustymi polami (z miłością nazywanymi "tofu" przez ludzi z czcionkami) lub znakami zapytania.
  2. Próba awaryjna czcionki, gdzie będzie starał inną czcionkę znaleźć glif na nieobsługiwanym punkt kodowy w

Podczas korzystania fallback, silnik może przejść w dół listę alternatywnych czcionek aż do: (A). znaleziony jest glif lub (b) lista jest wyczerpana, w którym to momencie silnik ma poddać się i będzie używał glifu .notdef. To, czy silnik pobierze glif z czcionki .notdef z oryginalnej czcionki, czy z ostatniej czcionki na liście, zależy wyłącznie od silnika (chociaż zazwyczaj będzie to oznaczać pierwszą czcionką, dla czytelności).

Nie ma " standardowy "algorytm dla tego zdefiniowanego gdziekolwiek; zastępowanie czcionek jest w zasadzie mechanizmem wygody oferowanym przez autorów tekstów, np. w jaki sposób przeglądarki są dostarczane z menedżerami zakładek (przydatne, a nie częścią żadnej specyfikacji). Jeśli chodzi o OpenType, nie ma żadnych wymagań co do tego, czy silnik powinien po prostu obsłużyć .notdef, gdy glif nie zostanie znaleziony, czy też powinien obsłużyć część, którą może ukształtować, a następnie znaleźć brakujący glif w innym miejscu i renderować tekst w ten sposób. CSS oznacza, że ​​silnik tekstowy powinien mieć co najmniej jedną formę zastępowania czcionek, ale nie określa, w jaki sposób powinien działać, ani kiedy powinien się uruchomić.

+0

Dzięki - jest to bardzo pouczające. Chciałbym uzyskać więcej szczegółów na temat tego, jak naprawdę wygląda powrót czcionki w dowolnej przeglądarce, aby uzyskać wgląd w ten proces. Wydaje się to o wiele bardziej krytyczne niż "wygoda" - od tego zależy wiele treści internetowych. Zakładam, że powrót nie jest po prostu listą zastępczą czcionek css (czy jest to?) Usunąłem tag css - stackoverflow nalega na umieszczenie tego pierwszego, dając mu mylący nacisk. Nie interesuję się CSS per se - jak zauważyłeś, specyfikacja jest banalna w stosunku do zastępczego fontu. – bright

+0

Edytuj: Tak więc pomyliłem się powyżej. Myślałem, że specyfikacja css radzi sobie tylko z awarią czcionki w sytuacji, gdy czcionka jest całkowicie nieobecna. Jednak po dokładniejszym przeczytaniu specyfikacji wygląda na to, że odnosi się do przypadku zaginionych glifów. Więc zaznaczam twoją odpowiedź jako zaakceptowaną. – bright

+0

to nie przeglądarka tak bardzo jak "silnik tekstowy", więc na przykład Firefox i Chrome używają [harfbuzz] (http://www.freedesktop.org/wiki/Software/HarfBuzz/), IE Wierzę, że polega na [Uniscribe] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd317713%28v=vs.85%29.aspx). I tak, jest to z pewnością związane z CSS, czcionki są używane dla poszczególnych glifów (na szczęście = D) –

Powiązane problemy