Napisałem appindicator Python3, który wywołuje fortune
i przechwytuje dane wyjściowe do wyświetlenia w powiadomieniu na ekranie.
Niektóre fortuny zawierają kwadraty z liczbą szesnastkową, gdy odpowiedni glif nie istnieje w bieżącej czcionce. Każdy kwadrat reprezentuje szesnastkowy punkt kodowy Unicode brakującego glifu.
Chcę usunąć tekst szesnastkowy przed wyświetleniem użytkownikowi. Miałem nadzieję znaleźć API Pythona, które pozwoliłoby mi sprawdzić tekst, znak po znaku, aby ustalić coś podobnego char.isValidCodePoint()
lub podobnego, ale nie mogę znaleźć jako takiego.
Znalazłem możliwe rozwiązanie, które chciałem zbadać tutaj, ale po zainstalowaniu fonttools
za pomocą terminala mój program Python nie mógł zaimportować fonttools/fontTools
.
Wszelkie pomysły - przy użyciu interfejsu API języka Python lub wywoływania terminala?
Aktualizacja nr 1: Od tego czasu zdałem sobie sprawę, że fonttools
przykładowy kod z powyższego łącza nie będzie dla mnie działał, ponieważ jest to Python2. fonttools
Podejrzewam, że jeśli można by jakoś użyć, mógłbym wywołać interpreter Python2 z mojego skryptu Python3.
Aktualizacja nr 2: Po wielu lekturach (patrz odnośniki poniżej) znalazłem, fc-match
ale nie zawsze może jednoznacznie zidentyfikować używaną czcionkę. Otrzymuję bieżącą czcionkę w Pythonie:
from gi.repository import Gio
fontName = Gio.Settings( "org.gnome.desktop.interface" ).get_string( "font-name" )
powodując Ubuntu 11
. Podając ten wynik pango-view
wraz ze znakiem szesnastkowym, otrzymuję listę czcionek, w tym Ubuntu
. Według mnie, jeśli glif NIE był renderowany przez czcionkę, czcionka nie powinna pojawić się w wyniku z pango-view
!
Bibliografia:
Silnik kształtujący Unicode
Użyj silnika kształtującego Unicode, takiego jak Harfbuzz, aby wykryć brakujący glif. Oto działający przykład:
Wynik
Tutaj dane wyjściowe w IDLE3 podczas sprawdzania:
Sprawdź poprawną ścieżkę czcionki, właśnie wybrałem pierwszą, którą zobaczyłem na bieżącym komputerze.
Uwaga:
źródło