diff options
Diffstat (limited to 'Build/source/texk/web2c/synctexdir/synctex_parser.c')
-rw-r--r-- | Build/source/texk/web2c/synctexdir/synctex_parser.c | 500 |
1 files changed, 282 insertions, 218 deletions
diff --git a/Build/source/texk/web2c/synctexdir/synctex_parser.c b/Build/source/texk/web2c/synctexdir/synctex_parser.c index edca5ce8c7c..f4f7d848e43 100644 --- a/Build/source/texk/web2c/synctexdir/synctex_parser.c +++ b/Build/source/texk/web2c/synctexdir/synctex_parser.c @@ -3,8 +3,8 @@ This file is part of the __SyncTeX__ package. - [//]: # (Latest Revision: Wed Oct 11 19:19:08 UTC 2017) - [//]: # (Version: 1.20) + [//]: # (Latest Revision: Sun Oct 15 15:09:55 UTC 2017) + [//]: # (Version: 1.21) See `synctex_parser_readme.md` for more details @@ -59,8 +59,8 @@ * \file synctex_parser.c * \brief SyncTeX file parser and controller. * - author: Jérôme LAURENS - * \version 1.20 - * \date Mon Apr 24 07:08:56 UTC 2017 + * \version 1.21 + * \date Sun Oct 15 15:09:55 UTC 2017 * * Reads and parse *.synctex[.gz] files, * performs edit and display queries. @@ -106,6 +106,14 @@ #include <locale.h> #endif +/* Mark unused parameters, so that there will be no compile warnings. */ +#ifdef __DARWIN_UNIX03 +# define SYNCTEX_UNUSED(x) SYNCTEX_PRAGMA(unused(x)) +# define SYNCTEX_PRAGMA(x) _Pragma ( #x ) +#else +# define SYNCTEX_UNUSED(x) (void)(x); +#endif + #include "synctex_parser_advanced.h" SYNCTEX_INLINE static int _synctex_abs(int x) { @@ -168,26 +176,6 @@ typedef struct synctex_data_model_t { int size; } synctex_data_model_s; -static const synctex_data_model_s synctex_data_model_none = { - -1, /* tag */ - -1, /* line */ - -1, /* column */ - -1, /* h */ - -1, /* v */ - -1, /* width */ - -1, /* height */ - -1, /* depth */ - -1, /* mean_line */ - -1, /* weight */ - -1, /* h_V */ - -1, /* v_V */ - -1, /* width_V */ - -1, /* height_V */ - -1, /* depth_V */ - -1, /* name */ - -1, /* page */ - 0 /* size */ -}; typedef const synctex_data_model_s * synctex_data_model_p; typedef int (*synctex_int_getter_f)(synctex_node_p); @@ -198,9 +186,7 @@ typedef struct synctex_tlcpector_t { } synctex_tlcpector_s; typedef const synctex_tlcpector_s * synctex_tlcpector_p; static int _synctex_int_none(synctex_node_p node) { -# ifdef __DARWIN_UNIX03 -# pragma unused(node) -# endif + SYNCTEX_UNUSED(node) return 0; } static const synctex_tlcpector_s synctex_tlcpector_none = { @@ -234,9 +220,7 @@ typedef struct synctex_vispector_t { synctex_float_getter_f depth; } synctex_vispector_s; static float _synctex_float_none(synctex_node_p node) { -# ifdef __DARWIN_UNIX03 -# pragma unused(node) -# endif + SYNCTEX_UNUSED(node) return 0; } static const synctex_vispector_s synctex_vispector_none = { @@ -282,12 +266,12 @@ typedef synctex_node_p synctex_noxy_p; * \def SYNCTEX_MSG_SEND * \brief Takes care of sending the given message if possible. * - parameter NODE: of type synctex_node_p - * - parameter SELECTOR: one of the class pointer properties + * - parameter SELECTOR: one of the class_ pointer properties */ # define SYNCTEX_MSG_SEND(NODE,SELECTOR) do {\ synctex_node_p N__ = NODE;\ - if (N__ && N__->class->SELECTOR) {\ - (*(N__->class->SELECTOR))(N__);\ + if (N__ && N__->class_->SELECTOR) {\ + (*(N__->class_->SELECTOR))(N__);\ }\ } while (synctex_NO) @@ -376,7 +360,7 @@ __synctex_scanner_register_handle_to(NODE) #define DEFINE_SYNCTEX_TREE_HAS(WHAT)\ static synctex_bool_t _synctex_tree_has_##WHAT(synctex_node_p node) {\ if (node) {\ - if (node->class->navigator->WHAT>=0) {\ + if (node->class_->navigator->WHAT>=0) {\ return synctex_YES; \ } else {\ printf("WARNING: NO tree %s for %s\n", #WHAT, synctex_node_isa(node));\ @@ -388,13 +372,13 @@ static synctex_bool_t _synctex_tree_has_##WHAT(synctex_node_p node) {\ #define SYNCTEX_PARAMETER_ASSERT(WHAT) #define DEFINE_SYNCTEX_TREE_HAS(WHAT) \ static synctex_bool_t _synctex_tree_has_##WHAT(synctex_node_p node) {\ - return (node && (node->class->navigator->WHAT>=0));\ + return (node && (node->class_->navigator->WHAT>=0));\ } #endif # define DEFINE_SYNCTEX_TREE__GET(WHAT) \ SYNCTEX_INLINE static synctex_node_p __synctex_tree_##WHAT(synctex_non_null_node_p node) {\ - return node->data[node->class->navigator->WHAT].as_node;\ + return node->data[node->class_->navigator->WHAT].as_node;\ } # define DEFINE_SYNCTEX_TREE_GET(WHAT) \ DEFINE_SYNCTEX_TREE__GET(WHAT) \ @@ -406,8 +390,8 @@ static synctex_node_p _synctex_tree_##WHAT(synctex_node_p node) {\ } # define DEFINE_SYNCTEX_TREE__RESET(WHAT) \ SYNCTEX_INLINE static synctex_node_p __synctex_tree_reset_##WHAT(synctex_non_null_node_p node) {\ - synctex_node_p old = node->data[node->class->navigator->WHAT].as_node;\ - node->data[node->class->navigator->WHAT].as_node=NULL;\ + synctex_node_p old = node->data[node->class_->navigator->WHAT].as_node;\ + node->data[node->class_->navigator->WHAT].as_node=NULL;\ return old;\ } # define DEFINE_SYNCTEX_TREE_RESET(WHAT) \ @@ -419,7 +403,7 @@ SYNCTEX_INLINE static synctex_node_p _synctex_tree_reset_##WHAT(synctex_node_p n # define DEFINE_SYNCTEX_TREE__SET(WHAT) \ SYNCTEX_INLINE static synctex_node_p __synctex_tree_set_##WHAT(synctex_non_null_node_p node, synctex_node_p new_value) {\ synctex_node_p old = __synctex_tree_##WHAT(node);\ - node->data[node->class->navigator->WHAT].as_node=new_value;\ + node->data[node->class_->navigator->WHAT].as_node=new_value;\ return old;\ } # define DEFINE_SYNCTEX_TREE_SET(WHAT) \ @@ -533,8 +517,8 @@ typedef struct synctex_reader_t { char * current; /* current location in the buffer */ char * start; /* start of the buffer */ char * end; /* end of the buffer */ - int min_size; - int size; + size_t min_size; + size_t size; int lastv; int line_number; SYNCTEX_DECLARE_CHAR_OFFSET @@ -824,7 +808,7 @@ struct synctex_scanner_t { synctex_node_p ref_in_form; /* The first form ref node, its friends are the other form ref nodes in sheet */ int number_of_lists; /* The number of friend lists */ synctex_node_r lists_of_friends;/* The friend lists */ - synctex_class_s class[synctex_node_number_of_types]; /* The classes of the nodes of the scanner */ + synctex_class_s class_[synctex_node_number_of_types]; /* The classes of the nodes of the scanner */ int display_switcher; char * display_prompt; }; @@ -836,7 +820,7 @@ struct synctex_scanner_t { * to ask for an acceptable type. */ synctex_node_p synctex_node_new(synctex_scanner_p scanner, synctex_node_type_t type) { - return scanner? scanner->class[type].new(scanner):NULL; + return scanner? scanner->class_[type].new(scanner):NULL; } # if defined(SYNCTEX_USE_HANDLE) SYNCTEX_INLINE static void __synctex_scanner_free_handle(synctex_scanner_p scanner) { @@ -844,7 +828,7 @@ SYNCTEX_INLINE static void __synctex_scanner_free_handle(synctex_scanner_p scann } SYNCTEX_INLINE static void __synctex_scanner_remove_handle_to(synctex_node_p node) { synctex_node_p arg_sibling = NULL; - synctex_node_p handle = node->class->scanner->handle; + synctex_node_p handle = node->class_->scanner->handle; while (handle) { synctex_node_p sibling; if (node == _synctex_tree_target(handle)) { @@ -852,7 +836,7 @@ SYNCTEX_INLINE static void __synctex_scanner_remove_handle_to(synctex_node_p nod if (arg_sibling) { __synctex_tree_set_sibling(arg_sibling, sibling); } else { - node->class->scanner->handle = sibling; + node->class_->scanner->handle = sibling; } synctex_node_free(handle); break; @@ -865,20 +849,20 @@ SYNCTEX_INLINE static void __synctex_scanner_remove_handle_to(synctex_node_p nod } SYNCTEX_INLINE static void __synctex_scanner_register_handle_to(synctex_node_p node) { synctex_node_p NNN = _synctex_new_handle_with_target(node); - __synctex_tree_set_sibling(NNN,node->class->scanner->handle); - node->class->scanner->handle = NNN; + __synctex_tree_set_sibling(NNN,node->class_->scanner->handle); + node->class_->scanner->handle = NNN; } #endif #if SYNCTEX_USE_NODE_COUNT>10 SYNCTEX_INLINE static void _synctex_did_new(synctex_node_p node) { printf("NODE CREATED # %i, %s, %p\n", - (node->class->scanner->node_count)++, + (node->class_->scanner->node_count)++, synctex_node_isa(node), node); } SYNCTEX_INLINE static void _synctex_will_free(synctex_node_p node) { printf("NODE DELETED # %i, %s, %p\n", - --(node->class->scanner->node_count), + --(node->class_->scanner->node_count), synctex_node_isa(node), node); } @@ -989,14 +973,14 @@ static synctex_ss_s _synctex_decode_string(synctex_scanner_p scanner); * through the class modelator integer fields. * - parameter NODE: of type synctex_node_p */ -# define SYNCTEX_DATA(NODE) ((*((((NODE)->class))->info))(NODE)) +# define SYNCTEX_DATA(NODE) ((*((((NODE)->class_))->info))(NODE)) #if defined SYNCTEX_DEBUG > 1000 # define DEFINE_SYNCTEX_DATA_HAS(WHAT) \ SYNCTEX_INLINE static synctex_bool_t __synctex_data_has_##WHAT(synctex_node_p node) {\ - return (node && (node->class->modelator->WHAT>=0));\ + return (node && (node->class_->modelator->WHAT>=0));\ }\ SYNCTEX_INLINE static synctex_bool_t _synctex_data_has_##WHAT(synctex_node_p node) {\ - if (node && (node->class->modelator->WHAT<0)) {\ + if (node && (node->class_->modelator->WHAT<0)) {\ printf("WARNING: NO %s for %s\n", #WHAT, synctex_node_isa(node));\ }\ return __synctex_data_has_##WHAT(node);\ @@ -1004,7 +988,7 @@ SYNCTEX_INLINE static synctex_bool_t _synctex_data_has_##WHAT(synctex_node_p nod #else # define DEFINE_SYNCTEX_DATA_HAS(WHAT) \ SYNCTEX_INLINE static synctex_bool_t __synctex_data_has_##WHAT(synctex_node_p node) {\ - return (node && (node->class->modelator->WHAT>=0));\ + return (node && (node->class_->modelator->WHAT>=0));\ }\ SYNCTEX_INLINE static synctex_bool_t _synctex_data_has_##WHAT(synctex_node_p node) {\ return __synctex_data_has_##WHAT(node);\ @@ -1012,28 +996,28 @@ SYNCTEX_INLINE static synctex_bool_t _synctex_data_has_##WHAT(synctex_node_p nod #endif SYNCTEX_INLINE static synctex_data_p __synctex_data(synctex_node_p node) { - return node->data+node->class->navigator->size; + return node->data+node->class_->navigator->size; } # define DEFINE_SYNCTEX_DATA_INT_GETSET(WHAT) \ DEFINE_SYNCTEX_DATA_HAS(WHAT)\ static int _synctex_data_##WHAT(synctex_node_p node) {\ if (_synctex_data_has_##WHAT(node)) {\ - return __synctex_data(node)[node->class->modelator->WHAT].as_integer;\ + return __synctex_data(node)[node->class_->modelator->WHAT].as_integer;\ }\ return 0;\ }\ static int _synctex_data_set_##WHAT(synctex_node_p node, int new_value) {\ int old = 0;\ if (_synctex_data_has_##WHAT(node)) {\ - old = __synctex_data(node)[node->class->modelator->WHAT].as_integer;\ - __synctex_data(node)[node->class->modelator->WHAT].as_integer=new_value;\ + old = __synctex_data(node)[node->class_->modelator->WHAT].as_integer;\ + __synctex_data(node)[node->class_->modelator->WHAT].as_integer=new_value;\ }\ return old;\ } #define DEFINE_SYNCTEX_DATA_INT_DECODE(WHAT) \ static synctex_status_t _synctex_data_decode_##WHAT(synctex_node_p node) {\ if (_synctex_data_has_##WHAT(node)) {\ - synctex_is_s is = _synctex_decode_int(node->class->scanner);\ + synctex_is_s is = _synctex_decode_int(node->class_->scanner);\ if (is.status == SYNCTEX_STATUS_OK) {\ _synctex_data_set_##WHAT(node,is.integer);\ } \ @@ -1044,7 +1028,7 @@ static synctex_status_t _synctex_data_decode_##WHAT(synctex_node_p node) {\ # define DEFINE_SYNCTEX_DATA_INT_DECODE_v(WHAT) \ static synctex_status_t _synctex_data_decode_##WHAT##_v(synctex_node_p node) {\ if (_synctex_data_has_##WHAT(node)) {\ - synctex_is_s is = _synctex_decode_int_v(node->class->scanner);\ + synctex_is_s is = _synctex_decode_int_v(node->class_->scanner);\ if (is.status == SYNCTEX_STATUS_OK) {\ _synctex_data_set_##WHAT(node,is.integer);\ } \ @@ -1056,22 +1040,22 @@ static synctex_status_t _synctex_data_decode_##WHAT##_v(synctex_node_p node) {\ DEFINE_SYNCTEX_DATA_HAS(WHAT)\ static char * _synctex_data_##WHAT(synctex_node_p node) {\ if (_synctex_data_has_##WHAT(node)) {\ - return node->data[node->class->navigator->size+node->class->modelator->WHAT].as_string;\ + return node->data[node->class_->navigator->size+node->class_->modelator->WHAT].as_string;\ }\ return NULL;\ }\ static char * _synctex_data_set_##WHAT(synctex_node_p node, char * new_value) {\ char * old = "";\ if (_synctex_data_has_##WHAT(node)) {\ - old = node->data[node->class->navigator->size+node->class->modelator->WHAT].as_string;\ - node->data[node->class->navigator->size+node->class->modelator->WHAT].as_string =new_value;\ + old = node->data[node->class_->navigator->size+node->class_->modelator->WHAT].as_string;\ + node->data[node->class_->navigator->size+node->class_->modelator->WHAT].as_string =new_value;\ }\ return old;\ } #define DEFINE_SYNCTEX_DATA_STR_DECODE(WHAT) \ static synctex_status_t _synctex_data_decode_##WHAT(synctex_node_p node) {\ if (_synctex_data_has_##WHAT(node)) {\ - synctex_ss_s ss = _synctex_decode_string(node->class->scanner);\ + synctex_ss_s ss = _synctex_decode_string(node->class_->scanner);\ if (ss.status == SYNCTEX_STATUS_OK) {\ _synctex_data_set_##WHAT(node,ss.string);\ } \ @@ -1172,7 +1156,7 @@ static synctex_class_s synctex_class_input = { typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; + synctex_class_p class_; synctex_data_u data[synctex_tree_s_input_max+synctex_data_input_tln_max]; } synctex_input_s; @@ -1180,7 +1164,7 @@ static synctex_node_p _synctex_new_input(synctex_scanner_p scanner) { if (scanner) { synctex_node_p node = _synctex_malloc(sizeof(synctex_input_s)); if (node) { - node->class = scanner->class+synctex_node_type_input; + node->class_ = scanner->class_+synctex_node_type_input; SYNCTEX_DID_NEW(node); SYNCTEX_IMPLEMENT_CHARINDEX(node,0); SYNCTEX_REGISTER_HANDLE_TO(node); @@ -1219,7 +1203,7 @@ DEFINE_SYNCTEX_DATA_INT_GETSET_DECODE(page) typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; + synctex_class_p class_; synctex_data_u data[synctex_tree_scn_sheet_max+synctex_data_p_sheet_max]; } synctex_node_sheet_s; @@ -1231,7 +1215,7 @@ static synctex_node_p _synctex_new_##NAME(synctex_scanner_p scanner) {\ ++SYNCTEX_CUR;\ synctex_node_p node = _synctex_malloc(sizeof(synctex_node_##NAME##_s));\ if (node) {\ - node->class = scanner->class+synctex_node_type_##NAME;\ + node->class_ = scanner->class_+synctex_node_type_##NAME;\ SYNCTEX_DID_NEW(node); \ SYNCTEX_IMPLEMENT_CHARINDEX(node,-1);\ SYNCTEX_REGISTER_HANDLE_TO(node); \ @@ -1302,7 +1286,7 @@ static synctex_class_s synctex_class_sheet = { */ typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; + synctex_class_p class_; synctex_data_u data[synctex_tree_sct_form_max+synctex_data_t_form_max]; } synctex_node_form_s; @@ -1368,7 +1352,7 @@ static synctex_class_s synctex_class_form = { */ typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; + synctex_class_p class_; synctex_data_u data[synctex_tree_spcfl_vbox_max+synctex_data_box_max]; } synctex_node_vbox_s; @@ -1396,7 +1380,7 @@ static const synctex_tree_model_s synctex_tree_model_vbox = { DEFINE_SYNCTEX_DATA_INT_GETSET(column) static synctex_status_t _synctex_data_decode_column(synctex_node_p node) { if (_synctex_data_has_column(node)) { - synctex_is_s is = _synctex_decode_int_opt(node->class->scanner, + synctex_is_s is = _synctex_decode_int_opt(node->class_->scanner, SYNCTEX_DFLT_COLUMN); if (is.status == SYNCTEX_STATUS_OK) { _synctex_data_set_column(node,is.integer); @@ -1544,7 +1528,7 @@ static const synctex_data_model_s synctex_data_model_hbox = { typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; + synctex_class_p class_; synctex_data_u data[synctex_tree_spcfln_hbox_max+synctex_data_hbox_max]; } synctex_node_hbox_s; @@ -1590,7 +1574,7 @@ static const synctex_tree_model_s synctex_tree_model_spf = { }; typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; + synctex_class_p class_; synctex_data_u data[synctex_tree_spf_max+synctex_data_box_max]; } synctex_node_void_vbox_s; @@ -1650,7 +1634,7 @@ static synctex_class_s synctex_class_void_hbox = { /* The form ref node. */ typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; + synctex_class_p class_; synctex_data_u data[synctex_tree_spfa_max+synctex_data_ref_thv_max]; } synctex_node_ref_s; @@ -1734,7 +1718,7 @@ static const synctex_data_model_s synctex_data_model_tlchv = { typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; + synctex_class_p class_; synctex_data_u data[synctex_tree_spf_max+synctex_data_tlchv_max]; } synctex_node_tlchv_s; @@ -1807,7 +1791,7 @@ static const synctex_data_model_s synctex_data_model_tlchvw = { }; typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; + synctex_class_p class_; synctex_data_u data[synctex_tree_spf_max+synctex_data_tlchvw_max]; } synctex_node_kern_s; @@ -1884,7 +1868,7 @@ static synctex_class_s synctex_class_glue = { typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; + synctex_class_p class_; synctex_data_u data[synctex_tree_spf_max+synctex_data_box_max]; } synctex_node_rule_s; @@ -1954,7 +1938,7 @@ static synctex_class_s synctex_class_boundary = { typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; + synctex_class_p class_; synctex_data_u data[synctex_tree_spfa_max+synctex_data_tlchv_max]; } synctex_node_box_bdry_s; @@ -1963,7 +1947,7 @@ SYNCTEX_INLINE static synctex_node_p _synctex_new_##NAME(synctex_scanner_p scann if (scanner) {\ synctex_node_p node = _synctex_malloc(sizeof(synctex_node_##NAME##_s));\ if (node) {\ - node->class = scanner->class+synctex_node_type_##NAME;\ + node->class_ = scanner->class_+synctex_node_type_##NAME;\ SYNCTEX_DID_NEW(node); \ }\ return node;\ @@ -2099,7 +2083,7 @@ static const synctex_data_model_s synctex_data_model_proxy = { }; typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; + synctex_class_p class_; synctex_data_u data[synctex_tree_spcflnt_proxy_hbox_max+synctex_data_proxy_hv_max]; } synctex_node_proxy_hbox_s; @@ -2181,7 +2165,7 @@ static const synctex_tree_model_s synctex_tree_model_proxy_vbox = { typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; + synctex_class_p class_; synctex_data_u data[synctex_tree_spcflt_proxy_vbox_max+synctex_data_proxy_hv_max]; } synctex_node_proxy_vbox_s; @@ -2203,7 +2187,7 @@ static synctex_class_s synctex_class_proxy_vbox = { &synctex_tree_model_proxy_vbox, /* tree model */ &synctex_data_model_proxy, /* data model */ &synctex_tlcpector_proxy, /* tlcpector */ - &synctex_inspector_proxy_box, /* inspector */ + &synctex_inspector_proxy_box, /* inspector */ &synctex_vispector_proxy_box, /* vispector */ }; @@ -2229,7 +2213,7 @@ static const synctex_tree_model_s synctex_tree_model_proxy = { typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; + synctex_class_p class_; synctex_data_u data[synctex_tree_spft_proxy_max+synctex_data_proxy_hv_max]; } synctex_node_proxy_s; @@ -2285,7 +2269,7 @@ static const synctex_tree_model_s synctex_tree_model_proxy_last = { typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; + synctex_class_p class_; synctex_data_u data[synctex_tree_spfat_proxy_last_max+synctex_data_proxy_hv_max]; } synctex_node_proxy_last_s; @@ -2336,10 +2320,31 @@ static const synctex_tree_model_s synctex_tree_model_handle = { synctex_tree_spct_handle_max }; +static const synctex_data_model_s synctex_data_model_handle = { + -1, /* tag */ + -1, /* line */ + -1, /* column */ + -1, /* h */ + -1, /* v */ + -1, /* width */ + -1, /* height */ + -1, /* depth */ + -1, /* mean_line */ + synctex_data_handle_w_idx, /* weight */ + -1, /* h_V */ + -1, /* v_V */ + -1, /* width_V */ + -1, /* height_V */ + -1, /* depth_V */ + -1, /* name */ + -1, /* page */ + synctex_data_handle_w_max +}; + typedef struct { SYNCTEX_DECLARE_CHARINDEX - synctex_class_p class; - synctex_data_u data[synctex_tree_spct_handle_max+0]; + synctex_class_p class_; + synctex_data_u data[synctex_tree_spct_handle_max+synctex_data_handle_w_max]; } synctex_node_handle_s; /* handle node creator */ @@ -2358,7 +2363,7 @@ static synctex_class_s synctex_class_handle = { &_synctex_display_handle, /* display */ &_synctex_abstract_handle, /* abstract */ &synctex_tree_model_handle, /* tree model */ - &synctex_data_model_none, /* data model */ + &synctex_data_model_handle, /* data model */ &synctex_tlcpector_proxy, /* tlcpector */ &synctex_inspector_proxy_box, /* inspector */ &synctex_vispector_proxy_box, /* vispector */ @@ -2366,7 +2371,7 @@ static synctex_class_s synctex_class_handle = { SYNCTEX_INLINE static synctex_node_p _synctex_new_handle_with_target(synctex_node_p target) { if (target) { - synctex_node_p result = _synctex_new_handle(target->class->scanner); + synctex_node_p result = _synctex_new_handle(target->class_->scanner); if (result) { _synctex_tree_set_target(result,target); return result; @@ -2376,7 +2381,7 @@ SYNCTEX_INLINE static synctex_node_p _synctex_new_handle_with_target(synctex_nod } SYNCTEX_INLINE static synctex_node_p _synctex_new_handle_with_child(synctex_node_p child) { if (child) { - synctex_node_p result = _synctex_new_handle(child->class->scanner); + synctex_node_p result = _synctex_new_handle(child->class_->scanner); if (result) { _synctex_tree_set_child(result,child); return result; @@ -2423,10 +2428,10 @@ SYNCTEX_INLINE static synctex_node_p __synctex_new_proxy_from_ref_to(synctex_nod } switch(synctex_node_type(to_node)) { case synctex_node_type_vbox: - proxy = _synctex_new_proxy_vbox(ref->class->scanner); + proxy = _synctex_new_proxy_vbox(ref->class_->scanner); break; case synctex_node_type_hbox: - proxy = _synctex_new_proxy_hbox(ref->class->scanner); + proxy = _synctex_new_proxy_hbox(ref->class_->scanner); break; default: _synctex_error("! __synctex_new_proxy_from_ref_to. Unexpected form child (%s). Please report.", synctex_node_isa(to_node)); @@ -2462,7 +2467,7 @@ SYNCTEX_INLINE static synctex_node_p __synctex_new_child_proxy_to(synctex_node_p } switch(synctex_node_type(target)) { case synctex_node_type_vbox: - if ((proxy = _synctex_new_proxy_vbox(owner->class->scanner))) { + if ((proxy = _synctex_new_proxy_vbox(owner->class_->scanner))) { exit_standard: _synctex_data_set_h(proxy, _synctex_data_h(owner)); _synctex_data_set_v(proxy, _synctex_data_v(owner)); @@ -2476,7 +2481,7 @@ SYNCTEX_INLINE static synctex_node_p __synctex_new_child_proxy_to(synctex_node_p }; break; case synctex_node_type_proxy_vbox: - if ((proxy = _synctex_new_proxy_vbox(owner->class->scanner))) { + if ((proxy = _synctex_new_proxy_vbox(owner->class_->scanner))) { exit_proxy: target = _synctex_tree_target(to_node); _synctex_data_set_h(proxy, _synctex_data_h(owner)+_synctex_data_h(to_node)); @@ -2485,23 +2490,23 @@ SYNCTEX_INLINE static synctex_node_p __synctex_new_child_proxy_to(synctex_node_p }; break; case synctex_node_type_hbox: - if ((proxy = _synctex_new_proxy_hbox(owner->class->scanner))) { + if ((proxy = _synctex_new_proxy_hbox(owner->class_->scanner))) { goto exit_standard; }; break; case synctex_node_type_proxy_hbox: - if ((proxy = _synctex_new_proxy_hbox(owner->class->scanner))) { + if ((proxy = _synctex_new_proxy_hbox(owner->class_->scanner))) { goto exit_proxy; }; break; case synctex_node_type_proxy: case synctex_node_type_proxy_last: - if ((proxy = _synctex_new_proxy(owner->class->scanner))) { + if ((proxy = _synctex_new_proxy(owner->class_->scanner))) { goto exit_proxy; }; break; default: - if ((proxy = _synctex_new_proxy(owner->class->scanner))) { + if ((proxy = _synctex_new_proxy(owner->class_->scanner))) { goto exit_standard; }; break; @@ -2543,7 +2548,7 @@ SYNCTEX_INLINE static synctex_nns_s _synctex_new_child_proxies_to(synctex_node_p "Please report."); nns.status = SYNCTEX_STATUS_ERROR; } - } else if((sibling = _synctex_new_proxy_last(owner->class->scanner))) { + } else if((sibling = _synctex_new_proxy_last(owner->class_->scanner))) { _synctex_tree_set_sibling(nns.last,sibling); nns.last = sibling; _synctex_data_set_h(nns.last, _synctex_data_h(nns.first)); @@ -2592,9 +2597,9 @@ SYNCTEX_INLINE static synctex_node_p synctex_tree_set_friend(synctex_node_p node SYNCTEX_INLINE static synctex_node_p __synctex_node_make_friend(synctex_node_p node, int i) { synctex_node_p old = NULL; if (i>=0) { - i = i%(node->class->scanner->number_of_lists); - old = synctex_tree_set_friend(node,(node->class->scanner->lists_of_friends)[i]); - (node->class->scanner->lists_of_friends)[i] = node; + i = i%(node->class_->scanner->number_of_lists); + old = synctex_tree_set_friend(node,(node->class_->scanner->lists_of_friends)[i]); + (node->class_->scanner->lists_of_friends)[i] = node; #if SYNCTEX_DEBUG>500 printf("tl(%i)=>",i); synctex_node_log(node); @@ -2866,16 +2871,16 @@ synctex_node_p synctex_node_arg_sibling(synctex_node_p node) { /* Public node accessor: the type */ synctex_node_type_t synctex_node_type(synctex_node_p node) { - return node? node->class->type: synctex_node_type_none; + return node? node->class_->type: synctex_node_type_none; } /* Public node accessor: the type */ synctex_node_type_t synctex_node_target_type(synctex_node_p node) { synctex_node_p target = _synctex_tree_target(node); if (target) { - return (((target)->class))->type; + return (((target)->class_))->type; } else if (node) { - return (((node)->class))->type; + return (((node)->class_))->type; } return synctex_node_type_none; } @@ -3142,14 +3147,14 @@ static char * _synctex_scanner_display_prompt_up(synctex_scanner_p scanR) { void synctex_node_display(synctex_node_p node) { if (node) { - synctex_scanner_p scanR = node->class->scanner; + synctex_scanner_p scanR = node->class_->scanner; if (scanR) { if (scanR->display_switcher<0) { SYNCTEX_MSG_SEND(node, display); } else if (scanR->display_switcher>0 && --scanR->display_switcher>0) { SYNCTEX_MSG_SEND(node, display); } else if (scanR->display_switcher-->=0) { - printf("%s Next display skipped. Reset display switcher.\n",node->class->scanner->display_prompt); + printf("%s Next display skipped. Reset display switcher.\n",node->class_->scanner->display_prompt); } } else { SYNCTEX_MSG_SEND(node, display); @@ -3157,16 +3162,16 @@ void synctex_node_display(synctex_node_p node) { } } static char * _synctex_node_abstract(synctex_node_p node) { - SYNCTEX_PARAMETER_ASSERT(node || node->class); - return (node && node->class->abstract)? node->class->abstract(node):"none"; + SYNCTEX_PARAMETER_ASSERT(node || node->class_); + return (node && node->class_->abstract)? node->class_->abstract(node):"none"; } SYNCTEX_INLINE static void _synctex_display_child(synctex_node_p node) { synctex_node_p N = _synctex_tree_child(node); if (N) { - _synctex_scanner_display_prompt_down(N->class->scanner); + _synctex_scanner_display_prompt_down(N->class_->scanner); synctex_node_display(N); - _synctex_scanner_display_prompt_up(N->class->scanner); + _synctex_scanner_display_prompt_up(N->class_->scanner); } } @@ -3214,11 +3219,11 @@ static void _synctex_display_sheet(synctex_node_p node) { printf("%s{%i" SYNCTEX_PRINT_CHARINDEX_FMT "\n", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_data_page(node) SYNCTEX_PRINT_CHARINDEX_WHAT); _synctex_display_child(node); - printf("%s}\n",node->class->scanner->display_prompt); + printf("%s}\n",node->class_->scanner->display_prompt); _synctex_display_sibling(node); } } @@ -3239,11 +3244,11 @@ static void _synctex_display_form(synctex_node_p node) { printf("%s<%i" SYNCTEX_PRINT_CHARINDEX_FMT "\n", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_data_tag(node) SYNCTEX_PRINT_CHARINDEX_WHAT); _synctex_display_child(node); - printf("%s>\n",node->class->scanner->display_prompt); + printf("%s>\n",node->class_->scanner->display_prompt); _synctex_display_sibling(node); } } @@ -3270,7 +3275,7 @@ static void _synctex_display_vbox(synctex_node_p node) { printf("%s[%i,%i:%i,%i:%i,%i,%i" SYNCTEX_PRINT_CHARINDEX_FMT "\n", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_data_tag(node), _synctex_data_line(node), _synctex_data_h(node), @@ -3281,8 +3286,8 @@ static void _synctex_display_vbox(synctex_node_p node) { SYNCTEX_PRINT_CHARINDEX_WHAT); _synctex_display_child(node); printf("%s]\n%slast:%s\n", - node->class->scanner->display_prompt, - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_node_abstract(_synctex_tree_last(node))); _synctex_display_sibling(node); } @@ -3312,7 +3317,7 @@ static void _synctex_display_hbox(synctex_node_p node) { printf("%s(%i,%i~%i*%i:%i,%i:%i,%i,%i" SYNCTEX_PRINT_CHARINDEX_FMT "\n", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_data_tag(node), _synctex_data_line(node), _synctex_data_mean_line(node), @@ -3325,8 +3330,8 @@ static void _synctex_display_hbox(synctex_node_p node) { SYNCTEX_PRINT_CHARINDEX_WHAT); _synctex_display_child(node); printf("%s)\n%slast:%s\n", - node->class->scanner->display_prompt, - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_node_abstract(_synctex_tree_last(node))); _synctex_display_sibling(node); } @@ -3355,7 +3360,7 @@ static void _synctex_display_void_vbox(synctex_node_p node) { printf("%sv%i,%i;%i,%i:%i,%i,%i" SYNCTEX_PRINT_CHARINDEX_FMT "\n", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_data_tag(node), _synctex_data_line(node), _synctex_data_h(node), @@ -3390,7 +3395,7 @@ static void _synctex_display_void_hbox(synctex_node_p node) { printf("%sh%i,%i:%i,%i:%i,%i,%i" SYNCTEX_PRINT_CHARINDEX_FMT "\n", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_data_tag(node), _synctex_data_line(node), _synctex_data_h(node), @@ -3422,7 +3427,7 @@ static void _synctex_display_glue(synctex_node_p node) { printf("%sglue:%i,%i:%i,%i" SYNCTEX_PRINT_CHARINDEX_FMT "\n", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_data_tag(node), _synctex_data_line(node), _synctex_data_h(node), @@ -3454,7 +3459,7 @@ static void _synctex_display_rule(synctex_node_p node) { printf("%srule:%i,%i:%i,%i:%i,%i,%i" SYNCTEX_PRINT_CHARINDEX_FMT "\n", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_data_tag(node), _synctex_data_line(node), _synctex_data_h(node), @@ -3486,7 +3491,7 @@ static void _synctex_display_math(synctex_node_p node) { printf("%smath:%i,%i:%i,%i" SYNCTEX_PRINT_CHARINDEX_FMT "\n", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_data_tag(node), _synctex_data_line(node), _synctex_data_h(node), @@ -3516,7 +3521,7 @@ static void _synctex_display_kern(synctex_node_p node) { printf("%skern:%i,%i:%i,%i:%i" SYNCTEX_PRINT_CHARINDEX_FMT "\n", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_data_tag(node), _synctex_data_line(node), _synctex_data_h(node), @@ -3546,7 +3551,7 @@ static void _synctex_display_boundary(synctex_node_p node) { printf("%sboundary:%i,%i:%i,%i" SYNCTEX_PRINT_CHARINDEX_FMT "\n", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_data_tag(node), _synctex_data_line(node), _synctex_data_h(node), @@ -3572,7 +3577,7 @@ static char * _synctex_abstract_box_bdry(synctex_node_p node) { static void _synctex_display_box_bdry(synctex_node_p node) { if (node) { printf("%sbox bdry:%i,%i:%i,%i", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_data_tag(node), _synctex_data_line(node), _synctex_data_h(node), @@ -3597,7 +3602,7 @@ static char * _synctex_abstract_ref(synctex_node_p node) { static void _synctex_display_ref(synctex_node_p node) { if (node) { printf("%sform ref:%i:%i,%i", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_data_tag(node), _synctex_data_h(node), _synctex_data_v(node)); @@ -3624,7 +3629,7 @@ static void _synctex_display_proxy(synctex_node_p node) { if (node) { synctex_node_p N = _synctex_tree_target(node); printf("%s%s:%i,%i:%i,%i", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, synctex_node_isa(node), synctex_node_tag(node), synctex_node_line(node), @@ -3667,7 +3672,7 @@ static void _synctex_display_proxy_vbox(synctex_node_p node) { printf("%s[*%i,%i:%i,%i:%i,%i,%i" SYNCTEX_PRINT_CHARINDEX_FMT "\n", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, synctex_node_tag(node), synctex_node_line(node), synctex_node_h(node), @@ -3678,8 +3683,8 @@ static void _synctex_display_proxy_vbox(synctex_node_p node) { SYNCTEX_PRINT_CHARINDEX_WHAT); _synctex_display_child(node); printf("%s*]\n%slast:%s\n", - node->class->scanner->display_prompt, - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_node_abstract(_synctex_tree_last(node))); _synctex_display_sibling(node); } @@ -3710,7 +3715,7 @@ static void _synctex_display_proxy_hbox(synctex_node_p node) { printf("%s(*%i,%i~%i*%i:%i,%i:%i,%i,%i" SYNCTEX_PRINT_CHARINDEX_FMT "\n", - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, synctex_node_tag(node), synctex_node_line(node), synctex_node_mean_line(node), @@ -3723,8 +3728,8 @@ static void _synctex_display_proxy_hbox(synctex_node_p node) { SYNCTEX_PRINT_CHARINDEX_WHAT); _synctex_display_child(node); printf("%s*)\n%slast:%s\n", - node->class->scanner->display_prompt, - node->class->scanner->display_prompt, + node->class_->scanner->display_prompt, + node->class_->scanner->display_prompt, _synctex_node_abstract(_synctex_tree_last(node))); _synctex_display_sibling(node); } @@ -3734,7 +3739,7 @@ static char * _synctex_abstract_handle(synctex_node_p node) { static char abstract[SYNCTEX_ABSTRACT_MAX] = "none"; if (node) { synctex_node_p N = _synctex_tree_target(node); - if (N && !N->class) { + if (N && !N->class_) { exit(1); } snprintf(abstract,SYNCTEX_ABSTRACT_MAX,"%s:%s", @@ -3746,9 +3751,10 @@ static char * _synctex_abstract_handle(synctex_node_p node) { static void _synctex_display_handle(synctex_node_p node) { if (node) { synctex_node_p N = _synctex_tree_target(node); - printf("%s%s:->%s\n", - node->class->scanner->display_prompt, + printf("%s%s(%i):->%s\n", + node->class_->scanner->display_prompt, synctex_node_isa(node), + _synctex_data_weight(N), _synctex_node_abstract(N)); _synctex_display_child(node); _synctex_display_sibling(node); @@ -4974,7 +4980,7 @@ SYNCTEX_INLINE static synctex_box_s _synctex_data_box_V(synctex_node_p node); SYNCTEX_INLINE static synctex_node_p _synctex_input_register_line(synctex_node_p input,synctex_node_p node) { if (node && _synctex_data_tag(input) != _synctex_data_tag(node)) { - input = synctex_scanner_input_with_tag(node->class->scanner,_synctex_data_tag(node)); + input = synctex_scanner_input_with_tag(node->class_->scanner,_synctex_data_tag(node)); } if (_synctex_data_line(node)>_synctex_data_line(input)) { _synctex_data_set_line(input,_synctex_data_line(node)); @@ -5699,7 +5705,7 @@ SYNCTEX_INLINE static synctex_ns_s __synctex_replace_ref(synctex_node_p ref) { synctex_node_p arg_sibling = synctex_node_arg_sibling(ref); /* arg_sibling != NULL because the child of a box * is always a box boundary, not a ref. */ - synctex_node_p target = synctex_form_content(ref->class->scanner, _synctex_data_tag(ref)); + synctex_node_p target = synctex_form_content(ref->class_->scanner, _synctex_data_tag(ref)); /* The target is a single node (box) * with children and no siblings. */ if ((ns.node = __synctex_new_proxy_from_ref_to(ref, target))) { @@ -5783,8 +5789,8 @@ SYNCTEX_INLINE static synctex_status_t _synctex_post_process_proxy(synctex_node_ printf("POST PROCESSING %s\n",_synctex_node_abstract(proxy)); { int i,j = 0; - for (i=0;i<proxy->class->scanner->number_of_lists;++i) { - synctex_node_p N = proxy->class->scanner->lists_of_friends[i]; + for (i=0;i<proxy->class_->scanner->number_of_lists;++i) { + synctex_node_p N = proxy->class_->scanner->lists_of_friends[i]; do { if (N==proxy) { ++j; @@ -5801,8 +5807,8 @@ SYNCTEX_INLINE static synctex_status_t _synctex_post_process_proxy(synctex_node_ #if SYNCTEX_DEBUG>500 { int i,j = 0; - for (i=0;i<proxy->class->scanner->number_of_lists;++i) { - synctex_node_p N = proxy->class->scanner->lists_of_friends[i]; + for (i=0;i<proxy->class_->scanner->number_of_lists;++i) { + synctex_node_p N = proxy->class_->scanner->lists_of_friends[i]; do { if (N==proxy) { ++j; @@ -5820,8 +5826,8 @@ SYNCTEX_INLINE static synctex_status_t _synctex_post_process_proxy(synctex_node_ #if SYNCTEX_DEBUG>500 if (proxy) { int i,j = 0; - for (i=0;i<proxy->class->scanner->number_of_lists;++i) { - synctex_node_p N = proxy->class->scanner->lists_of_friends[i]; + for (i=0;i<proxy->class_->scanner->number_of_lists;++i) { + synctex_node_p N = proxy->class_->scanner->lists_of_friends[i]; do { if (N==proxy) { ++j; @@ -5973,8 +5979,8 @@ synctex_scanner_p synctex_scanner_new() { # pragma mark - # endif # define DEFINE_synctex_scanner_class(NAME)\ - scanner->class[synctex_node_type_##NAME] = synctex_class_##NAME;\ -(scanner->class[synctex_node_type_##NAME]).scanner = scanner + scanner->class_[synctex_node_type_##NAME] = synctex_class_##NAME;\ +(scanner->class_[synctex_node_type_##NAME]).scanner = scanner DEFINE_synctex_scanner_class(input); DEFINE_synctex_scanner_class(sheet); DEFINE_synctex_scanner_class(form); @@ -6205,7 +6211,7 @@ const char * synctex_scanner_get_name(synctex_scanner_p scanner,int tag) { } const char * synctex_node_get_name(synctex_node_p node) { if (node) { - return synctex_scanner_get_name(node->class->scanner,_synctex_data_tag(node)); + return synctex_scanner_get_name(node->class_->scanner,_synctex_data_tag(node)); } return NULL; } @@ -6320,8 +6326,8 @@ const char * synctex_scanner_get_synctex(synctex_scanner_p scanner) { # define SYNCTEX_DEFINE_NODE_HVWHD(WHAT) \ int synctex_node_##WHAT(synctex_node_p node) { \ - return (node && node->class->inspector->WHAT)? \ - node->class->inspector->WHAT(node): 0; \ + return (node && node->class_->inspector->WHAT)? \ + node->class_->inspector->WHAT(node): 0; \ } # define SYNCTEX_DEFINE_PROXY_HV(WHAT) \ static int _synctex_proxy_##WHAT(synctex_proxy_p proxy) { \ @@ -6372,10 +6378,10 @@ SYNCTEX_DEFINE_PROXY_TLCWVD(depth) SYNCTEX_INLINE static synctex_bool_t _synctex_node_is_box(synctex_node_p node) { return node && - (node->class->type == synctex_node_type_hbox - || node->class->type == synctex_node_type_void_hbox - || node->class->type == synctex_node_type_vbox - || node->class->type == synctex_node_type_void_vbox + (node->class_->type == synctex_node_type_hbox + || node->class_->type == synctex_node_type_void_hbox + || node->class_->type == synctex_node_type_vbox + || node->class_->type == synctex_node_type_void_vbox || _synctex_node_is_box(_synctex_tree_target(node))); } @@ -6389,7 +6395,7 @@ SYNCTEX_INLINE static synctex_bool_t _synctex_node_is_box(synctex_node_p node) { SYNCTEX_INLINE static synctex_bool_t _synctex_node_is_handle(synctex_node_p node) { return node && - (node->class->type == synctex_node_type_handle); + (node->class_->type == synctex_node_type_handle); } /** @@ -6412,8 +6418,8 @@ SYNCTEX_INLINE static synctex_node_p _synctex_node_or_handle_target(synctex_node SYNCTEX_INLINE static synctex_bool_t _synctex_node_is_hbox(synctex_node_p node) { return node && - (node->class->type == synctex_node_type_hbox - || node->class->type == synctex_node_type_void_hbox + (node->class_->type == synctex_node_type_hbox + || node->class_->type == synctex_node_type_void_hbox || _synctex_node_is_hbox(_synctex_tree_target(node))); } @@ -6560,11 +6566,11 @@ int synctex_node_hbox_depth(synctex_node_p node) { # endif #define SYNCTEX_VISIBLE_SIZE(node,s) \ -(s)*node->class->scanner->unit +(s)*node->class_->scanner->unit #define SYNCTEX_VISIBLE_DISTANCE_h(node,d) \ -((d)*node->class->scanner->unit+node->class->scanner->x_offset) +((d)*node->class_->scanner->unit+node->class_->scanner->x_offset) #define SYNCTEX_VISIBLE_DISTANCE_v(node,d) \ -((d)*node->class->scanner->unit+node->class->scanner->y_offset) +((d)*node->class_->scanner->unit+node->class_->scanner->y_offset) static float __synctex_node_visible_h(synctex_node_p node) { return SYNCTEX_VISIBLE_DISTANCE_h(node,synctex_node_h(node)); } @@ -6633,7 +6639,7 @@ static float __synctex_rule_visible_depth(synctex_noxy_p noxy) { * - author: JL */ float synctex_node_visible_h(synctex_node_p node){ - return node? node->class->vispector->h(node): 0; + return node? node->class_->vispector->h(node): 0; } /** * The vertical location of node, in page coordinates. @@ -6642,7 +6648,7 @@ float synctex_node_visible_h(synctex_node_p node){ * - author: JL */ float synctex_node_visible_v(synctex_node_p node){ - return node? node->class->vispector->v(node): 0; + return node? node->class_->vispector->v(node): 0; } /** * The width of node, in page coordinates. @@ -6651,7 +6657,7 @@ float synctex_node_visible_v(synctex_node_p node){ * - author: JL */ float synctex_node_visible_width(synctex_node_p node){ - return node? node->class->vispector->width(node): 0; + return node? node->class_->vispector->width(node): 0; } /** * The height of node, in page coordinates. @@ -6660,7 +6666,7 @@ float synctex_node_visible_width(synctex_node_p node){ * - author: JL */ float synctex_node_visible_height(synctex_node_p node){ - return node? node->class->vispector->height(node): 0; + return node? node->class_->vispector->height(node): 0; } /** * The depth of node, in page coordinates. @@ -6669,7 +6675,7 @@ float synctex_node_visible_height(synctex_node_p node){ * - author: JL */ float synctex_node_visible_depth(synctex_node_p node){ - return node? node->class->vispector->depth(node): 0; + return node? node->class_->vispector->depth(node): 0; } /** @@ -6773,7 +6779,7 @@ SYNCTEX_INLINE static synctex_box_s _synctex_data_box_V(synctex_node_p node) { static synctex_node_p _synctex_node_box_visible(synctex_node_p node) { if ((node = _synctex_node_or_handle_target(node))) { int mean = 0; - int bound = 1500000/(node->class->scanner->pre_magnification/1000.0); + int bound = 1500000/(node->class_->scanner->pre_magnification/1000.0); synctex_node_p parent = NULL; /* get the first enclosing parent * then get the highest enclosing parent with the same mean line ±1 */ @@ -6900,7 +6906,7 @@ synctex_charindex_t synctex_node_charindex(synctex_node_p node) { * - author: JL */ int synctex_node_tag(synctex_node_p node) { - return node? node->class->tlcpector->tag(node): -1; + return node? node->class_->tlcpector->tag(node): -1; } /** * The line of the node. @@ -6909,7 +6915,7 @@ int synctex_node_tag(synctex_node_p node) { * - author: JL */ int synctex_node_line(synctex_node_p node) { - return node? node->class->tlcpector->line(node): -1; + return node? node->class_->tlcpector->line(node): -1; } /** * The column of the node. @@ -6918,7 +6924,7 @@ int synctex_node_line(synctex_node_p node) { * - author: JL */ int synctex_node_column(synctex_node_p node) { - return node? node->class->tlcpector->column(node): -1; + return node? node->class_->tlcpector->column(node): -1; } /** * The mean line number of the node. @@ -7057,41 +7063,93 @@ SYNCTEX_INLINE static synctex_node_p _synctex_scanner_friend(synctex_scanner_p s SYNCTEX_INLINE static synctex_bool_t _synctex_nodes_are_friend(synctex_node_p left, synctex_node_p right) { return synctex_node_tag(left) == synctex_node_tag(right) && synctex_node_line(left) == synctex_node_line(right); } -SYNCTEX_INLINE static synctex_node_p _synctex_vertically_sorted_v2(synctex_node_p sibling) { - synctex_node_p child = NULL; - synctex_node_p best_child = sibling; - synctex_node_p next_child = _synctex_tree_reset_child(best_child); - synctex_node_p target = _synctex_tree_target(best_child); - synctex_node_p parent = _synctex_tree_parent(target); - unsigned int best_count = 0; - unsigned int count = 0; - synctex_node_p N = _synctex_tree_child(parent); +/** + * The sibling argument is a parent/child list of nodes of the same page. + */ +typedef struct { + int count; + synctex_node_p node; +} synctex_counted_node_s; + +SYNCTEX_INLINE static synctex_counted_node_s _synctex_vertically_sorted_v2(synctex_node_p sibling) { + /* Clean the weights of the parents */ + synctex_counted_node_s result = {0, NULL}; + synctex_node_p h = NULL; + synctex_node_p next_h = NULL; + synctex_node_p parent = NULL; + int weight = 0; + synctex_node_p N = NULL; + h = sibling; do { - if (_synctex_nodes_are_friend(N,best_child)) { - ++best_count; - } - } while ((N = __synctex_tree_sibling(N))); - /* Navigate through the other children */ - while ((child = next_child)) { - next_child = _synctex_tree_reset_child(child); - target = _synctex_tree_target(child); - parent = _synctex_tree_parent(target); - count = 0; - N = _synctex_tree_child(parent); - do { - if (_synctex_nodes_are_friend(N,best_child)) { - ++count; - } - } while ((N = __synctex_tree_sibling(N))); - if (count>best_count) { - best_count = count; - synctex_node_free(best_child); - best_child = child; + N = _synctex_tree_target(h); + parent = _synctex_tree_parent(N); + _synctex_data_set_weight(parent, 0); + } while((h = _synctex_tree_child(h))); + /* Compute the weights of the nodes */ + h = sibling; + do { + N = _synctex_tree_target(h); + parent = _synctex_tree_parent(N); + weight = _synctex_data_weight(parent); + if (weight==0) { + N = _synctex_tree_child(parent); + do { + if (_synctex_nodes_are_friend(N,sibling)) { + ++ weight; + } + } while ((N = __synctex_tree_sibling(N))); + _synctex_data_set_weight(h,weight); + _synctex_data_set_weight(parent,weight); + } + } while((h = _synctex_tree_child(h))); + /* Order handle nodes according to the weight */ + h = _synctex_tree_reset_child(sibling); + result.node = sibling; + weight = 0; + while((h)) { + N = result.node; + if (_synctex_data_weight(h)>_synctex_data_weight(N)) { + next_h = _synctex_tree_set_child(h,N); + result.node = h; + } else if (_synctex_data_weight(h) == 0) { + ++ weight; + next_h = _synctex_tree_reset_child(h); + synctex_node_free(h); } else { - synctex_node_free(child); + synctex_node_p next_N = NULL; + while((next_N = _synctex_tree_child(N))) { + N = next_N; + if (_synctex_data_weight(h)<_synctex_data_weight(next_N)) { + continue; + } + break; + } + next_h = _synctex_tree_set_child(h,_synctex_tree_set_child(N,h)); } + h = next_h; + }; + h = result.node; + weight = 0; + do { + ++weight; + } while((h = _synctex_tree_child(h))); + result.count = 1; + h = result.node; + while((next_h = _synctex_tree_child(h))) { + if (_synctex_data_weight(next_h)==0) { + _synctex_tree_reset_child(h); + weight = 1; + h = next_h; + while((h = _synctex_tree_child(h))) { + ++weight; + } + synctex_node_free(next_h); + break; + } + ++result.count; + h = next_h; } - return best_child; + return result; } SYNCTEX_INLINE static synctex_bool_t _synctex_point_in_box_v2(synctex_point_p hitP, synctex_node_p node); @@ -7145,8 +7203,12 @@ static synctex_nd_s _synctex_eq_closest_child_v2(synctex_point_p hitP, synctex_n # pragma mark Queries # endif +/** + * iterator for a deep first tree traversal. + */ struct synctex_iterator_t { synctex_node_p seed; + synctex_node_p top; synctex_node_p next; int count0; int count; @@ -7155,7 +7217,7 @@ struct synctex_iterator_t { SYNCTEX_INLINE static synctex_iterator_p _synctex_iterator_new(synctex_node_p result, int count) { synctex_iterator_p iterator; if ((iterator = _synctex_malloc(sizeof(synctex_iterator_s)))) { - iterator->seed = iterator->next = result; + iterator->seed = iterator->top = iterator->next = result; iterator->count0 = iterator->count = count; } return iterator; @@ -7183,7 +7245,9 @@ int synctex_iterator_count(synctex_iterator_p iterator) { synctex_node_p synctex_iterator_next_result(synctex_iterator_p iterator) { if (iterator && iterator->count>0) { synctex_node_p N = iterator->next; - iterator->next = __synctex_tree_sibling(N); + if(!(iterator->next = _synctex_tree_child(N))) { + iterator->next = iterator->top = __synctex_tree_sibling(iterator->top); + } --iterator->count; return _synctex_tree_target(N); } @@ -7191,7 +7255,7 @@ synctex_node_p synctex_iterator_next_result(synctex_iterator_p iterator) { } int synctex_iterator_reset(synctex_iterator_p iterator) { if (iterator) { - iterator->next = iterator->seed; + iterator->next = iterator->top = iterator->seed; return iterator->count = iterator->count0; } return 0; @@ -7376,6 +7440,7 @@ static synctex_node_p _synctex_display_query_v2(synctex_node_p target, int tag, /* Find a result with the same page number */; do { if (_synctex_node_target_page(same_page_node) == page) { + /* Insert result between same_page_node and its child */ _synctex_tree_set_child(result,_synctex_tree_set_child(same_page_node,result)); } else if ((same_page_node = __synctex_tree_sibling(same_page_node))) { continue; @@ -7394,9 +7459,7 @@ static synctex_node_p _synctex_display_query_v2(synctex_node_p target, int tag, return first_handle; } synctex_iterator_p synctex_iterator_new_display(synctex_scanner_p scanner,const char * name,int line,int column, int page_hint) { -# ifdef __DARWIN_UNIX03 -# pragma unused(column) -# endif + SYNCTEX_UNUSED(column) if (scanner) { int tag = synctex_scanner_get_tag(scanner,name);/* parse if necessary */ int max_line = 0; @@ -7434,34 +7497,34 @@ synctex_iterator_p synctex_iterator_new_display(synctex_scanner_p scanner,const * Then reorder the nodes to put first the one which fits best. * The idea is to count the number of nodes * with the same tag and line number in the parents - * and choose the one with the biggest count. + * and choose the ones with the biggest count. */ if (result) { - /* navigate through siblings, - then children */ - int count = 1; + /* navigate through siblings, then children */ synctex_node_p next_sibling = __synctex_tree_reset_sibling(result); int best_match = abs(page_hint-_synctex_node_target_page(result)); synctex_node_p sibling; int match; - result = _synctex_vertically_sorted_v2(result); + synctex_counted_node_s cn = _synctex_vertically_sorted_v2(result); + int count = cn.count; + result = cn.node; while((sibling = next_sibling)) { /* What is next? Do not miss that step! */ next_sibling = __synctex_tree_reset_sibling(sibling); - sibling = _synctex_vertically_sorted_v2(sibling); + cn = _synctex_vertically_sorted_v2(sibling); + count += cn.count; + sibling = cn.node; match = abs(page_hint-_synctex_node_target_page(sibling)); if (match<best_match) { /* Order this node first */ __synctex_tree_set_sibling(sibling,result); result = sibling; best_match = match; - } else /*if (match>best_match)*/ { + } else /*if (match>=best_match)*/ { __synctex_tree_set_sibling(sibling,__synctex_tree_sibling(result)); __synctex_tree_set_sibling(result,sibling); } - ++count; } - /* Now order first the result closest to the page hint */ return _synctex_iterator_new(result,count); } } @@ -8168,6 +8231,7 @@ SYNCTEX_INLINE static synctex_nd_lr_s __synctex_eq_get_closest_children_in_hbox_ } #endif SYNCTEX_INLINE static synctex_nd_lr_s __synctex_eq_get_closest_children_in_vbox_v2(synctex_point_p hitP, synctex_node_p nodeP) { + SYNCTEX_UNUSED(nodeP) synctex_nd_lr_s nds = {SYNCTEX_ND_0,SYNCTEX_ND_0}; synctex_nd_s nd = SYNCTEX_ND_0; if ((nd.node = synctex_node_child(nd.node))) { @@ -8304,8 +8368,8 @@ static synctex_nd_s _synctex_eq_closest_child_v2(synctex_point_p hitP, synctex_n SYNCTEX_INLINE static synctex_nd_lr_s _synctex_eq_get_closest_children_in_box_v2(synctex_point_p hitP, synctex_node_p node) { synctex_nd_lr_s nds = {SYNCTEX_ND_0,SYNCTEX_ND_0}; if(_synctex_tree_has_child(node)) { /* node != NULL */ - if (node->class->type==synctex_node_type_hbox || - node->class->type==synctex_node_type_proxy_hbox) { + if (node->class_->type==synctex_node_type_hbox || + node->class_->type==synctex_node_type_proxy_hbox) { return __synctex_eq_get_closest_children_in_hbox_v2(hitP,node); } else { return __synctex_eq_get_closest_children_in_vbox_v2(hitP,node); |