]> rtime.felk.cvut.cz Git - hornmich/skoda-qr-demo.git/blob - QRScanner/mobile/jni/scripts/cmapcleanz.c
Add MuPDF native source codes
[hornmich/skoda-qr-demo.git] / QRScanner / mobile / jni / scripts / cmapcleanz.c
1 /* cmapclean.c -- parse a CMap file and write it back out */
2
3 #include <stdio.h>
4 #include <string.h>
5
6 /* We never want to build memento versions of the cmapdump util */
7 #undef MEMENTO
8
9 #include "mupdf/pdf.h"
10
11 #include "../source/fitz/context.c"
12 #include "../source/fitz/error.c"
13 #include "../source/fitz/memory.c"
14 #include "../source/fitz/string.c"
15 #include "../source/fitz/buffer.c"
16 #include "../source/fitz/stream-open.c"
17 #include "../source/fitz/stream-read.c"
18 #include "../source/fitz/printf.c"
19
20 #include "../source/pdf/pdf-lex.c"
21 #include "../source/pdf/pdf-cmap.c"
22 #include "../source/pdf/pdf-cmap-parse.c"
23
24 void pc(unsigned int c)
25 {
26         if (c <= 0xff) printf("<%02x>", c);
27         else if (c <= 0xffff) printf("<%04x>", c);
28         else if (c <= 0xffffff) printf("<%06x>", c);
29         else printf("<%08x>", c);
30 }
31
32 int
33 main(int argc, char **argv)
34 {
35         fz_context *ctx;
36         fz_stream *fi;
37         pdf_cmap *cmap;
38         int k, m;
39         int ns, nr;
40
41         if (argc != 2)
42         {
43                 fprintf(stderr, "usage: cmapclean input.cmap\n");
44                 return 1;
45         }
46
47         ctx = fz_new_context(NULL, NULL, FZ_STORE_UNLIMITED);
48         if (!ctx)
49         {
50                 fprintf(stderr, "cannot initialise context\n");
51                 return 1;
52         }
53
54         fi = fz_open_file(ctx, argv[1]);
55         cmap = pdf_load_cmap(ctx, fi);
56         fz_close(fi);
57
58         printf("begincmap\n");
59         printf("/CMapName /%s def\n", cmap->cmap_name);
60         printf("/WMode %d def\n", cmap->wmode);
61         if (cmap->usecmap_name[0])
62                 printf("/%s usecmap\n", cmap->usecmap_name);
63
64         if (cmap->codespace_len)
65         {
66                 printf("begincodespacerange\n");
67                 for (k = 0; k < cmap->codespace_len; k++)
68                 {
69                         if (cmap->codespace[k].n == 1)
70                                 printf("<%02x><%02x>\n", cmap->codespace[k].low, cmap->codespace[k].high);
71                         else if (cmap->codespace[k].n == 2)
72                                 printf("<%04x><%04x>\n", cmap->codespace[k].low, cmap->codespace[k].high);
73                         else if (cmap->codespace[k].n == 3)
74                                 printf("<%06x><%06x>\n", cmap->codespace[k].low, cmap->codespace[k].high);
75                         else if (cmap->codespace[k].n == 4)
76                                 printf("<%08x><%08x>\n", cmap->codespace[k].low, cmap->codespace[k].high);
77                         else
78                                 printf("<%x><%x>\n", cmap->codespace[k].low, cmap->codespace[k].high);
79                 }
80                 printf("endcodespacerange\n");
81         }
82
83         /* 16-bit ranges */
84
85         ns = nr = 0;
86         for (k = 0; k < cmap->rlen; k++)
87                 if (cmap->ranges[k].high - cmap->ranges[k].low > 0)
88                         ++nr;
89                 else
90                         ++ns;
91
92         if (ns)
93         {
94                 printf("begincidchar\n");
95                 for (k = 0; k < cmap->rlen; k++) {
96                         if (cmap->ranges[k].high - cmap->ranges[k].low == 0) {
97                                 pc(cmap->ranges[k].low);
98                                 printf("%u\n", cmap->ranges[k].out);
99                         }
100                 }
101                 printf("endcidchar\n");
102         }
103
104         if (nr)
105         {
106                 printf("begincidrange\n");
107                 for (k = 0; k < cmap->rlen; k++) {
108                         if (cmap->ranges[k].high - cmap->ranges[k].low > 0) {
109                                 pc(cmap->ranges[k].low);
110                                 pc(cmap->ranges[k].high);
111                                 printf("%u\n", cmap->ranges[k].out);
112                         }
113                 }
114                 printf("endcidrange\n");
115         }
116
117         /* 32-bit ranges */
118
119         ns = nr = 0;
120         for (k = 0; k < cmap->xlen; k++)
121                 if (cmap->xranges[k].high - cmap->xranges[k].low > 0)
122                         ++nr;
123                 else
124                         ++ns;
125
126         if (ns)
127         {
128                 printf("begincidchar\n");
129                 for (k = 0; k < cmap->xlen; k++) {
130                         if (cmap->xranges[k].high - cmap->xranges[k].low == 0) {
131                                 pc(cmap->xranges[k].low);
132                                 printf("%u\n", cmap->xranges[k].out);
133                         }
134                 }
135                 printf("endcidchar\n");
136         }
137
138         if (nr)
139         {
140                 printf("begincidrange\n");
141                 for (k = 0; k < cmap->xlen; k++) {
142                         if (cmap->xranges[k].high - cmap->xranges[k].low > 0) {
143                                 pc(cmap->xranges[k].low);
144                                 pc(cmap->xranges[k].high);
145                                 printf("%u\n", cmap->xranges[k].out);
146                         }
147                 }
148                 printf("endcidrange\n");
149         }
150
151         /* 1-to-many */
152
153         if (cmap->mlen > 0)
154         {
155                 printf("beginbfchar\n");
156                 for (k = 0; k < cmap->mlen; k++)
157                 {
158                         pc(cmap->mranges[k].low);
159                         printf("<");
160                         for (m = 0; m < cmap->mranges[k].len; ++m)
161                                 printf("%04x", cmap->mranges[k].out[m]);
162                         printf(">\n");
163                 }
164                 printf("endbfchar\n");
165         }
166
167         printf("endcmap\n");
168
169         fz_free_context(ctx);
170         return 0;
171 }
172
173 void fz_new_font_context(fz_context *ctx)
174 {
175 }
176
177 void fz_drop_font_context(fz_context *ctx)
178 {
179 }
180
181 fz_font_context *fz_keep_font_context(fz_context *ctx)
182 {
183         return NULL;
184 }
185
186 void fz_new_colorspace_context(fz_context *ctx)
187 {
188 }
189
190 void fz_drop_colorspace_context(fz_context *ctx)
191 {
192 }
193
194 fz_colorspace_context *fz_keep_colorspace_context(fz_context *ctx)
195 {
196         return NULL;
197 }
198
199 void fz_new_aa_context(fz_context *ctx)
200 {
201 }
202
203 void fz_free_aa_context(fz_context *ctx)
204 {
205 }
206
207 void fz_copy_aa_context(fz_context *dst, fz_context *src)
208 {
209 }
210
211 void *fz_keep_storable(fz_context *ctx, fz_storable *s)
212 {
213         return s;
214 }
215
216 void fz_drop_storable(fz_context *ctx, fz_storable *s)
217 {
218 }
219
220 void fz_new_store_context(fz_context *ctx, unsigned int max)
221 {
222 }
223
224 void fz_drop_store_context(fz_context *ctx)
225 {
226 }
227
228 fz_store *fz_keep_store_context(fz_context *ctx)
229 {
230         return NULL;
231 }
232
233 int fz_store_scavenge(fz_context *ctx, unsigned int size, int *phase)
234 {
235         return 0;
236 }
237
238 void fz_new_glyph_cache_context(fz_context *ctx)
239 {
240 }
241
242 void fz_drop_glyph_cache_context(fz_context *ctx)
243 {
244 }
245
246 fz_glyph_cache *fz_keep_glyph_cache(fz_context *ctx)
247 {
248         return NULL;
249 }
250
251 void fz_new_document_handler_context(fz_context *ctx)
252 {
253 }
254
255 void fz_drop_document_handler_context(fz_context *ctx)
256 {
257 }
258
259 fz_document_handler_context *fz_keep_document_handler_context(fz_context *ctx)
260 {
261         return NULL;
262 }