1 /* cmapclean.c -- parse a CMap file and write it back out */
6 /* We never want to build memento versions of the cmapdump util */
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"
20 #include "../source/pdf/pdf-lex.c"
21 #include "../source/pdf/pdf-cmap.c"
22 #include "../source/pdf/pdf-cmap-parse.c"
24 void pc(unsigned int c)
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);
33 main(int argc, char **argv)
43 fprintf(stderr, "usage: cmapclean input.cmap\n");
47 ctx = fz_new_context(NULL, NULL, FZ_STORE_UNLIMITED);
50 fprintf(stderr, "cannot initialise context\n");
54 fi = fz_open_file(ctx, argv[1]);
55 cmap = pdf_load_cmap(ctx, fi);
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);
64 if (cmap->codespace_len)
66 printf("begincodespacerange\n");
67 for (k = 0; k < cmap->codespace_len; k++)
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);
78 printf("<%x><%x>\n", cmap->codespace[k].low, cmap->codespace[k].high);
80 printf("endcodespacerange\n");
86 for (k = 0; k < cmap->rlen; k++)
87 if (cmap->ranges[k].high - cmap->ranges[k].low > 0)
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);
101 printf("endcidchar\n");
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);
114 printf("endcidrange\n");
120 for (k = 0; k < cmap->xlen; k++)
121 if (cmap->xranges[k].high - cmap->xranges[k].low > 0)
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);
135 printf("endcidchar\n");
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);
148 printf("endcidrange\n");
155 printf("beginbfchar\n");
156 for (k = 0; k < cmap->mlen; k++)
158 pc(cmap->mranges[k].low);
160 for (m = 0; m < cmap->mranges[k].len; ++m)
161 printf("%04x", cmap->mranges[k].out[m]);
164 printf("endbfchar\n");
169 fz_free_context(ctx);
173 void fz_new_font_context(fz_context *ctx)
177 void fz_drop_font_context(fz_context *ctx)
181 fz_font_context *fz_keep_font_context(fz_context *ctx)
186 void fz_new_colorspace_context(fz_context *ctx)
190 void fz_drop_colorspace_context(fz_context *ctx)
194 fz_colorspace_context *fz_keep_colorspace_context(fz_context *ctx)
199 void fz_new_aa_context(fz_context *ctx)
203 void fz_free_aa_context(fz_context *ctx)
207 void fz_copy_aa_context(fz_context *dst, fz_context *src)
211 void *fz_keep_storable(fz_context *ctx, fz_storable *s)
216 void fz_drop_storable(fz_context *ctx, fz_storable *s)
220 void fz_new_store_context(fz_context *ctx, unsigned int max)
224 void fz_drop_store_context(fz_context *ctx)
228 fz_store *fz_keep_store_context(fz_context *ctx)
233 int fz_store_scavenge(fz_context *ctx, unsigned int size, int *phase)
238 void fz_new_glyph_cache_context(fz_context *ctx)
242 void fz_drop_glyph_cache_context(fz_context *ctx)
246 fz_glyph_cache *fz_keep_glyph_cache(fz_context *ctx)
251 void fz_new_document_handler_context(fz_context *ctx)
255 void fz_drop_document_handler_context(fz_context *ctx)
259 fz_document_handler_context *fz_keep_document_handler_context(fz_context *ctx)