Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4680 | right-hear | 1 | #include "fitz.h" |
2 | #include "mupdf.h" |
||
3 | |||
4 | #include "data_encodings.h" |
||
5 | #include "data_glyphlist.h" |
||
6 | |||
7 | void |
||
8 | pdf_load_encoding(char **estrings, char *encoding) |
||
9 | { |
||
10 | char **bstrings = NULL; |
||
11 | int i; |
||
12 | |||
13 | if (!strcmp(encoding, "StandardEncoding")) |
||
14 | bstrings = (char**) pdf_standard; |
||
15 | if (!strcmp(encoding, "MacRomanEncoding")) |
||
16 | bstrings = (char**) pdf_mac_roman; |
||
17 | if (!strcmp(encoding, "MacExpertEncoding")) |
||
18 | bstrings = (char**) pdf_mac_expert; |
||
19 | if (!strcmp(encoding, "WinAnsiEncoding")) |
||
20 | bstrings = (char**) pdf_win_ansi; |
||
21 | |||
22 | if (bstrings) |
||
23 | for (i = 0; i < 256; i++) |
||
24 | estrings[i] = bstrings[i]; |
||
25 | } |
||
26 | |||
27 | int |
||
28 | pdf_lookup_agl(char *name) |
||
29 | { |
||
30 | char buf[64]; |
||
31 | char *p; |
||
32 | int l = 0; |
||
33 | int r = nelem(agl_name_list) - 1; |
||
34 | |||
35 | fz_strlcpy(buf, name, sizeof buf); |
||
36 | |||
37 | /* kill anything after first period and underscore */ |
||
38 | p = strchr(buf, '.'); |
||
39 | if (p) p[0] = 0; |
||
40 | p = strchr(buf, '_'); |
||
41 | if (p) p[0] = 0; |
||
42 | |||
43 | while (l <= r) |
||
44 | { |
||
45 | int m = (l + r) >> 1; |
||
46 | int c = strcmp(buf, agl_name_list[m]); |
||
47 | if (c < 0) |
||
48 | r = m - 1; |
||
49 | else if (c > 0) |
||
50 | l = m + 1; |
||
51 | else |
||
52 | return agl_code_list[m]; |
||
53 | } |
||
54 | |||
55 | if (strstr(buf, "uni") == buf) |
||
56 | return strtol(buf + 3, NULL, 16); |
||
57 | else if (strstr(buf, "u") == buf) |
||
58 | return strtol(buf + 1, NULL, 16); |
||
59 | else if (strstr(buf, "a") == buf && strlen(buf) >= 3) |
||
60 | return strtol(buf + 1, NULL, 10); |
||
61 | |||
62 | return 0; |
||
63 | } |
||
64 | |||
65 | static const char *empty_dup_list[] = { 0 }; |
||
66 | |||
67 | const char ** |
||
68 | pdf_lookup_agl_duplicates(int ucs) |
||
69 | { |
||
70 | int l = 0; |
||
71 | int r = nelem(agl_dup_offsets) / 2 - 1; |
||
72 | while (l <= r) |
||
73 | { |
||
74 | int m = (l + r) >> 1; |
||
75 | if (ucs < agl_dup_offsets[m << 1]) |
||
76 | r = m - 1; |
||
77 | else if (ucs > agl_dup_offsets[m << 1]) |
||
78 | l = m + 1; |
||
79 | else |
||
80 | return agl_dup_names + agl_dup_offsets[(m << 1) + 1]; |
||
81 | } |
||
82 | return empty_dup_list; |
||
83 | }><>><>><>>=>>=>> |