diff options
author | Tor Andersson <tor@ghostscript.com> | 2005-05-12 08:36:49 +0200 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2005-05-12 08:36:49 +0200 |
commit | 7f200b7987e147eaf75dceb907b83358ac25aff7 (patch) | |
tree | 4fbed5a023a0c3d35f8f7a21fa36f1323e45d94b /fitz/node_tolisp.c | |
parent | a5f974df7fa0aac1cf22c5e1be3fd06de820a41a (diff) | |
download | mupdf-7f200b7987e147eaf75dceb907b83358ac25aff7.tar.xz |
use bboxes in text extraction
Diffstat (limited to 'fitz/node_tolisp.c')
-rw-r--r-- | fitz/node_tolisp.c | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/fitz/node_tolisp.c b/fitz/node_tolisp.c new file mode 100644 index 00000000..b03d4e28 --- /dev/null +++ b/fitz/node_tolisp.c @@ -0,0 +1,191 @@ +#include <fitz.h> + +static void indent(int level) +{ + while (level--) + putchar(' '); +} + +static void lispnode(fz_node *node, int level); + +static void lispmeta(fz_metanode *node, int level) +{ + fz_node *child; + indent(level); + printf("(meta "); + if (node->name) { fz_debugobj(node->name); } + if (node->dict) { printf("\n"); fz_debugobj(node->dict); } + printf("\n"); + for (child = node->super.first; child; child = child->next) + lispnode(child, level + 1); + indent(level); + printf(")\n"); +} + +static void lispover(fz_overnode *node, int level) +{ + fz_node *child; + indent(level); + printf("(over\n"); + for (child = node->super.first; child; child = child->next) + lispnode(child, level + 1); + indent(level); + printf(")\n"); +} + +static void lispmask(fz_masknode *node, int level) +{ + fz_node *child; + indent(level); + printf("(mask\n"); + for (child = node->super.first; child; child = child->next) + lispnode(child, level + 1); + indent(level); + printf(")\n"); +} + +static void lispblend(fz_blendnode *node, int level) +{ + fz_node *child; + indent(level); + printf("(blend-%d\n", node->mode); + for (child = node->super.first; child; child = child->next) + lispnode(child, level + 1); + indent(level); + printf(")\n"); +} + +static void lisptransform(fz_transformnode *node, int level) +{ + indent(level); + printf("(transform %g %g %g %g %g %g\n", + node->m.a, node->m.b, + node->m.c, node->m.d, + node->m.e, node->m.f); + lispnode(node->super.first, level + 1); + indent(level); + printf(")\n"); +} + +static void lispcolor(fz_colornode *node, int level) +{ + int i; + indent(level); + printf("(color %s ", node->cs->name); + for (i = 0; i < node->n; i++) + printf("%g ", node->samples[i]); + printf(")\n"); +} + +static void lisplink(fz_linknode *node, int level) +{ + indent(level); + printf("(link %p)\n", node->tree); +} + +static void lisppath(fz_pathnode *node, int level) +{ + int i; + + indent(level); + + if (node->paint == FZ_STROKE) + { + printf("(path 'stroke %d %d %g %g ", + node->linecap, + node->linejoin, + node->linewidth, + node->miterlimit); + if (node->dash) + { + printf("%g '( ", node->dash->phase); + for (i = 0; i < node->dash->len; i++) + printf("%g ", node->dash->array[i]); + printf(")"); + } + else + printf("0 '()"); + } + else + { + printf("(path '%s", node->paint == FZ_FILL ? "fill" : "eofill"); + } + + printf("\n"); + fz_debugpathnode(node); + + indent(level); + printf(")\n"); +} + +static void lisptext(fz_textnode *node, int level) +{ + int i; + + indent(level); + printf("(text %s [%g %g %g %g]\n", node->font->name, + node->trm.a, node->trm.b, node->trm.c, node->trm.d); + + for (i = 0; i < node->len; i++) + { + indent(level + 1); + if (node->els[i].cid >= 32 && node->els[i].cid < 128) + printf("(cid '%c' %g %g)\n", node->els[i].cid, node->els[i].x, node->els[i].y); + else + printf("(cid <%04x> %g %g)\n", node->els[i].cid, node->els[i].x, node->els[i].y); + } + + indent(level); + printf(")\n"); +} + +static void lispimage(fz_imagenode *node, int level) +{ + fz_image *image = node->image; + indent(level); + printf("(image %dx%d %d+%d)\n", image->w, image->h, image->n, image->a); +} + +static void lispshade(fz_shadenode *node, int level) +{ + indent(level); + printf("(shade)\n"); +} + +static void lispnode(fz_node *node, int level) +{ + if (!node) + { + indent(level); + printf("(nil)\n"); + return; + } + + switch (node->kind) + { + case FZ_NMETA: lispmeta((fz_metanode*)node, level); break; + case FZ_NOVER: lispover((fz_overnode*)node, level); break; + case FZ_NMASK: lispmask((fz_masknode*)node, level); break; + case FZ_NBLEND: lispblend((fz_blendnode*)node, level); break; + case FZ_NTRANSFORM: lisptransform((fz_transformnode*)node, level); break; + case FZ_NCOLOR: lispcolor((fz_colornode*)node, level); break; + case FZ_NPATH: lisppath((fz_pathnode*)node, level); break; + case FZ_NTEXT: lisptext((fz_textnode*)node, level); break; + case FZ_NIMAGE: lispimage((fz_imagenode*)node, level); break; + case FZ_NSHADE: lispshade((fz_shadenode*)node, level); break; + case FZ_NLINK: lisplink((fz_linknode*)node, level); break; + } +} + +void +fz_debugnode(fz_node *node) +{ + lispnode(node, 0); +} + +void +fz_debugtree(fz_tree *tree) +{ + lispnode(tree->root, 0); +} + |