synctex_parser.c.svn-base

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

SVN-BASE
1,720
字号
	synctex_node_type_input,    /*  Node type */	&_synctex_new_input,        /*  creator */	&_synctex_free_input,       /*  destructor */	&_synctex_log_input,        /*  log */	&_synctex_display_input,    /*  display */	NULL,                       /*  No parent */	NULL,                       /*  No child */	&_synctex_implementation_0, /*  sibling */	NULL,                       /*  No friend */	NULL,                       /*  No next box */	(_synctex_info_getter_t)&_synctex_implementation_1};synctex_node_t _synctex_new_input(synctex_scanner_t scanner) {	synctex_node_t node = _synctex_malloc(sizeof(synctex_input_t));	if(node) {		node->class = scanner?scanner->class+synctex_node_type_input:(synctex_class_t)&synctex_class_input;	}	return node;}void _synctex_free_input(synctex_node_t node){	if(node) {		SYNCTEX_FREE(SYNCTEX_SIBLING(node));		free(SYNCTEX_NAME(node));		free(node);	}}#	ifdef SYNCTEX_NOTHING#       pragma mark -#       pragma mark Navigation#   endifsynctex_node_t synctex_node_parent(synctex_node_t node){	return SYNCTEX_PARENT(node);}synctex_node_t synctex_node_sheet(synctex_node_t node){	while(node && node->class->type != synctex_node_type_sheet) {		node = SYNCTEX_PARENT(node);	}	/*  exit the while loop either when node is NULL or node is a sheet */	return node;}synctex_node_t synctex_node_child(synctex_node_t node){	return SYNCTEX_CHILD(node);}synctex_node_t synctex_node_sibling(synctex_node_t node){	return SYNCTEX_SIBLING(node);}synctex_node_t synctex_node_next(synctex_node_t node) {	if(SYNCTEX_CHILD(node)) {		return SYNCTEX_CHILD(node);	}sibling:	if(SYNCTEX_SIBLING(node)) {		return SYNCTEX_SIBLING(node);	}	if((node = SYNCTEX_PARENT(node))) {		if(node->class->type == synctex_node_type_sheet) {/*  EXC_BAD_ACCESS? */			return NULL;		}		goto sibling;	}	return NULL;}#	ifdef SYNCTEX_NOTHING#       pragma mark -#       pragma mark CLASS#   endif/*  Public node accessor: the type  */synctex_node_type_t synctex_node_type(synctex_node_t node) {	if(node) {		return (((node)->class))->type;	}	return synctex_node_type_error;}/*  Public node accessor: the human readable type  */const char *  synctex_node_isa(synctex_node_t node) {static const char *  isa[synctex_node_number_of_types] =		{"Not a node","input","sheet","vbox","void vbox","hbox","void hbox","kern","glue","math","boundary"};	return isa[synctex_node_type(node)];}#	ifdef SYNCTEX_NOTHING#       pragma mark -#       pragma mark SYNCTEX_LOG#   endif#   define SYNCTEX_LOG(NODE) SYNCTEX_MSG_SEND(NODE,log)/*  Public node logger  */void synctex_node_log(synctex_node_t node) {	SYNCTEX_LOG(node);}#   define SYNCTEX_DISPLAY(NODE) SYNCTEX_MSG_SEND(NODE,display)void synctex_node_display(synctex_node_t node) {	SYNCTEX_DISPLAY(node);}void _synctex_display_input(synctex_node_t node) {	printf("....Input:%i:%s\n",		SYNCTEX_TAG(node),		SYNCTEX_NAME(node));	SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));}void _synctex_log_sheet(synctex_node_t sheet) {	if(sheet) {		printf("%s:%i\n",synctex_node_isa(sheet),SYNCTEX_PAGE(sheet));		printf("SELF:%p",(void *)sheet);		printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(sheet));		printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(sheet));		printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(sheet));		printf(" SYNCTEX_FRIEND:%p\n",(void *)SYNCTEX_FRIEND(sheet));	}}void _synctex_log_small_node(synctex_node_t node) {	printf("%s:%i,%i:%i,%i\n",		synctex_node_isa(node),		SYNCTEX_TAG(node),		SYNCTEX_LINE(node),		SYNCTEX_HORIZ(node),		SYNCTEX_VERT(node));	printf("SELF:%p",(void *)node);	printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node));	printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node));	printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node));	printf(" SYNCTEX_FRIEND:%p\n",(void *)SYNCTEX_FRIEND(node));}void _synctex_log_medium_node(synctex_node_t node) {	printf("%s:%i,%i:%i,%i:%i\n",		synctex_node_isa(node),		SYNCTEX_TAG(node),		SYNCTEX_LINE(node),		SYNCTEX_HORIZ(node),		SYNCTEX_VERT(node),		SYNCTEX_WIDTH(node));	printf("SELF:%p",(void *)node);	printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node));	printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node));	printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node));	printf(" SYNCTEX_FRIEND:%p\n",(void *)SYNCTEX_FRIEND(node));}void _synctex_log_void_box(synctex_node_t node) {	printf("%s",synctex_node_isa(node));	printf(":%i",SYNCTEX_TAG(node));	printf(",%i",SYNCTEX_LINE(node));	printf(",%i",0);	printf(":%i",SYNCTEX_HORIZ(node));	printf(",%i",SYNCTEX_VERT(node));	printf(":%i",SYNCTEX_WIDTH(node));	printf(",%i",SYNCTEX_HEIGHT(node));	printf(",%i",SYNCTEX_DEPTH(node));	printf("\nSELF:%p",(void *)node);	printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node));	printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node));	printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node));	printf(" SYNCTEX_FRIEND:%p\n",(void *)SYNCTEX_FRIEND(node));}void _synctex_log_box(synctex_node_t node) {	printf("%s",synctex_node_isa(node));	printf(":%i",SYNCTEX_TAG(node));	printf(",%i",SYNCTEX_LINE(node));	printf(",%i",0);	printf(":%i",SYNCTEX_HORIZ(node));	printf(",%i",SYNCTEX_VERT(node));	printf(":%i",SYNCTEX_WIDTH(node));	printf(",%i",SYNCTEX_HEIGHT(node));	printf(",%i",SYNCTEX_DEPTH(node));	printf("\nSELF:%p",(void *)node);	printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node));	printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node));	printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node));	printf(" SYNCTEX_FRIEND:%p\n",(void *)SYNCTEX_FRIEND(node));}void _synctex_log_horiz_box(synctex_node_t node) {	printf("%s",synctex_node_isa(node));	printf(":%i",SYNCTEX_TAG(node));	printf(",%i",SYNCTEX_LINE(node));	printf(",%i",0);	printf(":%i",SYNCTEX_HORIZ(node));	printf(",%i",SYNCTEX_VERT(node));	printf(":%i",SYNCTEX_WIDTH(node));	printf(",%i",SYNCTEX_HEIGHT(node));	printf(",%i",SYNCTEX_DEPTH(node));	printf("/%i",SYNCTEX_HORIZ_V(node));	printf(",%i",SYNCTEX_VERT_V(node));	printf(":%i",SYNCTEX_WIDTH_V(node));	printf(",%i",SYNCTEX_HEIGHT_V(node));	printf(",%i",SYNCTEX_DEPTH_V(node));	printf("\nSELF:%p",(void *)node);	printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(node));	printf(" SYNCTEX_CHILD:%p",(void *)SYNCTEX_CHILD(node));	printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node));	printf(" SYNCTEX_FRIEND:%p\n",(void *)SYNCTEX_FRIEND(node));}void _synctex_log_input(synctex_node_t node) {	printf("%s",synctex_node_isa(node));	printf(":%i",SYNCTEX_TAG(node));	printf(",%s",SYNCTEX_NAME(node));	printf(" SYNCTEX_SIBLING:%p",(void *)SYNCTEX_SIBLING(node));}void _synctex_display_sheet(synctex_node_t sheet) {	if(sheet) {		printf("....{%i\n",SYNCTEX_PAGE(sheet));		SYNCTEX_DISPLAY(SYNCTEX_CHILD(sheet));		printf("....}\n");		SYNCTEX_DISPLAY(SYNCTEX_SIBLING(sheet));	}}void _synctex_display_vbox(synctex_node_t node) {	printf("....[%i,%i:%i,%i:%i,%i,%i\n",		SYNCTEX_TAG(node),		SYNCTEX_LINE(node),		SYNCTEX_HORIZ(node),		SYNCTEX_VERT(node),		SYNCTEX_WIDTH(node),		SYNCTEX_HEIGHT(node),		SYNCTEX_DEPTH(node));	SYNCTEX_DISPLAY(SYNCTEX_CHILD(node));	printf("....]\n");	SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));}void _synctex_display_hbox(synctex_node_t node) {	printf("....(%i,%i:%i,%i:%i,%i,%i\n",		SYNCTEX_TAG(node),		SYNCTEX_LINE(node),		SYNCTEX_HORIZ(node),		SYNCTEX_VERT(node),		SYNCTEX_WIDTH(node),		SYNCTEX_HEIGHT(node),		SYNCTEX_DEPTH(node));	SYNCTEX_DISPLAY(SYNCTEX_CHILD(node));	printf("....)\n");	SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));}void _synctex_display_void_vbox(synctex_node_t node) {	printf("....v%i,%i;%i,%i:%i,%i,%i\n",		SYNCTEX_TAG(node),		SYNCTEX_LINE(node),		SYNCTEX_HORIZ(node),		SYNCTEX_VERT(node),		SYNCTEX_WIDTH(node),		SYNCTEX_HEIGHT(node),		SYNCTEX_DEPTH(node));	SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));}void _synctex_display_void_hbox(synctex_node_t node) {	printf("....h%i,%i:%i,%i:%i,%i,%i\n",		SYNCTEX_TAG(node),		SYNCTEX_LINE(node),		SYNCTEX_HORIZ(node),		SYNCTEX_VERT(node),		SYNCTEX_WIDTH(node),		SYNCTEX_HEIGHT(node),		SYNCTEX_DEPTH(node));	SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));}void _synctex_display_glue(synctex_node_t node) {	printf("....glue:%i,%i:%i,%i\n",		SYNCTEX_TAG(node),		SYNCTEX_LINE(node),		SYNCTEX_HORIZ(node),		SYNCTEX_VERT(node));	SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));}void _synctex_display_math(synctex_node_t node) {	printf("....math:%i,%i:%i,%i\n",		SYNCTEX_TAG(node),		SYNCTEX_LINE(node),		SYNCTEX_HORIZ(node),		SYNCTEX_VERT(node));	SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));}void _synctex_display_kern(synctex_node_t node) {	printf("....kern:%i,%i:%i,%i:%i\n",		SYNCTEX_TAG(node),		SYNCTEX_LINE(node),		SYNCTEX_HORIZ(node),		SYNCTEX_VERT(node),		SYNCTEX_WIDTH(node));	SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));}void _synctex_display_boundary(synctex_node_t node) {	printf("....boundary:%i,%i:%i,%i\n",		SYNCTEX_TAG(node),		SYNCTEX_LINE(node),		SYNCTEX_HORIZ(node),		SYNCTEX_VERT(node));	SYNCTEX_DISPLAY(SYNCTEX_SIBLING(node));}#	ifdef SYNCTEX_NOTHING#       pragma mark -#       pragma mark SCANNER#   endif/*  Here are gathered all the possible status that the next scanning functions will return. *  All these functions return a status, and pass their result through pointers. *  Negative values correspond to errors. *  The management of the buffer is causing some significant overhead. *  Every function that may access the buffer returns a status related to the buffer and file state. *  status >= SYNCTEX_STATUS_OK means the function worked as expected *  status < SYNCTEX_STATUS_OK means the function did not work as expected *  status == SYNCTEX_STATUS_NOT_OK means the function did not work as expected but there is still some material to parse. *  status == SYNCTEX_STATUS_EOF means the function did not work as expected and there is no more material. *  status<SYNCTEX_STATUS_EOF means an error */typedef int synctex_status_t;/*  When the end of the synctex file has been reached: */#   define SYNCTEX_STATUS_EOF 0/*  When the function could not return the value it was asked for: */#   define SYNCTEX_STATUS_NOT_OK (SYNCTEX_STATUS_EOF+1)/*  When the function returns the value it was asked for: */#   define SYNCTEX_STATUS_OK (SYNCTEX_STATUS_NOT_OK+1)/*  Generic error: */#   define SYNCTEX_STATUS_ERROR -1/*  Parameter error: */#   define SYNCTEX_STATUS_BAD_ARGUMENT -2#   define SYNCTEX_FILE (scanner->file)/*  Actually, the minimum buffer size is driven by integer and float parsing.

⌨️ 快捷键说明

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