1from .adobe_glyphs import adobe_glyphs
2from .pdfdoc import _pdfdoc_encoding
3from .std import _std_encoding
4from .symbol import _symbol_encoding
5from .zapfding import _zapfding_encoding
6
7
8def fill_from_encoding(enc: str) -> list[str]:
9 lst: list[str] = []
10 for x in range(256):
11 try:
12 lst += (bytes((x,)).decode(enc),)
13 except Exception:
14 lst += (chr(x),)
15 return lst
16
17
18def rev_encoding(enc: list[str]) -> dict[str, int]:
19 rev: dict[str, int] = {}
20 for i in range(256):
21 char = enc[i]
22 if char == "\u0000":
23 continue
24 assert char not in rev, f"{char} at {i} already at {rev[char]}"
25 rev[char] = i
26 return rev
27
28
29_win_encoding = fill_from_encoding("cp1252")
30_mac_encoding = fill_from_encoding("mac_roman")
31
32
33_win_encoding_rev: dict[str, int] = rev_encoding(_win_encoding)
34_mac_encoding_rev: dict[str, int] = rev_encoding(_mac_encoding)
35_symbol_encoding_rev: dict[str, int] = rev_encoding(_symbol_encoding)
36_zapfding_encoding_rev: dict[str, int] = rev_encoding(_zapfding_encoding)
37_pdfdoc_encoding_rev: dict[str, int] = rev_encoding(_pdfdoc_encoding)
38
39
40charset_encoding: dict[str, list[str]] = {
41 "/StandardEncoding": _std_encoding,
42 "/WinAnsiEncoding": _win_encoding,
43 "/MacRomanEncoding": _mac_encoding,
44 "/PDFDocEncoding": _pdfdoc_encoding,
45 "/Symbol": _symbol_encoding,
46 "/ZapfDingbats": _zapfding_encoding,
47}
48
49__all__ = [
50 "_mac_encoding",
51 "_pdfdoc_encoding",
52 "_pdfdoc_encoding_rev",
53 "_std_encoding",
54 "_symbol_encoding",
55 "_win_encoding",
56 "_zapfding_encoding",
57 "adobe_glyphs",
58 "charset_encoding",
59]