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" /
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
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"
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
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.
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.)
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.
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.
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 .
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