node_tolisp.c.svn-base

来自「SumatraPDF是一款小型开源的pdf阅读工具。虽然玲珑小巧(只有800多K」· SVN-BASE 代码 · 共 193 行

SVN-BASE
193
字号
#include "fitz-base.h"#include "fitz-world.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 %d\n", node->mode, node->cs->refs);	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(" %d)\n", node->cs->refs);}static void lisplink(fz_linknode *node, int level){	indent(level);	printf("(link %p %d)\n", node->tree, node->tree->refs);}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 %d)\n", image->w, image->h, image->n, image->a, image->refs);}static void lispshade(fz_shadenode *node, int level){	indent(level);	printf("(shade %d)\n", node->shade->refs);}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;	}}voidfz_debugnode(fz_node *node){	lispnode(node, 0);}voidfz_debugtree(fz_tree *tree){	lispnode(tree->root, 0);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?