Sprawdzanie, jakie znaki obsługuje czcionka

Jak wyodrębnić listę obsługiwanych znaków Unicode z czcionki TrueType lub osadzonej w OpenType w Linuksie?

Czy istnieje narzędzie lub biblioteka, której mogę użyć do przetworzenia .ttf lub a .EOT plik i zbudować listę punktów kodowych (jak U + 0123, U + 1234, itp./ align = "left" /

Author: Till Ulen, 2010-12-16

8 answers

Oto metoda wykorzystująca moduł FontTools (który możesz zainstalować za pomocą czegoś takiego pip install fonttools):

#!/usr/bin/env python
from itertools import chain
import sys

from fontTools.ttLib import TTFont
from fontTools.unicode import Unicode

ttf = TTFont(sys.argv[1], 0, verbose=0, allowVID=0,
                ignoreDecompileErrors=True,
                fontNumber=-1)

chars = chain.from_iterable([y + (Unicode[y[0]],) for y in x.cmap.items()] for x in ttf["cmap"].tables)
print(list(chars))

# Use this for just checking if the font contains the codepoint given as
# second argument:
#char = int(sys.argv[2], 0)
#print(Unicode[char])
#print(char in (x[0] for x in chars))

ttf.close()

Skrypt przyjmuje jako argument ścieżkę czcionki:

python checkfont.py /path/to/font.ttf
 34
Author: Janus Troelsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-12 10:31:48

Program Linux xfd może to zrobić. Jest dostarczany w moim distro jako 'xorg-xfd'. Aby zobaczyć wszystkie znaki dla czcionki, możesz uruchomić to w Terminalu:

xfd -fa "DejaVu Sans Mono"
 21
Author: Spencer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-10 16:42:08

fc-query my-font.ttf wyświetli mapę obsługiwanych glifów i wszystkich lokalizacji, dla których czcionka jest odpowiednia zgodnie z fontconfig

Ponieważ prawie wszystkie nowoczesne aplikacje Linuksa są oparte na fontconfig, jest to o wiele bardziej przydatne niż surowa lista unicode

Faktyczny format wyjściowy omówiony jest tutaj http://lists.freedesktop.org/archives/fontconfig/2013-September/004915.html

 11
Author: nim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-28 10:39:03

Punkty kodu znaków dla czcionki TTF / otf są przechowywane w tabeli CMAP.

Możesz użyć ttx do wygenerowania reprezentacji XML tabeli CMAP. zobacz tutaj .

Możesz uruchomić polecenie ttx.exe -t cmap MyFont.ttf i powinno ono wypisać plik MyFont.ttx. Otwórz go w edytorze tekstu i powinien pokazać cały kod znaku, który znalazł się w czcionce.

 8
Author: wschang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-16 05:32:01

Po prostu miałem ten sam problem i zrobiłem HOWTO , które idzie o krok dalej, wypiekając regexp wszystkich obsługiwanych punktów kodu Unicode.

Jeśli chcesz mieć tylko tablicę punktów kodowych, możesz użyć tej tablicy podczas podglądania ttx xml w Chrome devtools, po uruchomieniu ttx -t cmap myfont.ttf i prawdopodobnie zmianie nazwy myfont.ttx na myfont.xml, Aby wywołać tryb XML Chrome:

function codepoint(node) { return Number(node.nodeValue); }
$x('//cmap/*[@platformID="0"]/*/@code').map(codepoint);

(również opiera się na fonttools z sugestii gilamesha; sudo apt-get install fonttools jeśli jesteś na systemie ubuntu.)

 4
Author: ecmanaut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-04 00:58:23

Jeśli chcesz tylko "przeglądać" czcionki, pomocne mogą być następujące opcje (Jeśli twój terminal obsługuje daną czcionkę):

#!/usr/bin/env python
import sys
from fontTools.ttLib import TTFont

with TTFont(sys.argv[1], 0, ignoreDecompileErrors=True) as ttf:
    for x in ttf["cmap"].tables:
        for (_, code) in x.cmap.items():
            point = code.replace('uni', '\\u').lower()
            print("echo -e '" + point + "'")

Niebezpieczny, ale łatwy sposób na oglądanie:

python font.py my-font.ttf | sh

Dzięki Janus ( https://stackoverflow.com/a/19438403/431528 ) za odpowiedź powyżej.

 0
Author: dcousens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-16 06:41:03

Polecenia fontconfig mogą wypisywać listę glifów jako zwartą listę zakresów, np:

$ fc-match --format=%{charset} OpenSans
20-7e a0-17f 192 1a0-1a1 1af-1b0 1f0 1fa-1ff 218-21b 237 2bc 2c6-2c7 2c9
2d8-2dd 2f3 300-301 303 309 30f 323 384-38a 38c 38e-3a1 3a3-3ce 3d1-3d2 3d6
400-486 488-513 1e00-1e01 1e3e-1e3f 1e80-1e85 1ea0-1ef9 1f4d 2000-200b
2013-2015 2017-201e 2020-2022 2026 2030 2032-2033 2039-203a 203c 2044 2070
2074-2079 207f 20a3-20a4 20a7 20ab-20ac 2105 2113 2116 2120 2122 2126 212e
215b-215e 2202 2206 220f 2211-2212 221a 221e 222b 2248 2260 2264-2265 25ca
fb00-fb04 feff fffc-fffd

Użyj {[2] } dla pliku .ttf i fc-match dla zainstalowanej nazwy czcionki.

Prawdopodobnie nie wymaga to instalowania żadnych dodatkowych pakietów i nie wymaga tłumaczenia bitmapy.

 0
Author: Neil Mayhew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-21 02:25:37

Możesz to zrobić na Linuksie w Perlu używając modułu Font::TTF .

 -1
Author: hippietrail,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-18 12:33:25