[evince] cut-n-paste: Update synctex parser to version 1.16.



commit 05a78e33bebd6b0e9917bbf7bf82960ee57844c4
Author: José Aliste <jaliste src gnome org>
Date:   Tue Jun 14 15:05:54 2011 -0400

    cut-n-paste: Update synctex parser to version 1.16.
    
    Fixes bug #651263.

 cut-n-paste/synctex/synctex_parser.c           | 1156 +++++++++++++-----------
 cut-n-paste/synctex/synctex_parser.h           |    9 +-
 cut-n-paste/synctex/synctex_parser_local.h     |    8 +-
 cut-n-paste/synctex/synctex_parser_utils.c     |  217 +++--
 cut-n-paste/synctex/synctex_parser_utils.h     |   34 +-
 cut-n-paste/synctex/synctex_parser_version.txt |    2 +-
 6 files changed, 772 insertions(+), 654 deletions(-)
---
diff --git a/cut-n-paste/synctex/synctex_parser.c b/cut-n-paste/synctex/synctex_parser.c
index 060f32d..0d3de08 100644
--- a/cut-n-paste/synctex/synctex_parser.c
+++ b/cut-n-paste/synctex/synctex_parser.c
@@ -1,12 +1,13 @@
 /* 
-Copyright (c) 2008, 2009; 2010 jerome DOT laurens AT u-bourgogne DOT fr
+Copyright (c) 2008, 2009, 2010 , 2011 jerome DOT laurens AT u-bourgogne DOT fr
 
 This file is part of the SyncTeX package.
 
-Version: 1.12
-See synctex_parser_readme.txt for more details
+Latest Revision: Tue Jun 14 08:23:30 UTC 2011
+
+Version: 1.16
 
-Latest Revision: Mon Jul 19 21:50:36 UTC 2010
+See synctex_parser_readme.txt for more details
 
 License:
 --------
@@ -91,14 +92,12 @@ Thu Jun 19 09:39:21 UTC 2008
  */
 
 #include "synctex_parser.h"
-#include <synctex_parser_utils.h>
+#include "synctex_parser_utils.h"
 
 /*  These are the possible extensions of the synctex file */
 const char * synctex_suffix = ".synctex";
 const char * synctex_suffix_gz = ".gz";
 
-static const char * synctex_io_modes[synctex_io_mode_append+2] = {"r","rb","a","ab"};
-
 /*  each synctex node has a class */
 typedef struct __synctex_class_t _synctex_class_t;
 typedef _synctex_class_t * synctex_class_t;
@@ -170,7 +169,7 @@ struct __synctex_class_t {
 /*  This macro is some kind of objc_msg_send.
  *  It takes care of sending the proper message if possible.
  */
-#   define SYNCTEX_MSG_SEND(NODE,SELECTOR) if(NODE && SYNCTEX_CAN_PERFORM(NODE,SELECTOR)) {\
+#   define SYNCTEX_MSG_SEND(NODE,SELECTOR) if (NODE && SYNCTEX_CAN_PERFORM(NODE,SELECTOR)) {\
 		(*((((NODE)->class))->SELECTOR))(NODE);\
 	}
 
@@ -188,14 +187,14 @@ struct __synctex_class_t {
 /*  Parent getter and setter
  */
 #   define SYNCTEX_PARENT(NODE) SYNCTEX_GET(NODE,parent)
-#   define SYNCTEX_SET_PARENT(NODE,NEW_PARENT) if(NODE && NEW_PARENT && SYNCTEX_CAN_PERFORM(NODE,parent)){\
+#   define SYNCTEX_SET_PARENT(NODE,NEW_PARENT) if (NODE && NEW_PARENT && SYNCTEX_CAN_PERFORM(NODE,parent)){\
 		SYNCTEX_GETTER(NODE,parent)[0]=NEW_PARENT;\
 	}
 
 /*  Child getter and setter
  */
 #   define SYNCTEX_CHILD(NODE) SYNCTEX_GET(NODE,child)
-#   define SYNCTEX_SET_CHILD(NODE,NEW_CHILD) if(NODE && NEW_CHILD){\
+#   define SYNCTEX_SET_CHILD(NODE,NEW_CHILD) if (NODE && NEW_CHILD){\
 		SYNCTEX_GETTER(NODE,child)[0]=NEW_CHILD;\
 		SYNCTEX_GETTER(NEW_CHILD,parent)[0]=NODE;\
 	}
@@ -203,9 +202,9 @@ struct __synctex_class_t {
 /*  Sibling getter and setter
  */
 #   define SYNCTEX_SIBLING(NODE) SYNCTEX_GET(NODE,sibling)
-#   define SYNCTEX_SET_SIBLING(NODE,NEW_SIBLING) if(NODE && NEW_SIBLING) {\
+#   define SYNCTEX_SET_SIBLING(NODE,NEW_SIBLING) if (NODE && NEW_SIBLING) {\
 		SYNCTEX_GETTER(NODE,sibling)[0]=NEW_SIBLING;\
-		if(SYNCTEX_CAN_PERFORM(NEW_SIBLING,parent) && SYNCTEX_CAN_PERFORM(NODE,parent)) {\
+		if (SYNCTEX_CAN_PERFORM(NEW_SIBLING,parent) && SYNCTEX_CAN_PERFORM(NODE,parent)) {\
 			SYNCTEX_GETTER(NEW_SIBLING,parent)[0]=SYNCTEX_GETTER(NODE,parent)[0];\
 		}\
 	}
@@ -214,7 +213,7 @@ struct __synctex_class_t {
  *  Friends are used mainly in forward synchronization aka from source to output.
  */
 #   define SYNCTEX_FRIEND(NODE) SYNCTEX_GET(NODE,friend)
-#   define SYNCTEX_SET_FRIEND(NODE,NEW_FRIEND) if(NODE && NEW_FRIEND){\
+#   define SYNCTEX_SET_FRIEND(NODE,NEW_FRIEND) if (NODE && NEW_FRIEND){\
 		SYNCTEX_GETTER(NODE,friend)[0]=NEW_FRIEND;\
 	}
 
@@ -222,7 +221,7 @@ struct __synctex_class_t {
  *  Navigation starts with the deeper boxes.
  */
 #   define SYNCTEX_NEXT_HORIZ_BOX(NODE) SYNCTEX_GET(NODE,next_box)
-#   define SYNCTEX_SET_NEXT_HORIZ_BOX(NODE,NEXT_BOX) if(NODE && NEXT_BOX){\
+#   define SYNCTEX_SET_NEXT_HORIZ_BOX(NODE,NEXT_BOX) if (NODE && NEXT_BOX){\
 		SYNCTEX_GETTER(NODE,next_box)[0]=NEXT_BOX;\
 	}
 
@@ -234,7 +233,7 @@ void _synctex_free_leaf(synctex_node_t node);
  *  This destructor is for all nodes with children.
  */
 void _synctex_free_node(synctex_node_t node) {
-	if(node) {
+	if (node) {
 		(*((node->class)->sibling))(node);
 		SYNCTEX_FREE(SYNCTEX_SIBLING(node));
 		SYNCTEX_FREE(SYNCTEX_CHILD(node));
@@ -248,7 +247,7 @@ void _synctex_free_node(synctex_node_t node) {
  *  This destructor is for nodes with no child.
  */
 void _synctex_free_leaf(synctex_node_t node) {
-	if(node) {
+	if (node) {
 		SYNCTEX_FREE(SYNCTEX_SIBLING(node));
 		free(node);
 	}
@@ -368,7 +367,7 @@ static _synctex_class_t synctex_class_sheet = {
 /*  sheet node creator */
 synctex_node_t _synctex_new_sheet(synctex_scanner_t scanner) {
 	synctex_node_t node = _synctex_malloc(sizeof(synctex_sheet_t));
-	if(node) {
+	if (node) {
 		node->class = scanner?scanner->class+synctex_node_type_sheet:(synctex_class_t)&synctex_class_sheet;
 	}
 	return node;
@@ -430,7 +429,7 @@ static _synctex_class_t synctex_class_vbox = {
 /*  vertical box node creator */
 synctex_node_t _synctex_new_vbox(synctex_scanner_t scanner) {
 	synctex_node_t node = _synctex_malloc(sizeof(synctex_vert_box_node_t));
-	if(node) {
+	if (node) {
 		node->class = scanner?scanner->class+synctex_node_type_vbox:(synctex_class_t)&synctex_class_vbox;
 	}
 	return node;
@@ -483,7 +482,7 @@ static _synctex_class_t synctex_class_hbox = {
 /*  horizontal box node creator */
 synctex_node_t _synctex_new_hbox(synctex_scanner_t scanner) {
 	synctex_node_t node = _synctex_malloc(sizeof(synctex_horiz_box_node_t));
-	if(node) {
+	if (node) {
 		node->class = scanner?scanner->class+synctex_node_type_hbox:(synctex_class_t)&synctex_class_hbox;
 	}
 	return node;
@@ -521,7 +520,7 @@ static _synctex_class_t synctex_class_void_vbox = {
 /*  vertical void box node creator */
 synctex_node_t _synctex_new_void_vbox(synctex_scanner_t scanner) {
 	synctex_node_t node = _synctex_malloc(sizeof(synctex_void_box_node_t));
-	if(node) {
+	if (node) {
 		node->class = scanner?scanner->class+synctex_node_type_void_vbox:(synctex_class_t)&synctex_class_void_vbox;
 	}
 	return node;
@@ -548,7 +547,7 @@ static _synctex_class_t synctex_class_void_hbox = {
 /*  horizontal void box node creator */
 synctex_node_t _synctex_new_void_hbox(synctex_scanner_t scanner) {
 	synctex_node_t node = _synctex_malloc(sizeof(synctex_void_box_node_t));
-	if(node) {
+	if (node) {
 		node->class = scanner?scanner->class+synctex_node_type_void_hbox:(synctex_class_t)&synctex_class_void_hbox;
 	}
 	return node;
@@ -593,7 +592,7 @@ static _synctex_class_t synctex_class_math = {
 
 synctex_node_t _synctex_new_math(synctex_scanner_t scanner) {
 	synctex_node_t node = _synctex_malloc(sizeof(synctex_medium_node_t));
-	if(node) {
+	if (node) {
 		node->class = scanner?scanner->class+synctex_node_type_math:(synctex_class_t)&synctex_class_math;
 	}
 	return node;
@@ -620,7 +619,7 @@ static _synctex_class_t synctex_class_kern = {
 
 synctex_node_t _synctex_new_kern(synctex_scanner_t scanner) {
 	synctex_node_t node = _synctex_malloc(sizeof(synctex_medium_node_t));
-	if(node) {
+	if (node) {
 		node->class = scanner?scanner->class+synctex_node_type_kern:(synctex_class_t)&synctex_class_kern;
 	}
 	return node;
@@ -655,7 +654,7 @@ static _synctex_class_t synctex_class_glue = {
 };
 synctex_node_t _synctex_new_glue(synctex_scanner_t scanner) {
 	synctex_node_t node = _synctex_malloc(sizeof(synctex_medium_node_t));
-	if(node) {
+	if (node) {
 		node->class = scanner?scanner->class+synctex_node_type_glue:(synctex_class_t)&synctex_class_glue;
 	}
 	return node;
@@ -682,7 +681,7 @@ static _synctex_class_t synctex_class_boundary = {
 
 synctex_node_t _synctex_new_boundary(synctex_scanner_t scanner) {
 	synctex_node_t node = _synctex_malloc(sizeof(synctex_small_node_t));
-	if(node) {
+	if (node) {
 		node->class = scanner?scanner->class+synctex_node_type_boundary:(synctex_class_t)&synctex_class_boundary;
 	}
 	return node;
@@ -721,13 +720,13 @@ static _synctex_class_t synctex_class_input = {
 
 synctex_node_t _synctex_new_input(synctex_scanner_t scanner) {
 	synctex_node_t node = _synctex_malloc(sizeof(synctex_input_t));
-	if(node) {
+	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) {
+	if (node) {
 		SYNCTEX_FREE(SYNCTEX_SIBLING(node));
 		free(SYNCTEX_NAME(node));
 		free(node);
@@ -758,15 +757,15 @@ 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)) {
+	if (SYNCTEX_CHILD(node)) {
 		return SYNCTEX_CHILD(node);
 	}
 sibling:
-	if(SYNCTEX_SIBLING(node)) {
+	if (SYNCTEX_SIBLING(node)) {
 		return SYNCTEX_SIBLING(node);
 	}
-	if((node = SYNCTEX_PARENT(node))) {
-		if(node->class->type == synctex_node_type_sheet) {/*  EXC_BAD_ACCESS? */
+	if ((node = SYNCTEX_PARENT(node))) {
+		if (node->class->type == synctex_node_type_sheet) {/*  EXC_BAD_ACCESS? */
 			return NULL;
 		}
 		goto sibling;
@@ -780,7 +779,7 @@ sibling:
 
 /*  Public node accessor: the type  */
 synctex_node_type_t synctex_node_type(synctex_node_t node) {
-	if(node) {
+	if (node) {
 		return (((node)->class))->type;
 	}
 	return synctex_node_type_error;
@@ -819,7 +818,7 @@ void _synctex_display_input(synctex_node_t node) {
 }
 
 void _synctex_log_sheet(synctex_node_t sheet) {
-	if(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));
@@ -922,7 +921,7 @@ void _synctex_log_input(synctex_node_t node) {
 }
 
 void _synctex_display_sheet(synctex_node_t sheet) {
-	if(sheet) {
+	if (sheet) {
 		printf("....{%i\n",SYNCTEX_PAGE(sheet));
 		SYNCTEX_DISPLAY(SYNCTEX_CHILD(sheet));
 		printf("....}\n");
@@ -1050,7 +1049,7 @@ typedef int synctex_status_t;
 #   define SYNCTEX_FILE (scanner->file)
 
 /*  Actually, the minimum buffer size is driven by integer and float parsing.
- *  ±0.123456789e123
+ *  ±0.123456789e123
  */
 #   define SYNCTEX_BUFFER_MIN_SIZE 16
 #   define SYNCTEX_BUFFER_SIZE 32768
@@ -1076,6 +1075,7 @@ int _synctex_scan_postamble(synctex_scanner_t scanner);
 synctex_status_t _synctex_setup_visible_box(synctex_node_t box);
 synctex_status_t _synctex_horiz_box_setup_visible(synctex_node_t node,int h, int v);
 synctex_status_t _synctex_scan_sheet(synctex_scanner_t scanner, synctex_node_t parent);
+synctex_status_t _synctex_scan_nested_sheet(synctex_scanner_t scanner);
 synctex_status_t _synctex_scan_content(synctex_scanner_t scanner);
 int synctex_scanner_pre_x_offset(synctex_scanner_t scanner);
 int synctex_scanner_pre_y_offset(synctex_scanner_t scanner);
@@ -1095,30 +1095,30 @@ int _synctex_bail(void);
  *  when there was an error reading the synctex file. */
 synctex_status_t _synctex_buffer_get_available_size(synctex_scanner_t scanner, size_t * size_ptr) {
   	size_t available = 0;
-	if(NULL == scanner || NULL == size_ptr) {
+	if (NULL == scanner || NULL == size_ptr) {
 		return SYNCTEX_STATUS_BAD_ARGUMENT;
 	}
 #   define size (* size_ptr)
-	if(size>SYNCTEX_BUFFER_SIZE){
+	if (size>SYNCTEX_BUFFER_SIZE){
 		size = SYNCTEX_BUFFER_SIZE;
 	}
 	available = SYNCTEX_END - SYNCTEX_CUR; /*  available is the number of unparsed chars in the buffer */
-	if(size<=available) {
+	if (size<=available) {
 		/*  There are already sufficiently many characters in the buffer */
 		size = available;
 		return SYNCTEX_STATUS_OK;
 	}
-	if(SYNCTEX_FILE) {
+	if (SYNCTEX_FILE) {
 		/*  Copy the remaining part of the buffer to the beginning,
 		 *  then read the next part of the file */
 		int already_read = 0;
-		if(available) {
+		if (available) {
 			memmove(SYNCTEX_START, SYNCTEX_CUR, available);
 		}
 		SYNCTEX_CUR = SYNCTEX_START + available; /*  the next character after the move, will change. */
 		/*  Fill the buffer up to its end */
 		already_read = gzread(SYNCTEX_FILE,(void *)SYNCTEX_CUR,SYNCTEX_BUFFER_SIZE - available);
-		if(already_read>0) {
+		if (already_read>0) {
 			/*  We assume that 0<already_read<=SYNCTEX_BUFFER_SIZE - available, such that
 			 *  SYNCTEX_CUR + already_read = SYNCTEX_START + available  + already_read <= SYNCTEX_START + SYNCTEX_BUFFER_SIZE */
 			SYNCTEX_END = SYNCTEX_CUR + already_read;
@@ -1129,29 +1129,28 @@ synctex_status_t _synctex_buffer_get_available_size(synctex_scanner_t scanner, s
 			SYNCTEX_CUR = SYNCTEX_START;
 			size = SYNCTEX_END - SYNCTEX_CUR; /* == old available + already_read*/
 			return SYNCTEX_STATUS_OK; /*  May be available is less than size, the caller will have to test. */
-		} else if(0>already_read) {
-			/*  There is an error in zlib */
+		} else if (0>already_read) {
+			/*  There is a possible error in reading the file */
 			int errnum = 0;
 			const char * error_string = gzerror(SYNCTEX_FILE, &errnum);
-			if(Z_ERRNO == errnum) {
+			if (Z_ERRNO == errnum) {
 				/*  There is an error in zlib caused by the file system */
 				_synctex_error("gzread error from the file system (%i)",errno);
-			} else {
+                return SYNCTEX_STATUS_ERROR;
+			} else if (errnum) {
 				_synctex_error("gzread error (%i:%i,%s)",already_read,errnum,error_string);
+                return SYNCTEX_STATUS_ERROR;
 			}
-			return SYNCTEX_STATUS_ERROR;
-		} else {
-			/*  Nothing was read, we are at the end of the file. */
-			gzclose(SYNCTEX_FILE);
-			SYNCTEX_FILE = NULL;
- 			SYNCTEX_END = SYNCTEX_CUR;
- 			SYNCTEX_CUR = SYNCTEX_START;
-			* SYNCTEX_END = '\0';/*  Terminate the string properly.*/
-			size = SYNCTEX_END - SYNCTEX_CUR;
- 			return SYNCTEX_STATUS_EOF; /*  there might be a bit of text left */
 		}
-		/*  At this point, the function has already returned from above */
-	}
+        /*  Nothing was read, we are at the end of the file. */
+        gzclose(SYNCTEX_FILE);
+        SYNCTEX_FILE = NULL;
+        SYNCTEX_END = SYNCTEX_CUR;
+        SYNCTEX_CUR = SYNCTEX_START;
+        * SYNCTEX_END = '\0';/*  Terminate the string properly.*/
+        size = SYNCTEX_END - SYNCTEX_CUR;
+        return SYNCTEX_STATUS_EOF; /*  there might be a bit of text left */
+    }
 	/*  We cannot enlarge the buffer because the end of the file was reached. */
 	size = available;
  	return SYNCTEX_STATUS_EOF;
@@ -1170,12 +1169,12 @@ synctex_status_t _synctex_buffer_get_available_size(synctex_scanner_t scanner, s
 synctex_status_t _synctex_next_line(synctex_scanner_t scanner) {
 	synctex_status_t status = SYNCTEX_STATUS_OK;
 	size_t available = 0;
-	if(NULL == scanner) {
+	if (NULL == scanner) {
 		return SYNCTEX_STATUS_BAD_ARGUMENT;
 	}
 infinite_loop:
 	while(SYNCTEX_CUR<SYNCTEX_END) {
-		if(*SYNCTEX_CUR == '\n') {
+		if (*SYNCTEX_CUR == '\n') {
 			++SYNCTEX_CUR;
 			available = 1;
 			return _synctex_buffer_get_available_size(scanner, &available);
@@ -1186,7 +1185,7 @@ infinite_loop:
 	 *  will read another bunch of synctex file. Little by little, we advance to the end of the file. */
 	available = 1;
 	status = _synctex_buffer_get_available_size(scanner, &available);
-	if(status<=0) {
+	if (status<=0) {
 		return status;
 	}
 	goto infinite_loop;
@@ -1207,33 +1206,33 @@ synctex_status_t _synctex_match_string(synctex_scanner_t scanner, const char * t
 	size_t remaining_len = 0; /*  the number of remaining characters of the_string that should match */
 	size_t available = 0;
 	synctex_status_t status = 0;
-	if(NULL == scanner || NULL == the_string) {
+	if (NULL == scanner || NULL == the_string) {
 		return SYNCTEX_STATUS_BAD_ARGUMENT;
 	}
 	remaining_len = strlen(the_string); /*  All the_string should match */
-	if(0 == remaining_len) {
+	if (0 == remaining_len) {
 		return SYNCTEX_STATUS_BAD_ARGUMENT;
 	}
 	/*  How many characters available in the buffer? */
 	available = remaining_len;
 	status = _synctex_buffer_get_available_size(scanner,&available);
-	if(status<SYNCTEX_STATUS_EOF) {
+	if (status<SYNCTEX_STATUS_EOF) {
 		return status;
 	}
 	/*  Maybe we have less characters than expected because the buffer is too small. */
-	if(available>=remaining_len) {
+	if (available>=remaining_len) {
 		/*  The buffer is sufficiently big to hold the expected number of characters. */
-		if(strncmp((char *)SYNCTEX_CUR,the_string,remaining_len)) {
+		if (strncmp((char *)SYNCTEX_CUR,the_string,remaining_len)) {
 			return SYNCTEX_STATUS_NOT_OK;
 		}
 return_OK:
 		/*  Advance SYNCTEX_CUR to the next character after the_string. */
 		SYNCTEX_CUR += remaining_len;
 		return SYNCTEX_STATUS_OK;
-	} else if(strncmp((char *)SYNCTEX_CUR,the_string,available)) {
+	} else if (strncmp((char *)SYNCTEX_CUR,the_string,available)) {
 			/*  No need to goo further, this is not the expected string in the buffer. */
 			return SYNCTEX_STATUS_NOT_OK;
-	} else if(SYNCTEX_FILE) {
+	} else if (SYNCTEX_FILE) {
 		/*  The buffer was too small to contain remaining_len characters.
 		 *  We have to cut the string into pieces. */
 		z_off_t offset = 0L;
@@ -1243,7 +1242,7 @@ return_OK:
 		remaining_len -= available;
 		tested_len += available;
 		SYNCTEX_CUR += available; /*  We validate the tested characters. */
-		if(0 == remaining_len) {
+		if (0 == remaining_len) {
 			/*  Nothing left to test, we have found the given string, we return the length. */
 			return tested_len;
 		}
@@ -1268,13 +1267,13 @@ more_characters:
 		 *  We will definitely have to recover the previous state in case we do not find the expected string. */
 		available = remaining_len;
 		status = _synctex_buffer_get_available_size(scanner,&available);
-		if(status<SYNCTEX_STATUS_EOF) {
+		if (status<SYNCTEX_STATUS_EOF) {
 			return status; /*  This is an error, no need to go further. */
 		}
-		if(available==0) {
+		if (available==0) {
 			/*  Missing characters: recover the initial state of the file and return. */
 return_NOT_OK:
-			if(offset != gzseek(SYNCTEX_FILE,offset,SEEK_SET)) {
+			if (offset != gzseek(SYNCTEX_FILE,offset,SEEK_SET)) {
 				/*  This is a critical error, we could not recover the previous state. */
 				_synctex_error("can't seek file");
 				return SYNCTEX_STATUS_ERROR;
@@ -1284,9 +1283,9 @@ return_NOT_OK:
 			SYNCTEX_CUR = SYNCTEX_END;
 			return SYNCTEX_STATUS_NOT_OK;
 		}
-		if(available<remaining_len) {
+		if (available<remaining_len) {
 			/*  We'll have to loop one more time. */
-			if(strncmp((char *)SYNCTEX_CUR,the_string,available)) {
+			if (strncmp((char *)SYNCTEX_CUR,the_string,available)) {
 				/*  This is not the expected string, recover the previous state and return. */
 				goto return_NOT_OK;
 			}
@@ -1296,14 +1295,14 @@ return_NOT_OK:
 			remaining_len -= available;
 			tested_len += available;
 			SYNCTEX_CUR += available; /*  We validate the tested characters. */
-			if(0 == remaining_len) {
+			if (0 == remaining_len) {
 				/*  Nothing left to test, we have found the given string. */
 				return SYNCTEX_STATUS_OK;
 			}
 			goto more_characters;
 		}
 		/*  This is the last step. */
-		if(strncmp((char *)SYNCTEX_CUR,the_string,remaining_len)) {
+		if (strncmp((char *)SYNCTEX_CUR,the_string,remaining_len)) {
 			/*  This is not the expected string, recover the previous state and return. */
 			goto return_NOT_OK;
 		}
@@ -1330,29 +1329,29 @@ synctex_status_t _synctex_decode_int(synctex_scanner_t scanner, int* value_ref)
 	int result = 0;
 	size_t available = 0;
 	synctex_status_t status = 0;
-	if(NULL == scanner) {
+	if (NULL == scanner) {
 		 return SYNCTEX_STATUS_BAD_ARGUMENT;
 	}
 	available = SYNCTEX_BUFFER_MIN_SIZE;
 	status = _synctex_buffer_get_available_size(scanner, &available);
-	if(status<SYNCTEX_STATUS_EOF) {
+	if (status<SYNCTEX_STATUS_EOF) {
 		return status;/*  Forward error. */
 	}
-	if(available==0) {
+	if (available==0) {
 		return SYNCTEX_STATUS_EOF;/*  it is the end of file. */
 	}
 	ptr = SYNCTEX_CUR;
-	if(*ptr==':' || *ptr==',') {
+	if (*ptr==':' || *ptr==',') {
 		++ptr;
 		--available;
-		if(available==0) {
+		if (available==0) {
 			return SYNCTEX_STATUS_NOT_OK;/*  It is not possible to scan an int */
 		}
 	}
 	result = (int)strtol(ptr, &end, 10);
-	if(end>ptr) {
+	if (end>ptr) {
 		SYNCTEX_CUR = end;
-		if(value_ref) {
+		if (value_ref) {
 			* value_ref = result;
 		}
 		return SYNCTEX_STATUS_OK;/*  Successfully scanned an int */
@@ -1384,17 +1383,17 @@ synctex_status_t _synctex_decode_string(synctex_scanner_t scanner, char ** value
 	size_t len = 0;/*  The number of bytes to copy */
 	size_t available = 0;
 	synctex_status_t status = 0;
-	if(NULL == scanner || NULL == value_ref) {
+	if (NULL == scanner || NULL == value_ref) {
 		return SYNCTEX_STATUS_BAD_ARGUMENT;
 	}
 	/*  The buffer must at least contain one character: the '\n' end of line marker */
-	if(SYNCTEX_CUR>=SYNCTEX_END) {
+	if (SYNCTEX_CUR>=SYNCTEX_END) {
 		available = 1;
 		status = _synctex_buffer_get_available_size(scanner,&available);
-		if(status < 0) {
+		if (status < 0) {
 			return status;
 		}
-		if(0 == available) {
+		if (0 == available) {
 			return SYNCTEX_STATUS_EOF;
 		}
 	}
@@ -1405,11 +1404,11 @@ synctex_status_t _synctex_decode_string(synctex_scanner_t scanner, char ** value
 	* value_ref = NULL;/*  Initialize, it will be realloc'ed */
 	/*  We scan all the characters up to the next '\n' */
 next_character:
-	if(end<SYNCTEX_END) {
-		if(*end == '\n') {
+	if (end<SYNCTEX_END) {
+		if (*end == '\n') {
 			/*  OK, we found where to stop */
 			len = end - SYNCTEX_CUR;
-			if(current_size>UINT_MAX-len-1) {
+			if (current_size>UINT_MAX-len-1) {
 				/*  But we have reached the limit: we do not have current_size+len+1>UINT_MAX.
 				 *  We return the missing amount of memory.
 				 *  This will never occur in practice. */
@@ -1419,8 +1418,8 @@ next_character:
 			/*  We have current_size+len+1<=UINT_MAX
 			 *  or equivalently new_size<UINT_MAX,
 			 *  where we have assumed that len<UINT_MAX */
-			if((* value_ref = realloc(* value_ref,new_size+1)) != NULL) {
-				if(memcpy((*value_ref)+current_size,SYNCTEX_CUR,len)) {
+			if ((* value_ref = realloc(* value_ref,new_size+1)) != NULL) {
+				if (memcpy((*value_ref)+current_size,SYNCTEX_CUR,len)) {
 					(* value_ref)[new_size]='\0'; /*  Terminate the string */
 					SYNCTEX_CUR += len;/*  Advance to the terminating '\n' */
 					return SYNCTEX_STATUS_OK;
@@ -1439,14 +1438,14 @@ next_character:
 	} else {
 		/*  end == SYNCTEX_END */
 		len = SYNCTEX_END - SYNCTEX_CUR;
-		if(current_size>UINT_MAX-len-1) {
+		if (current_size>UINT_MAX-len-1) {
 			/*  We have reached the limit. */
 			_synctex_error("limit reached (missing %i).",current_size-(UINT_MAX-len-1));
 			return SYNCTEX_STATUS_ERROR;
 		}
 		new_size = current_size+len;
-		if((* value_ref = realloc(* value_ref,new_size+1)) != NULL) {
-			if(memcpy((*value_ref)+current_size,SYNCTEX_CUR,len)) {
+		if ((* value_ref = realloc(* value_ref,new_size+1)) != NULL) {
+			if (memcpy((*value_ref)+current_size,SYNCTEX_CUR,len)) {
 				(* value_ref)[new_size]='\0'; /*  Terminate the string */
 				SYNCTEX_CUR = SYNCTEX_END;/*  Advance the cursor to the end of the bufer */
 				return SYNCTEX_STATUS_OK;
@@ -1469,22 +1468,22 @@ synctex_status_t _synctex_scan_input(synctex_scanner_t scanner) {
 	synctex_status_t status = 0;
 	size_t available = 0;
 	synctex_node_t input = NULL;
-	if(NULL == scanner) {
+	if (NULL == scanner) {
 		return SYNCTEX_STATUS_BAD_ARGUMENT;
 	}
 	status = _synctex_match_string(scanner,"Input:");
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		return status;
 	}
 	/*  Create a node */
 	input = _synctex_new_input(scanner);
-	if(NULL == input) {
+	if (NULL == input) {
 		_synctex_error("could not create an input node.");
 		return SYNCTEX_STATUS_ERROR;
 	}
 	/*  Decode the synctag  */
 	status = _synctex_decode_int(scanner,&(SYNCTEX_TAG(input)));
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		_synctex_error("bad format of input node.");
 		SYNCTEX_FREE(input);
 		return status;
@@ -1492,10 +1491,10 @@ synctex_status_t _synctex_scan_input(synctex_scanner_t scanner) {
 	/*  The next character is a field separator, we expect one character in the buffer. */
 	available = 1;
 	status = _synctex_buffer_get_available_size(scanner, &available);
-	if(status<=SYNCTEX_STATUS_ERROR) {
+	if (status<=SYNCTEX_STATUS_ERROR) {
 		return status;
 	}
-	if(0 == available) {
+	if (0 == available) {
 		return SYNCTEX_STATUS_EOF;
 	}
 	/*  We can now safely advance to the next character, stepping over the field separator. */
@@ -1503,7 +1502,7 @@ synctex_status_t _synctex_scan_input(synctex_scanner_t scanner) {
 	--available;
 	/*  Then we scan the file name */
 	status = _synctex_decode_string(scanner,&(SYNCTEX_NAME(input)));
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		SYNCTEX_FREE(input);
 		return status;
 	}
@@ -1528,16 +1527,16 @@ synctex_status_t _synctex_scan_named(synctex_scanner_t scanner,const char * name
  */
 synctex_status_t _synctex_scan_named(synctex_scanner_t scanner,const char * name,void * value_ref,synctex_decoder_t decoder) {
 	synctex_status_t status = 0;
-	if(NULL == scanner || NULL == name || NULL == value_ref || NULL == decoder) {
+	if (NULL == scanner || NULL == name || NULL == value_ref || NULL == decoder) {
 		return SYNCTEX_STATUS_BAD_ARGUMENT;
 	}
 not_found:
 	status = _synctex_match_string(scanner,name);
-	if(status<SYNCTEX_STATUS_NOT_OK) {
+	if (status<SYNCTEX_STATUS_NOT_OK) {
 		return status;
-	} else if(status == SYNCTEX_STATUS_NOT_OK) {
+	} else if (status == SYNCTEX_STATUS_NOT_OK) {
 		status = _synctex_next_line(scanner);
-		if(status<SYNCTEX_STATUS_OK) {
+		if (status<SYNCTEX_STATUS_OK) {
 			return status;
 		}
 		goto not_found;
@@ -1551,60 +1550,60 @@ not_found:
  */
 synctex_status_t _synctex_scan_preamble(synctex_scanner_t scanner) {
 	synctex_status_t status = 0;
-	if(NULL == scanner) {
+	if (NULL == scanner) {
 		return SYNCTEX_STATUS_BAD_ARGUMENT;
 	}
 	status = _synctex_scan_named(scanner,"SyncTeX Version:",&(scanner->version),(synctex_decoder_t)&_synctex_decode_int);
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		return status;
 	}
 	status = _synctex_next_line(scanner);
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		return status;
 	}
 	/*  Read all the input records */
 	do {
 		status = _synctex_scan_input(scanner);
-		if(status<SYNCTEX_STATUS_NOT_OK) {
+		if (status<SYNCTEX_STATUS_NOT_OK) {
 			return status;
 		}
 	} while(status == SYNCTEX_STATUS_OK);
 	/*  the loop exits when status == SYNCTEX_STATUS_NOT_OK */
 	/*  Now read all the required settings. */
 	status = _synctex_scan_named(scanner,"Output:",&(scanner->output_fmt),(synctex_decoder_t)&_synctex_decode_string);
-	if(status<SYNCTEX_STATUS_NOT_OK) {
+	if (status<SYNCTEX_STATUS_NOT_OK) {
 		return status;
 	}
 	status = _synctex_next_line(scanner);
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		return status;
 	}
 	status = _synctex_scan_named(scanner,"Magnification:",&(scanner->pre_magnification),(synctex_decoder_t)&_synctex_decode_int);
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		return status;
 	}
 	status = _synctex_next_line(scanner);
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		return status;
 	}
 	status = _synctex_scan_named(scanner,"Unit:",&(scanner->pre_unit),(synctex_decoder_t)&_synctex_decode_int);
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		return status;
 	}
 	status = _synctex_next_line(scanner);
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		return status;
 	}
 	status = _synctex_scan_named(scanner,"X Offset:",&(scanner->pre_x_offset),(synctex_decoder_t)&_synctex_decode_int);
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		return status;
 	}
 	status = _synctex_next_line(scanner);
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		return status;
 	}
 	status = _synctex_scan_named(scanner,"Y Offset:",&(scanner->pre_y_offset),(synctex_decoder_t)&_synctex_decode_int);
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		return status;
 	}
 	return _synctex_next_line(scanner);
@@ -1619,12 +1618,12 @@ synctex_status_t _synctex_scan_float_and_dimension(synctex_scanner_t scanner, fl
 	char * loc = setlocale(LC_NUMERIC, NULL);
 #endif
 	size_t available = 0;
-	if(NULL == scanner || NULL == value_ref) {
+	if (NULL == scanner || NULL == value_ref) {
 		return SYNCTEX_STATUS_BAD_ARGUMENT;
 	}
 	available = SYNCTEX_BUFFER_MIN_SIZE;
 	status = _synctex_buffer_get_available_size(scanner, &available);
-	if(status<SYNCTEX_STATUS_EOF) {
+	if (status<SYNCTEX_STATUS_EOF) {
 		_synctex_error("problem with float.");
 		return status;
 	}
@@ -1635,56 +1634,56 @@ synctex_status_t _synctex_scan_float_and_dimension(synctex_scanner_t scanner, fl
 #ifdef HAVE_SETLOCALE
 	setlocale(LC_NUMERIC, loc);
 #endif
-	if(endptr == SYNCTEX_CUR) {
+	if (endptr == SYNCTEX_CUR) {
 		_synctex_error("a float was expected.");
 		return SYNCTEX_STATUS_ERROR;
 	}
 	SYNCTEX_CUR = endptr;
-	if((status = _synctex_match_string(scanner,"in")) >= SYNCTEX_STATUS_OK) {
+	if ((status = _synctex_match_string(scanner,"in")) >= SYNCTEX_STATUS_OK) {
 		f *= 72.27f*65536;
-	} else if(status<SYNCTEX_STATUS_EOF) {
+	} else if (status<SYNCTEX_STATUS_EOF) {
 report_unit_error:
 		_synctex_error("problem with unit.");
 		return status;
-	} else if((status = _synctex_match_string(scanner,"cm")) >= SYNCTEX_STATUS_OK) {
+	} else if ((status = _synctex_match_string(scanner,"cm")) >= SYNCTEX_STATUS_OK) {
 		f *= 72.27f*65536/2.54f;
-	} else if(status<0) {
+	} else if (status<0) {
 		goto report_unit_error;
-	} else if((status = _synctex_match_string(scanner,"mm")) >= SYNCTEX_STATUS_OK) {
+	} else if ((status = _synctex_match_string(scanner,"mm")) >= SYNCTEX_STATUS_OK) {
 		f *= 72.27f*65536/25.4f;
-	} else if(status<0) {
+	} else if (status<0) {
 		goto report_unit_error;
-	} else if((status = _synctex_match_string(scanner,"pt")) >= SYNCTEX_STATUS_OK) {
+	} else if ((status = _synctex_match_string(scanner,"pt")) >= SYNCTEX_STATUS_OK) {
 		f *= 65536.0f;
-	} else if(status<0) {
+	} else if (status<0) {
 		goto report_unit_error;
-	} else if((status = _synctex_match_string(scanner,"bp")) >= SYNCTEX_STATUS_OK) {
+	} else if ((status = _synctex_match_string(scanner,"bp")) >= SYNCTEX_STATUS_OK) {
 		f *= 72.27f/72*65536.0f;
-	}  else if(status<0) {
+	}  else if (status<0) {
 		goto report_unit_error;
-	} else if((status = _synctex_match_string(scanner,"pc")) >= SYNCTEX_STATUS_OK) {
+	} else if ((status = _synctex_match_string(scanner,"pc")) >= SYNCTEX_STATUS_OK) {
 		f *= 12.0*65536.0f;
-	}  else if(status<0) {
+	}  else if (status<0) {
 		goto report_unit_error;
-	} else if((status = _synctex_match_string(scanner,"sp")) >= SYNCTEX_STATUS_OK) {
+	} else if ((status = _synctex_match_string(scanner,"sp")) >= SYNCTEX_STATUS_OK) {
 		f *= 1.0f;
-	}  else if(status<0) {
+	}  else if (status<0) {
 		goto report_unit_error;
-	} else if((status = _synctex_match_string(scanner,"dd")) >= SYNCTEX_STATUS_OK) {
+	} else if ((status = _synctex_match_string(scanner,"dd")) >= SYNCTEX_STATUS_OK) {
 		f *= 1238.0f/1157*65536.0f;
-	}  else if(status<0) {
+	}  else if (status<0) {
 		goto report_unit_error;
-	} else if((status = _synctex_match_string(scanner,"cc")) >= SYNCTEX_STATUS_OK) {
+	} else if ((status = _synctex_match_string(scanner,"cc")) >= SYNCTEX_STATUS_OK) {
 		f *= 14856.0f/1157*65536;
-	} else if(status<0) {
+	} else if (status<0) {
 		goto report_unit_error;
-	} else if((status = _synctex_match_string(scanner,"nd")) >= SYNCTEX_STATUS_OK) {
+	} else if ((status = _synctex_match_string(scanner,"nd")) >= SYNCTEX_STATUS_OK) {
 		f *= 685.0f/642*65536;
-	}  else if(status<0) {
+	}  else if (status<0) {
 		goto report_unit_error;
-	} else if((status = _synctex_match_string(scanner,"nc")) >= SYNCTEX_STATUS_OK) {
+	} else if ((status = _synctex_match_string(scanner,"nc")) >= SYNCTEX_STATUS_OK) {
 		f *= 1370.0f/107*65536;
-	} else if(status<0) {
+	} else if (status<0) {
 		goto report_unit_error;
 	}
 	*value_ref = f;
@@ -1700,20 +1699,20 @@ synctex_status_t _synctex_scan_post_scriptum(synctex_scanner_t scanner) {
 #ifdef HAVE_SETLOCALE
 	char * loc = setlocale(LC_NUMERIC, NULL);
 #endif
-	if(NULL == scanner) {
+	if (NULL == scanner) {
 		return SYNCTEX_STATUS_BAD_ARGUMENT;
 	}
 	/*  Scan the file until a post scriptum line is found */
 post_scriptum_not_found:
 	status = _synctex_match_string(scanner,"Post scriptum:");
-	if(status<SYNCTEX_STATUS_NOT_OK) {
+	if (status<SYNCTEX_STATUS_NOT_OK) {
 		return status;
 	}
-	if(status == SYNCTEX_STATUS_NOT_OK) {
+	if (status == SYNCTEX_STATUS_NOT_OK) {
 		status = _synctex_next_line(scanner);
-		if(status<SYNCTEX_STATUS_EOF) {
+		if (status<SYNCTEX_STATUS_EOF) {
 			return status;
-		} else if(status<SYNCTEX_STATUS_OK) {
+		} else if (status<SYNCTEX_STATUS_OK) {
 			return SYNCTEX_STATUS_OK;/*  The EOF is found, we have properly scanned the file */
 		}
 		goto post_scriptum_not_found;
@@ -1721,14 +1720,14 @@ post_scriptum_not_found:
 	/*  We found the name, advance to the next line. */
 next_line:
 	status = _synctex_next_line(scanner);
-	if(status<SYNCTEX_STATUS_EOF) {
+	if (status<SYNCTEX_STATUS_EOF) {
 		return status;
-	} else if(status<SYNCTEX_STATUS_OK) {
+	} else if (status<SYNCTEX_STATUS_OK) {
 		return SYNCTEX_STATUS_OK;/*  The EOF is found, we have properly scanned the file */
 	}
 	/*  Scanning the information */
 	status = _synctex_match_string(scanner,"Magnification:");
-	if(status == SYNCTEX_STATUS_OK ) {
+	if (status == SYNCTEX_STATUS_OK ) {
 #ifdef HAVE_SETLOCALE
 		setlocale(LC_NUMERIC, "C");
 #endif
@@ -1736,42 +1735,42 @@ next_line:
 #ifdef HAVE_SETLOCALE
 		setlocale(LC_NUMERIC, loc);
 #endif
-		if(endptr == SYNCTEX_CUR) {
+		if (endptr == SYNCTEX_CUR) {
 			_synctex_error("bad magnification in the post scriptum, a float was expected.");
 			return SYNCTEX_STATUS_ERROR;
 		}
-		if(scanner->unit<=0) {
+		if (scanner->unit<=0) {
 			_synctex_error("bad magnification in the post scriptum, a positive float was expected.");
 			return SYNCTEX_STATUS_ERROR;
 		}
 		SYNCTEX_CUR = endptr;
 		goto next_line;
 	}
-	if(status<SYNCTEX_STATUS_EOF){
+	if (status<SYNCTEX_STATUS_EOF){
 report_record_problem:
 		_synctex_error("Problem reading the Post Scriptum records");
 		return status; /*  echo the error. */
 	}
 	status = _synctex_match_string(scanner,"X Offset:");
-	if(status == SYNCTEX_STATUS_OK) {
+	if (status == SYNCTEX_STATUS_OK) {
 		status = _synctex_scan_float_and_dimension(scanner, &(scanner->x_offset));
-		if(status<SYNCTEX_STATUS_OK) {
+		if (status<SYNCTEX_STATUS_OK) {
 			_synctex_error("problem with X offset in the Post Scriptum.");
 			return status;
 		}
 		goto next_line;
-	} else if(status<SYNCTEX_STATUS_EOF){
+	} else if (status<SYNCTEX_STATUS_EOF){
 		goto report_record_problem;
 	}
 	status = _synctex_match_string(scanner,"Y Offset:");
-	if(status==SYNCTEX_STATUS_OK) {
+	if (status==SYNCTEX_STATUS_OK) {
 		status = _synctex_scan_float_and_dimension(scanner, &(scanner->y_offset));
-		if(status<SYNCTEX_STATUS_OK) {
+		if (status<SYNCTEX_STATUS_OK) {
 			_synctex_error("problem with Y offset in the Post Scriptum.");
 			return status;
 		}
 		goto next_line;
-	} else if(status<SYNCTEX_STATUS_EOF){
+	} else if (status<SYNCTEX_STATUS_EOF){
 		goto report_record_problem;
 	}
 	goto next_line;
@@ -1784,24 +1783,24 @@ report_record_problem:
  */
 int _synctex_scan_postamble(synctex_scanner_t scanner) {
 	int status = 0;
-	if(NULL == scanner) {
+	if (NULL == scanner) {
 		return SYNCTEX_STATUS_BAD_ARGUMENT;
 	}
 	status = _synctex_match_string(scanner,"Postamble:");
-	if(status < SYNCTEX_STATUS_OK) {
+	if (status < SYNCTEX_STATUS_OK) {
 		return status;
 	}
 count_again:
 	status = _synctex_next_line(scanner);
-	if(status < SYNCTEX_STATUS_OK) {
+	if (status < SYNCTEX_STATUS_OK) {
 		return status;
 	}
 	status = _synctex_scan_named(scanner,"Count:",&(scanner->count),(synctex_decoder_t)&_synctex_decode_int);
-	if(status < SYNCTEX_STATUS_EOF) {
+	if (status < SYNCTEX_STATUS_EOF) {
 		return status; /*  forward the error */
-	} else if(status < SYNCTEX_STATUS_OK) { /*  No Count record found */
+	} else if (status < SYNCTEX_STATUS_OK) { /*  No Count record found */
 		status = _synctex_next_line(scanner); /*  Advance one more line */
-		if(status<SYNCTEX_STATUS_OK) {
+		if (status<SYNCTEX_STATUS_OK) {
 			return status;
 		}
 		goto count_again;
@@ -1816,10 +1815,10 @@ count_again:
  *  At creation time, the visible size is set to the values of the real size.
  */
 synctex_status_t _synctex_setup_visible_box(synctex_node_t box) {
-	if(box) {
+	if (box) {
 		switch(box->class->type) {
 			case synctex_node_type_hbox:
-				if(SYNCTEX_INFO(box) != NULL) {
+				if (SYNCTEX_INFO(box) != NULL) {
 					SYNCTEX_HORIZ_V(box)  = SYNCTEX_HORIZ(box);
 					SYNCTEX_VERT_V(box)   = SYNCTEX_VERT(box);
 					SYNCTEX_WIDTH_V(box)  = SYNCTEX_WIDTH(box);
@@ -1842,31 +1841,89 @@ synctex_status_t _synctex_horiz_box_setup_visible(synctex_node_t node,int h, int
 #       pragma unused(v)
 #   endif
 	int itsBtm, itsTop;
-	if(NULL == node || node->class->type != synctex_node_type_hbox) {
+	if (NULL == node || node->class->type != synctex_node_type_hbox) {
 		return SYNCTEX_STATUS_BAD_ARGUMENT;
 	}
-	if(SYNCTEX_WIDTH_V(node)<0) {
+	if (SYNCTEX_WIDTH_V(node)<0) {
 		itsBtm = SYNCTEX_HORIZ_V(node);
 		itsTop = SYNCTEX_HORIZ_V(node)-SYNCTEX_WIDTH_V(node);
-		if(h<itsBtm) {
+		if (h<itsBtm) {
 			SYNCTEX_HORIZ_V(node) = h;
 			SYNCTEX_WIDTH_V(node) = SYNCTEX_HORIZ_V(node) - itsTop;
-		} else if(h>itsTop) {
+		} else if (h>itsTop) {
 			SYNCTEX_WIDTH_V(node) = SYNCTEX_HORIZ_V(node) - h;
 		}
 	} else {
 		itsBtm = SYNCTEX_HORIZ_V(node);
 		itsTop = SYNCTEX_HORIZ_V(node)+SYNCTEX_WIDTH_V(node);
-		if(h<itsBtm) {
+		if (h<itsBtm) {
 			SYNCTEX_HORIZ_V(node) = h;
 			SYNCTEX_WIDTH_V(node) = itsTop - SYNCTEX_HORIZ_V(node);
-		} else if(h>itsTop) {
+		} else if (h>itsTop) {
 			SYNCTEX_WIDTH_V(node) = h - SYNCTEX_HORIZ_V(node);
 		}
 	}
 	return SYNCTEX_STATUS_OK;
 }
 
+/*  Here are the control characters that strat each line of the synctex output file.
+ *  Their values define the meaning of the line.
+ */
+#   define SYNCTEX_CHAR_BEGIN_SHEET '{'
+#   define SYNCTEX_CHAR_END_SHEET   '}'
+#   define SYNCTEX_CHAR_BEGIN_VBOX  '['
+#   define SYNCTEX_CHAR_END_VBOX    ']'
+#   define SYNCTEX_CHAR_BEGIN_HBOX  '('
+#   define SYNCTEX_CHAR_END_HBOX    ')'
+#   define SYNCTEX_CHAR_ANCHOR      '!'
+#   define SYNCTEX_CHAR_VOID_VBOX   'v'
+#   define SYNCTEX_CHAR_VOID_HBOX   'h'
+#   define SYNCTEX_CHAR_KERN        'k'
+#   define SYNCTEX_CHAR_GLUE        'g'
+#   define SYNCTEX_CHAR_MATH        '$'
+#   define SYNCTEX_CHAR_BOUNDARY    'x'
+
+#   define SYNCTEX_RETURN(STATUS) return STATUS;
+
+/*  Used when parsing the synctex file. A '{' character has just been parsed.
+ *  The purpose is to gobble everything until the closing '}'.
+ *  Actually only one nesting depth has been observed when using the clip option
+ *  of \includegraphics option. Here we use arbitrary level of depth.
+ */
+synctex_status_t _synctex_scan_nested_sheet(synctex_scanner_t scanner) {
+    unsigned int depth = 0;
+deeper:
+    ++depth;
+    if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+        _synctex_error("Unexpected end of nested sheet (1).");
+        SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+    }
+scan_next_line:
+    if (SYNCTEX_CUR<SYNCTEX_END) {
+		if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_SHEET) {
+			++SYNCTEX_CUR;
+			if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+				_synctex_error("Unexpected end of nested sheet (2).");
+				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+			}
+            if (--depth>0) {
+                goto scan_next_line;
+            } else {
+            	SYNCTEX_RETURN(SYNCTEX_STATUS_OK);
+            }
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_SHEET) {
+			++SYNCTEX_CUR;
+			goto deeper;
+            
+		} else if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+            _synctex_error("Unexpected end of nested sheet (3).");
+            SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+        }
+    }
+    _synctex_error("Unexpected end of nested sheet (4).");
+    SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+}
+
 /*  Used when parsing the synctex file.
  *  The sheet argument is a newly created sheet node that will hold the contents.
  *  Something is returned in case of error.
@@ -1880,19 +1937,19 @@ synctex_status_t _synctex_scan_sheet(synctex_scanner_t scanner, synctex_node_t s
 	synctex_info_t * info = NULL;
 	synctex_status_t status = 0;
 	size_t available = 0;
-	if((NULL == scanner) || (NULL == sheet)) {
+	if ((NULL == scanner) || (NULL == sheet)) {
 		return SYNCTEX_STATUS_BAD_ARGUMENT;
 	}
 	/*  We MUST start with a box, so at this level, the unique possibility is '[', '(' or "}". */
 prepare_loop:
-	if(SYNCTEX_CUR<SYNCTEX_END) {
-		if(*SYNCTEX_CUR == '[') {
+	if (SYNCTEX_CUR<SYNCTEX_END) {
+		if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_VBOX) {
 scan_vbox:
 			++SYNCTEX_CUR;
-			if((child = _synctex_new_vbox(scanner)) && (info = SYNCTEX_INFO(child))) {
+			if ((child = _synctex_new_vbox(scanner)) && (info = SYNCTEX_INFO(child))) {
 #               define SYNCTEX_DECODE_FAILED(WHAT) \
 					(_synctex_decode_int(scanner,&(info[WHAT].INT))<SYNCTEX_STATUS_OK)
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -1901,7 +1958,6 @@ scan_vbox:
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_DEPTH_IDX)
 						|| _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
 					_synctex_error("Bad vbox record.");
-					#define SYNCTEX_RETURN(STATUS) return STATUS;
 					SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 				}
 				SYNCTEX_SET_CHILD(parent,child);
@@ -1912,11 +1968,11 @@ scan_vbox:
 				_synctex_error("Can't create vbox record.");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == '(') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_HBOX) {
 scan_hbox:
 			++SYNCTEX_CUR;
-			if((child = _synctex_new_hbox(scanner)) && (info = SYNCTEX_INFO(child))) {
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+			if ((child = _synctex_new_hbox(scanner)) && (info = SYNCTEX_INFO(child))) {
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -1938,19 +1994,27 @@ scan_hbox:
 				_synctex_error("Can't create hbox record.");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == '}') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_SHEET) {
 scan_teehs:
 			++SYNCTEX_CUR;
-			if(NULL == parent || parent->class->type != synctex_node_type_sheet
+			if (NULL == parent || parent->class->type != synctex_node_type_sheet
 					|| _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
 				_synctex_error("Unexpected end of sheet.");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
 			SYNCTEX_RETURN(SYNCTEX_STATUS_OK);
-		} else if(*SYNCTEX_CUR == '!') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_SHEET) {
+			/*  Addendum to version 1.10 to manage nested sheets  */
+			++SYNCTEX_CUR;
+			if (_synctex_scan_nested_sheet(scanner)<SYNCTEX_STATUS_OK) {
+				_synctex_error("Unexpected nested sheet.");
+				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+			}
+			goto prepare_loop;
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_ANCHOR) {
 scan_anchor:
 			++SYNCTEX_CUR;
-			if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+			if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
 				_synctex_error("Missing anchor.");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
@@ -1958,7 +2022,7 @@ scan_anchor:
 		} else {
 			/*  _synctex_error("Ignored record %c\n",*SYNCTEX_CUR); */
 			++SYNCTEX_CUR;
-			if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+			if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
 				_synctex_error("Unexpected end.");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
@@ -1967,7 +2031,7 @@ scan_anchor:
 	} else {
 		available = 1;
 		status = _synctex_buffer_get_available_size(scanner,&available);
-		 if(status<SYNCTEX_STATUS_OK && available>0){
+		 if (status<SYNCTEX_STATUS_OK && available>0){
 			_synctex_error("Uncomplete sheet(0)");
 			SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 		} else {
@@ -1978,38 +2042,38 @@ scan_anchor:
 /*  The child loop means that we go do one level, when we just created a box node,
  *  the next node created is a child of this box. */
 child_loop:
-	if(SYNCTEX_CUR<SYNCTEX_END) {
-		if(*SYNCTEX_CUR == '[') {
+	if (SYNCTEX_CUR<SYNCTEX_END) {
+		if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_VBOX) {
 			goto scan_vbox;
-		} else if(*SYNCTEX_CUR == ']') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_VBOX) {
 scan_xobv:
 			++SYNCTEX_CUR;
-			if(NULL != parent && parent->class->type == synctex_node_type_vbox) {
+			if (NULL != parent && parent->class->type == synctex_node_type_vbox) {
 				#define SYNCTEX_UPDATE_BOX_FRIEND(NODE)\
 				friend_index = ((SYNCTEX_INFO(NODE))[SYNCTEX_TAG_IDX].INT+(SYNCTEX_INFO(NODE))[SYNCTEX_LINE_IDX].INT)%(scanner->number_of_lists);\
 				SYNCTEX_SET_FRIEND(NODE,(scanner->lists_of_friends)[friend_index]);\
 				(scanner->lists_of_friends)[friend_index] = NODE;
-				if(NULL == SYNCTEX_CHILD(parent)) {
+				if (NULL == SYNCTEX_CHILD(parent)) {
 					/*  only void boxes are friends */
 					SYNCTEX_UPDATE_BOX_FRIEND(parent);
 				}
 				child = parent;
 				parent = SYNCTEX_PARENT(child);
 			} else {
-				_synctex_error("Unexpected ']', ignored.");
+				_synctex_error("Unexpected end of vbox, ignored.");
 			}
-			if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+			if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
 				_synctex_error("Uncomplete sheet.");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
 			goto sibling_loop;
-		} else if(*SYNCTEX_CUR == '(') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_HBOX) {
 			goto scan_hbox;
-		} else if(*SYNCTEX_CUR == ')') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_HBOX) {
 scan_xobh:
 			++SYNCTEX_CUR;
-			if((parent) && parent->class->type == synctex_node_type_hbox) {
-				if(NULL == child) {
+			if ((parent) && parent->class->type == synctex_node_type_hbox) {
+				if (NULL == child) {
 					/*  Only boxes with no children are friends,
 					 *  boxes with children are indirectly friends through one of their descendants. */
 					SYNCTEX_UPDATE_BOX_FRIEND(parent);
@@ -2020,18 +2084,18 @@ scan_xobh:
 				child = parent;
 				parent = SYNCTEX_PARENT(child);
 			} else {
-				_synctex_error("Unexpected ')', ignored.");
+				_synctex_error("Unexpected enf of hbox, ignored.");
 			}
-			if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+			if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
 				_synctex_error("Uncomplete sheet.");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
 			goto sibling_loop;
-		} else if(*SYNCTEX_CUR == 'v') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_VOID_VBOX) {
 			++SYNCTEX_CUR;
-			if(NULL != (child = _synctex_new_void_vbox(scanner))
+			if (NULL != (child = _synctex_new_void_vbox(scanner))
 					&& NULL != (info = SYNCTEX_INFO(child))) {
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -2053,11 +2117,11 @@ scan_xobh:
 				_synctex_error("Can't create vbox record.");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == 'h') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_VOID_HBOX) {
 			++SYNCTEX_CUR;
-			if(NULL != (child = _synctex_new_void_hbox(scanner))
+			if (NULL != (child = _synctex_new_void_hbox(scanner))
 					&& NULL != (info = SYNCTEX_INFO(child))) {
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -2077,11 +2141,11 @@ scan_xobh:
 				_synctex_error("Can't create void hbox record.");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == 'k') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_KERN) {
 			++SYNCTEX_CUR;
-			if(NULL != (child = _synctex_new_kern(scanner))
+			if (NULL != (child = _synctex_new_kern(scanner))
 					&& NULL != (info = SYNCTEX_INFO(child))) {
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -2099,11 +2163,11 @@ scan_xobh:
 				_synctex_error("Can't create kern record.");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == 'g') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_GLUE) {
 			++SYNCTEX_CUR;
-			if(NULL != (child = _synctex_new_glue(scanner))
+			if (NULL != (child = _synctex_new_glue(scanner))
 					&& NULL != (info = SYNCTEX_INFO(child))) {
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -2119,11 +2183,11 @@ scan_xobh:
 				_synctex_error("Can't create glue record.");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == '$') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_MATH) {
 			++SYNCTEX_CUR;
-			if(NULL != (child = _synctex_new_math(scanner))
+			if (NULL != (child = _synctex_new_math(scanner))
 					&& NULL != (info = SYNCTEX_INFO(child))) {
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -2139,11 +2203,11 @@ scan_xobh:
 				_synctex_error("Can't create math record.");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == 'x') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BOUNDARY) {
 			++SYNCTEX_CUR;
-			if(NULL != (child = _synctex_new_boundary(scanner))
+			if (NULL != (child = _synctex_new_boundary(scanner))
 					&& NULL != (info = SYNCTEX_INFO(child))) {
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -2159,14 +2223,22 @@ scan_xobh:
 				_synctex_error("Can't create math record.");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == '}') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_SHEET) {
 			goto scan_teehs;
-		} else if(*SYNCTEX_CUR == '!') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_SHEET) {
+			/*  Addendum to version 1.10 to manage nested sheets  */
+			++SYNCTEX_CUR;
+			if (_synctex_scan_nested_sheet(scanner)<SYNCTEX_STATUS_OK) {
+				_synctex_error("Unexpected nested sheet.");
+				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
+			}
+			goto child_loop;
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_ANCHOR) {
 			goto scan_anchor;
 		} else {
 			/*  _synctex_error("Ignored record %c\n",*SYNCTEX_CUR); */
 			++SYNCTEX_CUR;
-			if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+			if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
 				_synctex_error("Unexpected end.");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
@@ -2175,7 +2247,7 @@ scan_xobh:
 	} else {
 		available = 1;
 		status = _synctex_buffer_get_available_size(scanner,&available);
-		 if(status<SYNCTEX_STATUS_OK && available>0){
+		 if (status<SYNCTEX_STATUS_OK && available>0){
 			_synctex_error("Uncomplete sheet(0)");
 			SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 		} else {
@@ -2186,12 +2258,12 @@ scan_xobh:
 /*  The vertical loop means that we are on the same level, for example when we just ended a box.
  *  If a node is created now, it will be a sibling of the current node, sharing the same parent. */
 sibling_loop:
-	if(SYNCTEX_CUR<SYNCTEX_END) {
-		if(*SYNCTEX_CUR == '[') {
+	if (SYNCTEX_CUR<SYNCTEX_END) {
+		if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_VBOX) {
 			++SYNCTEX_CUR;
-			if(NULL != (sibling = _synctex_new_vbox(scanner))
+			if (NULL != (sibling = _synctex_new_vbox(scanner))
 					&& NULL != (info = SYNCTEX_INFO(sibling))) {
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -2210,13 +2282,13 @@ sibling_loop:
 				_synctex_error("Can't create vbox record (2).");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == ']') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_VBOX) {
 			goto scan_xobv;
-		} else if(*SYNCTEX_CUR == '(') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_HBOX) {
 			++SYNCTEX_CUR;
-			if(NULL != (sibling = _synctex_new_hbox(scanner)) &&
+			if (NULL != (sibling = _synctex_new_hbox(scanner)) &&
 					NULL != (info = SYNCTEX_INFO(sibling))) {
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -2239,13 +2311,13 @@ sibling_loop:
 				_synctex_error("Can't create hbox record (2).");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == ')') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_HBOX) {
 			goto scan_xobh;
-		} else if(*SYNCTEX_CUR == 'v') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_VOID_VBOX) {
 			++SYNCTEX_CUR;
-			if(NULL != (sibling = _synctex_new_void_vbox(scanner)) &&
+			if (NULL != (sibling = _synctex_new_void_vbox(scanner)) &&
 					NULL != (info = SYNCTEX_INFO(sibling))) {
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -2264,11 +2336,11 @@ sibling_loop:
 				_synctex_error("can't create void vbox record (2).");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == 'h') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_VOID_HBOX) {
 			++SYNCTEX_CUR;
-			if(NULL != (sibling = _synctex_new_void_hbox(scanner)) &&
+			if (NULL != (sibling = _synctex_new_void_hbox(scanner)) &&
 					NULL != (info = SYNCTEX_INFO(sibling))) {
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -2289,11 +2361,11 @@ sibling_loop:
 				_synctex_error("can't create void hbox record (2).");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == 'k') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_KERN) {
 			++SYNCTEX_CUR;
-			if(NULL != (sibling = _synctex_new_kern(scanner))
+			if (NULL != (sibling = _synctex_new_kern(scanner))
 					&& NULL != (info = SYNCTEX_INFO(sibling))) {
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -2312,11 +2384,11 @@ sibling_loop:
 				_synctex_error("Can't create kern record (2).");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == 'g') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_GLUE) {
 			++SYNCTEX_CUR;
-			if(NULL != (sibling = _synctex_new_glue(scanner))
+			if (NULL != (sibling = _synctex_new_glue(scanner))
 					&& NULL != (info = SYNCTEX_INFO(sibling))) {
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -2333,11 +2405,11 @@ sibling_loop:
 				_synctex_error("Can't create glue record (2).");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == '$') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_MATH) {
 			++SYNCTEX_CUR;
-			if(NULL != (sibling = _synctex_new_math(scanner))
+			if (NULL != (sibling = _synctex_new_math(scanner))
 					&& NULL != (info = SYNCTEX_INFO(sibling))) {
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -2354,11 +2426,11 @@ sibling_loop:
 				_synctex_error("Can't create math record (2).");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == 'x') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BOUNDARY) {
 			++SYNCTEX_CUR;
-			if(NULL != (sibling = _synctex_new_boundary(scanner))
+			if (NULL != (sibling = _synctex_new_boundary(scanner))
 					&& NULL != (info = SYNCTEX_INFO(sibling))) {
-				if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
+				if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX)
 						|| SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX)
@@ -2375,11 +2447,11 @@ sibling_loop:
 				_synctex_error("Can't create boundary record (2).");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
-		} else if(*SYNCTEX_CUR == '}') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_SHEET) {
 			goto scan_teehs;
-		} else if(*SYNCTEX_CUR == '!') {
+		} else if (*SYNCTEX_CUR == SYNCTEX_CHAR_ANCHOR) {
 			++SYNCTEX_CUR;
-			if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+			if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
 				_synctex_error("Missing anchor (2).");
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
@@ -2387,7 +2459,7 @@ sibling_loop:
 		} else {
 			++SYNCTEX_CUR;
 			/* _synctex_error("Ignored record %c(2)\n",*SYNCTEX_CUR); */
-			if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+			if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
 				SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR);
 			}
 			goto sibling_loop;
@@ -2395,7 +2467,7 @@ sibling_loop:
 	} else {
 		available = 1;
 		status = _synctex_buffer_get_available_size(scanner,&available);
-		if(status<SYNCTEX_STATUS_OK && available>0){
+		if (status<SYNCTEX_STATUS_OK && available>0){
 			goto sibling_loop;
 		} else {
 			_synctex_error("Uncomplete sheet(2)");
@@ -2410,14 +2482,14 @@ sibling_loop:
 synctex_status_t _synctex_scan_content(synctex_scanner_t scanner) {
 	synctex_node_t sheet = NULL;
 	synctex_status_t status = 0;
-	if(NULL == scanner) {
+	if (NULL == scanner) {
 		return SYNCTEX_STATUS_BAD_ARGUMENT;
 	}
 	/*  set up the lists of friends */
-	if(NULL == scanner->lists_of_friends) {
+	if (NULL == scanner->lists_of_friends) {
 		scanner->number_of_lists = 1024;
 		scanner->lists_of_friends = (synctex_node_t *)_synctex_malloc(scanner->number_of_lists*sizeof(synctex_node_t));
-		if(NULL == scanner->lists_of_friends) {
+		if (NULL == scanner->lists_of_friends) {
 			_synctex_error("malloc:2");
 			return SYNCTEX_STATUS_ERROR;
 		}
@@ -2425,26 +2497,26 @@ synctex_status_t _synctex_scan_content(synctex_scanner_t scanner) {
 	/*  Find where this section starts */
 content_not_found:
 	status = _synctex_match_string(scanner,"Content:");
-	if(status<SYNCTEX_STATUS_EOF) {
+	if (status<SYNCTEX_STATUS_EOF) {
 		return status;
 	}
-	if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
+	if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) {
 		_synctex_error("Uncomplete Content.");
 		return SYNCTEX_STATUS_ERROR;
 	}
-	if(status == SYNCTEX_STATUS_NOT_OK) {
+	if (status == SYNCTEX_STATUS_NOT_OK) {
 		goto content_not_found;
 	}
 next_sheet:
-	if(*SYNCTEX_CUR != '{') {
+	if (*SYNCTEX_CUR != SYNCTEX_CHAR_BEGIN_SHEET) {
 		status = _synctex_scan_postamble(scanner);
-		if(status < SYNCTEX_STATUS_EOF) {
+		if (status < SYNCTEX_STATUS_EOF) {
 			_synctex_error("Bad content.");
 			return status;
 		}
-		if(status<SYNCTEX_STATUS_OK) {
+		if (status<SYNCTEX_STATUS_OK) {
 			status = _synctex_next_line(scanner);
-			if(status < SYNCTEX_STATUS_OK) {
+			if (status < SYNCTEX_STATUS_OK) {
 				_synctex_error("Bad content.");
 				return status;
 			}
@@ -2456,19 +2528,19 @@ next_sheet:
 	/*  Create a new sheet node */
 	sheet = _synctex_new_sheet(scanner);
 	status = _synctex_decode_int(scanner,&(SYNCTEX_PAGE(sheet)));
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		_synctex_error("Missing sheet number.");
 bail:
 		SYNCTEX_FREE(sheet);
 		return SYNCTEX_STATUS_ERROR;
 	}
 	status = _synctex_next_line(scanner);
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		_synctex_error("Uncomplete file.");
 		goto bail;
 	}
 	status = _synctex_scan_sheet(scanner,sheet);
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		_synctex_error("Bad sheet content.");
 		goto bail;
 	}
@@ -2478,7 +2550,7 @@ bail:
 	/*  Now read the list of Inputs between 2 sheets. */
 	do {
 		status = _synctex_scan_input(scanner);
-		if(status<SYNCTEX_STATUS_EOF) {
+		if (status<SYNCTEX_STATUS_EOF) {
 			_synctex_error("Bad input section.");
 			goto bail;
 		}
@@ -2494,39 +2566,39 @@ synctex_scanner_t synctex_scanner_new_with_output_file(const char * output, cons
 	gzFile file = NULL;
 	char * synctex = NULL;
 	synctex_scanner_t scanner = NULL;
-	synctex_io_mode_t io_mode = synctex_io_mode_read;
+	synctex_io_mode_t io_mode = 0;
 	/*  Here we assume that int are smaller than void * */
-	if(sizeof(int)>sizeof(void*)) {
+	if (sizeof(int)>sizeof(void*)) {
 		_synctex_error("INTERNAL INCONSISTENCY: int's are unexpectedly bigger than pointers, bailing out.");
 		return NULL;
 	}
 	/*  We ensure that SYNCTEX_BUFFER_SIZE < UINT_MAX, I don't know if it makes sense... */
-	if(SYNCTEX_BUFFER_SIZE >= UINT_MAX) {
+	if (SYNCTEX_BUFFER_SIZE >= UINT_MAX) {
 		_synctex_error("SyncTeX BUG: Internal inconsistency, bad SYNCTEX_BUFFER_SIZE (1)");
 		return NULL;
 	}
 	/*  for integers: */
-	if(SYNCTEX_BUFFER_SIZE < SYNCTEX_BUFFER_MIN_SIZE) {
+	if (SYNCTEX_BUFFER_SIZE < SYNCTEX_BUFFER_MIN_SIZE) {
 		_synctex_error("SyncTeX BUG: Internal inconsistency, bad SYNCTEX_BUFFER_SIZE (2)");
 		return NULL;
 	}
 	/*  now open the synctex file */
-	if(_synctex_open(output,build_directory,&synctex,&file,synctex_NO,&io_mode) || !file) {
-		if(_synctex_open(output,build_directory,&synctex,&file,synctex_YES,&io_mode) || !file) {
+	if (_synctex_open(output,build_directory,&synctex,&file,synctex_ADD_QUOTES,&io_mode) || !file) {
+		if (_synctex_open(output,build_directory,&synctex,&file,synctex_DONT_ADD_QUOTES,&io_mode) || !file) {
 			return NULL;
 		}
 	}
 	scanner = (synctex_scanner_t)_synctex_malloc(sizeof(_synctex_scanner_t));
-	if(NULL == scanner) {
+	if (NULL == scanner) {
 		_synctex_error("SyncTeX: malloc problem");
 		free(synctex);
 		gzclose(file);
 		return NULL;
 	}
 	/*  make a private copy of output for the scanner */
-	if(NULL == (scanner->output = (char *)malloc(strlen(output)+1))){
+	if (NULL == (scanner->output = (char *)malloc(strlen(output)+1))){
 		_synctex_error("!  synctex_scanner_new_with_output_file: Memory problem (2), scanner's output is not reliable.");
-	} else if(scanner->output != strcpy(scanner->output,output)) {
+	} else if (scanner->output != strcpy(scanner->output,output)) {
 		_synctex_error("!  synctex_scanner_new_with_output_file: Copy problem, scanner's output is not reliable.");
 	}
 	scanner->synctex = synctex;/*  Now the scanner owns synctex */
@@ -2534,87 +2606,87 @@ synctex_scanner_t synctex_scanner_new_with_output_file(const char * output, cons
 	return parse? synctex_scanner_parse(scanner):scanner;
 }
 
-int __synctex_open(const char * output, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_modeRef);
+int __synctex_open(const char * output, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_mode_ref);
 
 /*	This functions opens the file at the "output" given location.
- *  It manages the problem of quoted filenames that appear with pdftex an filenames containing the space character.
+ *  It manages the problem of quoted filenames that appear with pdftex and filenames containing the space character.
  *  In TeXLive 2008, the synctex file created with pdftex did contain unexpected quotes.
  *	This function will remove them if possible.
+ *  All the reference arguments will take a value on return. They must be non NULL.
  *	0 on success, non 0 on error. */
-int __synctex_open(const char * output, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_modeRef) {
-#	define synctex_name (*synctex_name_ref)
-#	define the_file (*file_ref)
-	if(synctex_name_ref && file_ref) {
-		char * quoteless = NULL;
-		synctex_io_mode_t io_mode = *io_modeRef;
-		const char * mode = synctex_io_modes[io_mode];
+int __synctex_open(const char * output, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_mode_ref) {
+	if (synctex_name_ref && file_ref && io_mode_ref) {
+        /*  1 local variables that uses dynamic memory */
+        char * synctex_name = NULL;
+        gzFile the_file = NULL;
+        char * quoteless_synctex_name = NULL;
 		size_t size = 0;
+        synctex_io_mode_t io_mode = *io_mode_ref;
+		const char * mode = _synctex_get_io_mode_name(io_mode);
 		/*  now create the synctex file name */
 		size = strlen(output)+strlen(synctex_suffix)+strlen(synctex_suffix_gz)+1;
 		synctex_name = (char *)malloc(size);
-		if(NULL == synctex_name) {
+		if (NULL == synctex_name) {
 			_synctex_error("!  __synctex_open: Memory problem (1)\n");
 			return 1;
 		}
-		/*  we have reserved for synctex enough memory to copy output, both suffices and 2 quotes,
+		/*  we have reserved for synctex enough memory to copy output (including its 2 eventual quotes), both suffices,
 		 *  including the terminating character. size is free now. */
-		if(synctex_name != strcpy(synctex_name,output)) {
+		if (synctex_name != strcpy(synctex_name,output)) {
 			_synctex_error("!  __synctex_open: Copy problem\n");
 return_on_error:
 			free(synctex_name);
-			synctex_name = NULL;/*  Don't forget to reinitialize. */
-			the_file = NULL;	/*  Here as well */
-			free(quoteless);
+			free(quoteless_synctex_name);
 			return 2;
 		}
 		/*  remove the last path extension if any */
 		_synctex_strip_last_path_extension(synctex_name);
-		if(!strlen(synctex_name)) {
+		if (!strlen(synctex_name)) {
 			goto return_on_error;		
 		}
 		/*  now insert quotes. */
-		if(add_quotes) {
+		if (add_quotes) {
 			char * quoted = NULL;
-			if(_synctex_copy_with_quoting_last_path_component(synctex_name,&quoted,size) || (NULL == quoted)) {
+			if (_synctex_copy_with_quoting_last_path_component(synctex_name,&quoted,size) || (NULL == quoted)) {
 				/*	There was an error or quoting does not make sense: */
 				goto return_on_error;
 			}
-			quoteless = synctex_name;
+			quoteless_synctex_name = synctex_name;
 			synctex_name = quoted;
 		}
-		/*	Now add the first path extension. */
-		if(synctex_name != strcat(synctex_name,synctex_suffix)){
+		/*	Now add to synctex_name the first path extension. */
+		if (synctex_name != strcat(synctex_name,synctex_suffix)){
 			_synctex_error("!  __synctex_open: Concatenation problem (can't add suffix '%s')\n",synctex_suffix);
 			goto return_on_error;
 		}
-		/*	To quoteless as well. */
-		if(quoteless && (quoteless != strcat(quoteless,synctex_suffix))){
-			free(quoteless);
-			quoteless = NULL;
+		/*	Add to quoteless_synctex_name as well, if relevant. */
+		if (quoteless_synctex_name && (quoteless_synctex_name != strcat(quoteless_synctex_name,synctex_suffix))){
+			free(quoteless_synctex_name);
+			quoteless_synctex_name = NULL;
 		}
-		if(NULL == (the_file = gzopen(synctex_name,mode))) {
+		if (NULL == (the_file = gzopen(synctex_name,mode))) {
 			/*  Could not open this file */
-			if(errno != ENOENT) {
-				/*  The file does exist, this is a lower lever error, I can't do anything. */
+			if (errno != ENOENT) {
+				/*  The file does exist, this is a lower level error, I can't do anything. */
 				_synctex_error("SyncTeX: could not open %s, error %i\n",synctex_name,errno);
 				goto return_on_error;
 			}
-			/*  Try the compressed version */
-			if(synctex_name != strcat(synctex_name,synctex_suffix_gz)){
+			/*  Apparently, there is no uncompressed synctex file. Try the compressed version */
+			if (synctex_name != strcat(synctex_name,synctex_suffix_gz)){
 				_synctex_error("!  __synctex_open: Concatenation problem (can't add suffix '%s')\n",synctex_suffix_gz);
 				goto return_on_error;
 			}
-			++io_mode;
-			mode = synctex_io_modes[io_mode]; /* the file is a compressed and is a binary file, this caused errors on Windows */
-			/*	To quoteless as well. */
-			if(quoteless && (quoteless != strcat(quoteless,synctex_suffix_gz))){
-				free(quoteless);
-				quoteless = NULL;
+			io_mode |= synctex_io_gz_mask;
+			mode = _synctex_get_io_mode_name(io_mode); /* the file is a compressed and is a binary file, this caused errors on Windows */
+			/*	Add the suffix to the quoteless_synctex_name as well. */
+			if (quoteless_synctex_name && (quoteless_synctex_name != strcat(quoteless_synctex_name,synctex_suffix_gz))){
+				free(quoteless_synctex_name);
+				quoteless_synctex_name = NULL;
 			}
-			if(NULL == (the_file = gzopen(synctex_name,mode))) {
+			if (NULL == (the_file = gzopen(synctex_name,mode))) {
 				/*  Could not open this file */
-				if(errno != ENOENT) {
-					/*  The file does exist, this is a lower lever error, I can't do anything. */
+				if (errno != ENOENT) {
+					/*  The file does exist, this is a lower level error, I can't do anything. */
 					_synctex_error("SyncTeX: could not open %s, error %i\n",synctex_name,errno);
 				}
 				goto return_on_error;
@@ -2622,82 +2694,84 @@ return_on_error:
 		}
 		/*	At this point, the file is properly open.
 		 *  If we are in the add_quotes mode, we change the file name by removing the quotes. */
-		if(quoteless) {
+		if (quoteless_synctex_name) {
 			gzclose(the_file);
-			if(rename(synctex_name,quoteless)) {
-				_synctex_error("SyncTeX: could not rename %s to %s, error %i\n",synctex_name,quoteless,errno);
-				/*	Reopen the file. */
-				if(NULL == (the_file = gzopen(synctex_name,mode))) {
-					/*  Could not open this file */
-					if(errno != ENOENT) {
-						/*  The file does exist, this is a lower lever error, I can't do anything. */
+			if (rename(synctex_name,quoteless_synctex_name)) {
+				_synctex_error("SyncTeX: could not rename %s to %s, error %i\n",synctex_name,quoteless_synctex_name,errno);
+				/*	We could not rename, reopen the file with the quoted name. */
+				if (NULL == (the_file = gzopen(synctex_name,mode))) {
+					/*  No luck, could not re open this file, something has happened meanwhile */
+					if (errno != ENOENT) {
+						/*  The file does not exist any more, it has certainly be removed somehow
+                         *  this is a lower level error, I can't do anything. */
 						_synctex_error("SyncTeX: could not open again %s, error %i\n",synctex_name,errno);
 					}
 					goto return_on_error;
 				}
 			} else {
-				if(NULL == (the_file = gzopen(quoteless,mode))) {
+                /*  The file has been successfully renamed */
+				if (NULL == (the_file = gzopen(quoteless_synctex_name,mode))) {
 					/*  Could not open this file */
-					if(errno != ENOENT) {
-						/*  The file does exist, this is a lower lever error, I can't do anything. */
-						_synctex_error("SyncTeX: could not open renamed %s, error %i\n",quoteless,errno);
+					if (errno != ENOENT) {
+						/*  The file does exist, this is a lower level error, I can't do anything. */
+						_synctex_error("SyncTeX: could not open renamed %s, error %i\n",quoteless_synctex_name,errno);
 					}
 					goto return_on_error;
 				}
 				/*  The quote free file name should replace the old one:*/
 				free(synctex_name);
-				synctex_name = quoteless;
-				quoteless = NULL;
+				synctex_name = quoteless_synctex_name;
+				quoteless_synctex_name = NULL;
 			}
 		}
-		/* We are returning properly so we can also return the proper io_mode */
-		*io_modeRef = io_mode;
+        /*  The operation is successfull, return the arguments by value.    */
+        * file_ref = the_file;
+        * io_mode_ref = io_mode;
+        * synctex_name_ref = synctex_name;
 		return 0;
 	}
 	return 3;	/*	Bad parameter.	*/
-#	undef synctex_name
-#	undef the_file
 }
 
 /*	Opens the ouput file, taking into account the eventual build_directory.
  *	0 on success, non 0 on error. */
-int _synctex_open(const char * output, const char * build_directory, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_modeRef) {
+int _synctex_open(const char * output, const char * build_directory, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_mode_ref) {
 #	define synctex_name (*synctex_name_ref)
 #	define the_file (*file_ref)
-	int result = __synctex_open(output,synctex_name_ref,file_ref,add_quotes,io_modeRef);
-	if((result || !*file_ref) && build_directory && strlen(build_directory)) {
+	int result = __synctex_open(output,synctex_name_ref,file_ref,add_quotes,io_mode_ref);
+	if ((result || !*file_ref) && build_directory && strlen(build_directory)) {
 		char * build_output;
-		const char * lpc;
+		const char *lpc;
 		size_t size;
 		synctex_bool_t is_absolute;
 		build_output = NULL;
 		lpc = _synctex_last_path_component(output);
-		size = strlen(build_directory)+strlen(lpc)+2;
+		size = strlen(build_directory)+strlen(lpc)+2;   /*  One for the '/' and one for the '\0'.   */
 		is_absolute = _synctex_path_is_absolute(build_directory);
-		if(!is_absolute) {
+		if (!is_absolute) {
 			size += strlen(output);
 		}
-		if((build_output = (char *)malloc(size))) {
-			if(is_absolute) {
+		if ((build_output = (char *)malloc(size))) {
+			if (is_absolute) {
 				build_output[0] = '\0';
 			} else {
-				if(build_output != strcpy(build_output,output)) {
+				if (build_output != strcpy(build_output,output)) {
 					return -4;
 				}
 				build_output[lpc-output]='\0';
 			}
-			if(build_output == strcat(build_output,build_directory)) {
+			if (build_output == strcat(build_output,build_directory)) {
 				/*	Append a path separator if necessary. */
-				if(!SYNCTEX_IS_PATH_SEPARATOR(build_output[strlen(build_directory)-1])) {
-					if(build_output != strcat(build_output,"/")) {
+				if (!SYNCTEX_IS_PATH_SEPARATOR(build_output[strlen(build_directory)-1])) {
+					if (build_output != strcat(build_output,"/")) {
 						return -2;
 					}
 				}
 				/*	Append the last path component of the output. */
-				if(build_output != strcat(build_output,lpc)) {
+				if (build_output != strcat(build_output,lpc)) {
 					return -3;
 				}
-				return __synctex_open(build_output,synctex_name_ref,file_ref,add_quotes,io_modeRef);
+				return __synctex_open(build_output,synctex_name_ref,file_ref,add_quotes,io_mode_ref);
 			}
 		}
 		return -1;
@@ -2710,10 +2784,10 @@ int _synctex_open(const char * output, const char * build_directory, char ** syn
 /*  The scanner destructor
  */
 void synctex_scanner_free(synctex_scanner_t scanner) {
-	if(NULL == scanner) {
+	if (NULL == scanner) {
 		return;
 	}
-	if(SYNCTEX_FILE) {
+	if (SYNCTEX_FILE) {
 		gzclose(SYNCTEX_FILE);
 		SYNCTEX_FILE = NULL;
 	}
@@ -2730,7 +2804,7 @@ void synctex_scanner_free(synctex_scanner_t scanner) {
 /*  Where the synctex scanner parses the contents of the file. */
 synctex_scanner_t synctex_scanner_parse(synctex_scanner_t scanner) {
 	synctex_status_t status = 0;
-	if(!scanner || scanner->flags.has_parsed) {
+	if (!scanner || scanner->flags.has_parsed) {
 		return scanner;
 	}
 	scanner->flags.has_parsed=1;
@@ -2761,7 +2835,7 @@ synctex_scanner_t synctex_scanner_parse(synctex_scanner_t scanner) {
 	scanner->class[synctex_node_type_boundary] = synctex_class_boundary;
 	(scanner->class[synctex_node_type_boundary]).scanner = scanner;
 	SYNCTEX_START = (char *)malloc(SYNCTEX_BUFFER_SIZE+1); /*  one more character for null termination */
-	if(NULL == SYNCTEX_START) {
+	if (NULL == SYNCTEX_START) {
 		_synctex_error("SyncTeX: malloc error");
 		synctex_scanner_free(scanner);
 		return NULL;
@@ -2773,14 +2847,14 @@ synctex_scanner_t synctex_scanner_parse(synctex_scanner_t scanner) {
 	*SYNCTEX_END = '\0';
 	SYNCTEX_CUR = SYNCTEX_END;
 	status = _synctex_scan_preamble(scanner);
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		_synctex_error("SyncTeX Error: Bad preamble\n");
 bailey:
 		synctex_scanner_free(scanner);
 		return NULL;
 	}
 	status = _synctex_scan_content(scanner);
-	if(status<SYNCTEX_STATUS_OK) {
+	if (status<SYNCTEX_STATUS_OK) {
 		_synctex_error("SyncTeX Error: Bad content\n");
 		goto bailey;
 	}
@@ -2792,13 +2866,13 @@ bailey:
 	/*  Final tuning: set the default values for various parameters */
 	/*  1 pre_unit = (scanner->pre_unit)/65536 pt = (scanner->pre_unit)/65781.76 bp
 	 * 1 pt = 65536 sp */
-	if(scanner->pre_unit<=0) {
+	if (scanner->pre_unit<=0) {
 		scanner->pre_unit = 8192;
 	}
-	if(scanner->pre_magnification<=0) {
+	if (scanner->pre_magnification<=0) {
 		scanner->pre_magnification = 1000;
 	}
-	if(scanner->unit <= 0) {
+	if (scanner->unit <= 0) {
 		/*  no post magnification */
 		scanner->unit = scanner->pre_unit / 65781.76;/*  65781.76 or 65536.0*/
 	} else {
@@ -2806,7 +2880,7 @@ bailey:
 		scanner->unit *= scanner->pre_unit / 65781.76;
 	}
 	scanner->unit *= scanner->pre_magnification / 1000.0;
-	if(scanner->x_offset > 6e23) {
+	if (scanner->x_offset > 6e23) {
 		/*  no post offset */
 		scanner->x_offset = scanner->pre_x_offset * (scanner->pre_unit / 65781.76);
 		scanner->y_offset = scanner->pre_y_offset * (scanner->pre_unit / 65781.76);
@@ -2837,7 +2911,7 @@ float synctex_scanner_magnification(synctex_scanner_t scanner){
 	return scanner?scanner->unit:1;
 }
 void synctex_scanner_display(synctex_scanner_t scanner) {
-	if(NULL == scanner) {
+	if (NULL == scanner) {
 		return;
 	}
 	printf("The scanner:\noutput:%s\noutput_fmt:%s\nversion:%i\n",scanner->output,scanner->output_fmt,scanner->version);
@@ -2846,11 +2920,11 @@ void synctex_scanner_display(synctex_scanner_t scanner) {
 		scanner->count,scanner->unit,scanner->x_offset,scanner->y_offset);
 	printf("The input:\n");
 	SYNCTEX_DISPLAY(scanner->input);
-	if(scanner->count<1000) {
+	if (scanner->count<1000) {
 		printf("The sheets:\n");
 		SYNCTEX_DISPLAY(scanner->sheet);
 		printf("The friends:\n");
-		if(scanner->lists_of_friends) {
+		if (scanner->lists_of_friends) {
 			int i = scanner->number_of_lists;
 			synctex_node_t node;
 			while(i--) {
@@ -2873,12 +2947,12 @@ void synctex_scanner_display(synctex_scanner_t scanner) {
 /*  Public*/
 const char * synctex_scanner_get_name(synctex_scanner_t scanner,int tag) {
 	synctex_node_t input = NULL;
-	if(NULL == scanner) {
+	if (NULL == scanner) {
 		return NULL;
 	}
 	input = scanner->input;
 	do {
-		if(tag == SYNCTEX_TAG(input)) {
+		if (tag == SYNCTEX_TAG(input)) {
 			return (SYNCTEX_NAME(input));
 		}
 	} while((input = SYNCTEX_SIBLING(input)) != NULL);
@@ -2888,12 +2962,12 @@ const char * synctex_scanner_get_name(synctex_scanner_t scanner,int tag) {
 int _synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name);
 int _synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name) {
 	synctex_node_t input = NULL;
-	if(NULL == scanner) {
+	if (NULL == scanner) {
 		return 0;
 	}
 	input = scanner->input;
 	do {
-		if(_synctex_is_equivalent_file_name(name,(SYNCTEX_NAME(input)))) {
+		if (_synctex_is_equivalent_file_name(name,(SYNCTEX_NAME(input)))) {
 			return SYNCTEX_TAG(input);
 		}
 	} while((input = SYNCTEX_SIBLING(input)) != NULL);
@@ -2902,13 +2976,13 @@ int _synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name) {
 
 int synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name) {
 	size_t char_index = strlen(name);
-	if((scanner = synctex_scanner_parse(scanner)) && (0 < char_index)) {
+	if ((scanner = synctex_scanner_parse(scanner)) && (0 < char_index)) {
 		/*  the name is not void */
 		char_index -= 1;
-		if(!SYNCTEX_IS_PATH_SEPARATOR(name[char_index])) {
+		if (!SYNCTEX_IS_PATH_SEPARATOR(name[char_index])) {
 			/*  the last character of name is not a path separator */
 			int result = _synctex_scanner_get_tag(scanner,name);
-			if(result) {
+			if (result) {
 				return result;
 			} else {
 				/*  the given name was not the one known by TeX
@@ -2922,20 +2996,20 @@ int synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name) {
 				}
 				/*  Find the last path separator before relative */
 				while(relative > name) {
-					if(SYNCTEX_IS_PATH_SEPARATOR(*(relative-1))) {
+					if (SYNCTEX_IS_PATH_SEPARATOR(*(relative-1))) {
 						break;
 					}
 					relative -= 1;
 				}
-				if((relative > name) && (result = _synctex_scanner_get_tag(scanner,relative))) {
+				if ((relative > name) && (result = _synctex_scanner_get_tag(scanner,relative))) {
 					return result;
 				}
-				if(SYNCTEX_IS_PATH_SEPARATOR(name[0])) {
+				if (SYNCTEX_IS_PATH_SEPARATOR(name[0])) {
 					/*  No tag found for the given absolute name,
 					 *  Try each relative path starting from the shortest one */
 					while(0<char_index) {
 						char_index -= 1;
-						if(SYNCTEX_IS_PATH_SEPARATOR(name[char_index])
+						if (SYNCTEX_IS_PATH_SEPARATOR(name[char_index])
 								&& (result = _synctex_scanner_get_tag(scanner,name+char_index+1))) {
 							return result;
 						}
@@ -2964,84 +3038,84 @@ const char * synctex_scanner_get_synctex(synctex_scanner_t scanner) {
 #       pragma mark Public node attributes
 #   endif
 int synctex_node_h(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
 	return SYNCTEX_HORIZ(node);
 }
 int synctex_node_v(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
 	return SYNCTEX_VERT(node);
 }
 int synctex_node_width(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
 	return SYNCTEX_WIDTH(node);
 }
 int synctex_node_box_h(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
-	if(SYNCTEX_IS_BOX(node)) {
+	if (SYNCTEX_IS_BOX(node)) {
 result:
 		return SYNCTEX_HORIZ(node);
 	}
-	if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+	if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
 		goto result;
 	}
 	return 0;
 }
 int synctex_node_box_v(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
-	if(SYNCTEX_IS_BOX(node)) {
+	if (SYNCTEX_IS_BOX(node)) {
 result:
 		return SYNCTEX_VERT(node);
 	}
-	if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+	if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
 		goto result;
 	}
 	return 0;
 }
 int synctex_node_box_width(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
-	if(SYNCTEX_IS_BOX(node)) {
+	if (SYNCTEX_IS_BOX(node)) {
 result:
 		return SYNCTEX_WIDTH(node);
 	}
-	if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+	if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
 		goto result;
 	}
 	return 0;
 }
 int synctex_node_box_height(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
-	if(SYNCTEX_IS_BOX(node)) {
+	if (SYNCTEX_IS_BOX(node)) {
 result:
 		return SYNCTEX_HEIGHT(node);
 	}
-	if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+	if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
 		goto result;
 	}
 	return 0;
 }
 int synctex_node_box_depth(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
-	if(SYNCTEX_IS_BOX(node)) {
+	if (SYNCTEX_IS_BOX(node)) {
 result:
 		return SYNCTEX_DEPTH(node);
 	}
-	if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+	if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
 		goto result;
 	}
 	return 0;
@@ -3051,25 +3125,25 @@ result:
 #       pragma mark Public node visible attributes
 #   endif
 float synctex_node_visible_h(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
 	return SYNCTEX_HORIZ(node)*node->class->scanner->unit+node->class->scanner->x_offset;
 }
 float synctex_node_visible_v(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
 	return SYNCTEX_VERT(node)*node->class->scanner->unit+node->class->scanner->y_offset;
 }
 float synctex_node_visible_width(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
 	return SYNCTEX_WIDTH(node)*node->class->scanner->unit;
 }
 float synctex_node_box_visible_h(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
 	switch(node->class->type) {
@@ -3081,13 +3155,13 @@ float synctex_node_box_visible_h(synctex_node_t node){
 result:
 			return SYNCTEX_HORIZ_V(node)*node->class->scanner->unit+node->class->scanner->x_offset;
 	}
-	if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+	if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
 		goto result;
 	}
 	return 0;
 }
 float synctex_node_box_visible_v(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
 	switch(node->class->type) {
@@ -3099,13 +3173,13 @@ float synctex_node_box_visible_v(synctex_node_t node){
 result:
 			return SYNCTEX_VERT_V(node)*node->class->scanner->unit+node->class->scanner->y_offset;
 	}
-	if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+	if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
 		goto result;
 	}
 	return 0;
 }
 float synctex_node_box_visible_width(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
 	switch(node->class->type) {
@@ -3117,13 +3191,13 @@ float synctex_node_box_visible_width(synctex_node_t node){
 result:
 			return SYNCTEX_WIDTH_V(node)*node->class->scanner->unit;
 	}
-	if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+	if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
 		goto result;
 	}
 	return 0;
 }
 float synctex_node_box_visible_height(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
 	switch(node->class->type) {
@@ -3135,13 +3209,13 @@ float synctex_node_box_visible_height(synctex_node_t node){
 result:
 			return SYNCTEX_HEIGHT_V(node)*node->class->scanner->unit;
 	}
-	if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+	if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
 		goto result;
 	}
 	return 0;
 }
 float synctex_node_box_visible_depth(synctex_node_t node){
-	if(!node) {
+	if (!node) {
 		return 0;
 	}
 	switch(node->class->type) {
@@ -3153,7 +3227,7 @@ float synctex_node_box_visible_depth(synctex_node_t node){
 result:
 			return SYNCTEX_DEPTH_V(node)*node->class->scanner->unit;
 	}
-	if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
+	if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) {
 		goto result;
 	}
 	return 0;
@@ -3165,7 +3239,7 @@ result:
 
 int synctex_node_page(synctex_node_t node){
 	synctex_node_t parent = NULL;
-	if(!node) {
+	if (!node) {
 		return -1;
 	}
 	parent = SYNCTEX_PARENT(node);
@@ -3173,7 +3247,7 @@ int synctex_node_page(synctex_node_t node){
 		node = parent;
 		parent = SYNCTEX_PARENT(node);
 	}
-	if(node->class->type == synctex_node_type_sheet) {
+	if (node->class->type == synctex_node_type_sheet) {
 		return SYNCTEX_PAGE(node);
 	}
 	return -1;
@@ -3196,10 +3270,10 @@ int synctex_node_column(synctex_node_t node) {
 #   endif
 
 synctex_node_t synctex_sheet_content(synctex_scanner_t scanner,int page) {
-	if(scanner) {
+	if (scanner) {
 		synctex_node_t sheet = scanner->sheet;
 		while(sheet) {
-			if(page == SYNCTEX_PAGE(sheet)) {
+			if (page == SYNCTEX_PAGE(sheet)) {
 				return SYNCTEX_CHILD(sheet);
 			}
 			sheet = SYNCTEX_SIBLING(sheet);
@@ -3222,7 +3296,7 @@ int synctex_display_query(synctex_scanner_t scanner,const char * name,int line,i
 	int friend_index = 0;
 	int max_line = 0;
 	synctex_node_t node = NULL;
-	if(tag == 0) {
+	if (tag == 0) {
 		printf("SyncTeX Warning: No tag for %s\n",name);
 		return -1;
 	}
@@ -3232,12 +3306,12 @@ int synctex_display_query(synctex_scanner_t scanner,const char * name,int line,i
 	while(line<max_line) {
 		/*  This loop will only be performed once for advanced viewers */
 		friend_index = (tag+line)%(scanner->number_of_lists);
-		if((node = (scanner->lists_of_friends)[friend_index])) {
+		if ((node = (scanner->lists_of_friends)[friend_index])) {
 			do {
-				if((synctex_node_type(node)>=synctex_node_type_boundary)
+				if ((synctex_node_type(node)>=synctex_node_type_boundary)
 					&& (tag == SYNCTEX_TAG(node))
 						&& (line == SYNCTEX_LINE(node))) {
-					if(SYNCTEX_CUR == SYNCTEX_END) {
+					if (SYNCTEX_CUR == SYNCTEX_END) {
 						size += 16;
 						SYNCTEX_END = realloc(SYNCTEX_START,size*sizeof(synctex_node_t *));
 						SYNCTEX_CUR += SYNCTEX_END - SYNCTEX_START;
@@ -3248,14 +3322,14 @@ int synctex_display_query(synctex_scanner_t scanner,const char * name,int line,i
 					SYNCTEX_CUR += sizeof(synctex_node_t);
 				}
 			} while((node = SYNCTEX_FRIEND(node)));
-			if(SYNCTEX_START == NULL) {
+			if (SYNCTEX_START == NULL) {
 				/*  We did not find any matching boundary, retry with glue or kern */
 				node = (scanner->lists_of_friends)[friend_index];/*  no need to test it again, already done */
 				do {
-					if((synctex_node_type(node)>=synctex_node_type_kern)
+					if ((synctex_node_type(node)>=synctex_node_type_kern)
 						&& (tag == SYNCTEX_TAG(node))
 							&& (line == SYNCTEX_LINE(node))) {
-						if(SYNCTEX_CUR == SYNCTEX_END) {
+						if (SYNCTEX_CUR == SYNCTEX_END) {
 							size += 16;
 							SYNCTEX_END = realloc(SYNCTEX_START,size*sizeof(synctex_node_t *));
 							SYNCTEX_CUR += SYNCTEX_END - SYNCTEX_START;
@@ -3266,13 +3340,13 @@ int synctex_display_query(synctex_scanner_t scanner,const char * name,int line,i
 						SYNCTEX_CUR += sizeof(synctex_node_t);
 					}
 				} while((node = SYNCTEX_FRIEND(node)));
-				if(SYNCTEX_START == NULL) {
+				if (SYNCTEX_START == NULL) {
 					/*  We did not find any matching glue or kern, retry with boxes */
 					node = (scanner->lists_of_friends)[friend_index];/*  no need to test it again, already done */
 					do {
-						if((tag == SYNCTEX_TAG(node))
+						if ((tag == SYNCTEX_TAG(node))
 								&& (line == SYNCTEX_LINE(node))) {
-							if(SYNCTEX_CUR == SYNCTEX_END) {
+							if (SYNCTEX_CUR == SYNCTEX_END) {
 								size += 16;
 								SYNCTEX_END = realloc(SYNCTEX_START,size*sizeof(synctex_node_t *));
 								SYNCTEX_CUR += SYNCTEX_END - SYNCTEX_START;
@@ -3287,7 +3361,7 @@ int synctex_display_query(synctex_scanner_t scanner,const char * name,int line,i
 			}
 			SYNCTEX_END = SYNCTEX_CUR;
 			/*  Now reverse the order to have nodes in display order, and keep just a few nodes */
-			if((SYNCTEX_START) && (SYNCTEX_END))
+			if ((SYNCTEX_START) && (SYNCTEX_END))
 			{
 				synctex_node_t * start_ref = (synctex_node_t *)SYNCTEX_START;
 				synctex_node_t * end_ref   = (synctex_node_t *)SYNCTEX_END;
@@ -3306,10 +3380,10 @@ int synctex_display_query(synctex_scanner_t scanner,const char * name,int line,i
 				end_ref   = (synctex_node_t *)SYNCTEX_START;
 		next_end:
 				end_ref += 1; /*  we allways have start_ref<= end_ref*/
-				if(end_ref < (synctex_node_t *)SYNCTEX_END) {
+				if (end_ref < (synctex_node_t *)SYNCTEX_END) {
 					node = *end_ref;
 					while((node = SYNCTEX_PARENT(node))) {
-						if(SYNCTEX_PARENT(*start_ref) == node) {
+						if (SYNCTEX_PARENT(*start_ref) == node) {
 							goto next_end;
 						}
 					}
@@ -3318,10 +3392,12 @@ int synctex_display_query(synctex_scanner_t scanner,const char * name,int line,i
 					goto next_end;
 				}
 				start_ref += 1;
-				SYNCTEX_END = (char *)start_ref;
-			}
+                SYNCTEX_END = (char *)start_ref;
+                SYNCTEX_CUR = NULL;// added on behalf of Jose Alliste
+				return (SYNCTEX_END-SYNCTEX_START)/sizeof(synctex_node_t);// added on behalf Jan Sundermeyer
+            }
 			SYNCTEX_CUR = NULL;
-			return (SYNCTEX_END-SYNCTEX_START)/sizeof(synctex_node_t);
+			// return (SYNCTEX_END-SYNCTEX_START)/sizeof(synctex_node_t); removed on behalf Jan Sundermeyer
 		}
 #       if defined(__SYNCTEX_STRONG_DISPLAY_QUERY__)
 		break;
@@ -3333,12 +3409,12 @@ int synctex_display_query(synctex_scanner_t scanner,const char * name,int line,i
 }
 
 synctex_node_t synctex_next_result(synctex_scanner_t scanner) {
-	if(NULL == SYNCTEX_CUR) {
+	if (NULL == SYNCTEX_CUR) {
 		SYNCTEX_CUR = SYNCTEX_START;
 	} else {
 		SYNCTEX_CUR+=sizeof(synctex_node_t);
 	}
-	if(SYNCTEX_CUR<SYNCTEX_END) {
+	if (SYNCTEX_CUR<SYNCTEX_END) {
 		return *(synctex_node_t*)SYNCTEX_CUR;
 	} else {
 		return NULL;
@@ -3406,7 +3482,7 @@ int synctex_edit_query(synctex_scanner_t scanner,int page,float h,float v) {
 	synctex_node_set_t bestNodes = {NULL,NULL}; /*  holds the best node */
 	synctex_distances_t bestDistances = {INT_MAX,INT_MAX}; /*  holds the best distances for the best node */
 	synctex_node_t bestContainer = NULL; /*  placeholder */
-	if(NULL == (scanner = synctex_scanner_parse(scanner)) || 0 >= scanner->unit) {/*  scanner->unit must be >0 */
+	if (NULL == (scanner = synctex_scanner_parse(scanner)) || 0 >= scanner->unit) {/*  scanner->unit must be >0 */
 		return 0;
 	}
 	/*  Convert the given point to scanner integer coordinates */
@@ -3420,7 +3496,7 @@ int synctex_edit_query(synctex_scanner_t scanner,int page,float h,float v) {
 	while((sheet) && SYNCTEX_PAGE(sheet) != page) {
 		sheet = SYNCTEX_SIBLING(sheet);
 	}
-	if(NULL == sheet) {
+	if (NULL == sheet) {
 		return -1;
 	}
 	/*  Now sheet points to the sheet node with proper page number */
@@ -3429,30 +3505,30 @@ int synctex_edit_query(synctex_scanner_t scanner,int page,float h,float v) {
 	 *  Then we try with the visible box dimensions.
 	 *  We try to find a non void box containing the hit point.
 	 *  We browse all the horizontal boxes until we find one containing the hit point. */
-	if((node = SYNCTEX_NEXT_HORIZ_BOX(sheet))) {
+	if ((node = SYNCTEX_NEXT_HORIZ_BOX(sheet))) {
 		do {
-			if(_synctex_point_in_box(hitPoint,node,synctex_YES)) {
+			if (_synctex_point_in_box(hitPoint,node,synctex_YES)) {
 				/*  Maybe the hitPoint belongs to a contained vertical box. */
 end:
 				/*  This trick is for catching overlapping boxes */
-				if((other_node = SYNCTEX_NEXT_HORIZ_BOX(node))) {
+				if ((other_node = SYNCTEX_NEXT_HORIZ_BOX(node))) {
 					do {
-						if(_synctex_point_in_box(hitPoint,other_node,synctex_YES)) {
+						if (_synctex_point_in_box(hitPoint,other_node,synctex_YES)) {
 							node = _synctex_smallest_container(other_node,node); 
 						}
 					} while((other_node = SYNCTEX_NEXT_HORIZ_BOX(other_node)));
 				}
                 /*  node is the smallest horizontal box that contains hitPoint. */
-				if((bestContainer = _synctex_eq_deepest_container(hitPoint,node,synctex_YES))) {
+				if ((bestContainer = _synctex_eq_deepest_container(hitPoint,node,synctex_YES))) {
 					node = bestContainer;
 				}
 				_synctex_eq_get_closest_children_in_box(hitPoint,node,&bestNodes,&bestDistances,synctex_YES);
-				if(bestNodes.right && bestNodes.left) {
-					if((SYNCTEX_TAG(bestNodes.right)!=SYNCTEX_TAG(bestNodes.left))
+				if (bestNodes.right && bestNodes.left) {
+					if ((SYNCTEX_TAG(bestNodes.right)!=SYNCTEX_TAG(bestNodes.left))
 							|| (SYNCTEX_LINE(bestNodes.right)!=SYNCTEX_LINE(bestNodes.left))
 								|| (SYNCTEX_COLUMN(bestNodes.right)!=SYNCTEX_COLUMN(bestNodes.left))) {
-						if((SYNCTEX_START = malloc(2*sizeof(synctex_node_t)))) {
-							if(bestDistances.left>bestDistances.right) {
+						if ((SYNCTEX_START = malloc(2*sizeof(synctex_node_t)))) {
+							if (bestDistances.left>bestDistances.right) {
 								((synctex_node_t *)SYNCTEX_START)[0] = bestNodes.right;
 								((synctex_node_t *)SYNCTEX_START)[1] = bestNodes.left;
 							} else {
@@ -3467,16 +3543,16 @@ end:
 					}
 					/*  both nodes have the same input coordinates
 					 *  We choose the one closest to the hit point  */
-					if(bestDistances.left>bestDistances.right) {
+					if (bestDistances.left>bestDistances.right) {
 						bestNodes.left = bestNodes.right;
 					}
 					bestNodes.right = NULL;
-				} else if(bestNodes.right) {
+				} else if (bestNodes.right) {
 					bestNodes.left = bestNodes.right;
-				} else if(!bestNodes.left){
+				} else if (!bestNodes.left){
 					bestNodes.left = node;
 				}
-				if((SYNCTEX_START = malloc(sizeof(synctex_node_t)))) {
+				if ((SYNCTEX_START = malloc(sizeof(synctex_node_t)))) {
 					* (synctex_node_t *)SYNCTEX_START = bestNodes.left;
 					SYNCTEX_END = SYNCTEX_START + sizeof(synctex_node_t);
 					SYNCTEX_CUR = NULL;
@@ -3490,7 +3566,7 @@ end:
 		 */
 	}
 	/*  We are not lucky */
-	if((node = SYNCTEX_CHILD(sheet))) {
+	if ((node = SYNCTEX_CHILD(sheet))) {
 		goto end;
 	}
 	return 0;
@@ -3511,7 +3587,7 @@ int _synctex_bail(void) {
  *  if node is to the left of the hit point, this distance is negative.*/
 int _synctex_point_h_distance(synctex_point_t hitPoint, synctex_node_t node, synctex_bool_t visible);
 int _synctex_point_h_distance(synctex_point_t hitPoint, synctex_node_t node, synctex_bool_t visible) {
-	if(node) {
+	if (node) {
 		int min,med,max;
 		switch(node->class->type) {
 			/*  The distance between a point and a box is special.
@@ -3534,7 +3610,7 @@ int _synctex_point_h_distance(synctex_point_t hitPoint, synctex_node_t node, syn
 				min = visible?SYNCTEX_HORIZ_V(node):SYNCTEX_HORIZ(node);
 				max = min + (visible?SYNCTEX_ABS_WIDTH_V(node):SYNCTEX_ABS_WIDTH(node));
 				/*  We allways have min <= max */
-				if(hitPoint.h<min) {
+				if (hitPoint.h<min) {
 					return min - hitPoint.h; /*  regions 1+4+7, result is > 0 */
 				} else if (hitPoint.h>max) {
 					return max - hitPoint.h; /*  regions 3+6+9, result is < 0 */
@@ -3550,7 +3626,7 @@ int _synctex_point_h_distance(synctex_point_t hitPoint, synctex_node_t node, syn
 				min = SYNCTEX_HORIZ(node);
 				max = min + SYNCTEX_ABS_WIDTH(node);
 				/*  We allways have min <= max */
-				if(hitPoint.h<min) {
+				if (hitPoint.h<min) {
 					return min - hitPoint.h; /*  regions 1+4+7, result is > 0 */
 				} else if (hitPoint.h>max) {
 					return max - hitPoint.h; /*  regions 3+6+9, result is < 0 */
@@ -3564,7 +3640,7 @@ int _synctex_point_h_distance(synctex_point_t hitPoint, synctex_node_t node, syn
 				 *  in general, there is no text material in the kern,
 				 *  this is why we compute the offset relative to the closest edge of the kern.*/
 				max = SYNCTEX_WIDTH(node);
-				if(max<0) {
+				if (max<0) {
 					min = SYNCTEX_HORIZ(node);
 					max = min - max;
 				} else {
@@ -3588,7 +3664,7 @@ int _synctex_point_h_distance(synctex_point_t hitPoint, synctex_node_t node, syn
 				 *  It means that the best choice should be made according to the situation that occurs
 				 *  most frequently.
 				 */
-				if(hitPoint.h<min) {
+				if (hitPoint.h<min) {
 					return min - hitPoint.h + 1; /*  penalty to ensure other nodes are chosen first in case of overlapping ones */
 				} else if (hitPoint.h>max) {
 					return max - hitPoint.h - 1; /*  same kind of penalty */
@@ -3614,7 +3690,7 @@ int _synctex_point_v_distance(synctex_point_t hitPoint, synctex_node_t node,sync
 #	ifdef __DARWIN_UNIX03
 #       pragma unused(visible)
 #   endif
-	if(node) {
+	if (node) {
 		int min,max;
 		switch(node->class->type) {
 			/*  The distance between a point and a box is special.
@@ -3638,7 +3714,7 @@ int _synctex_point_v_distance(synctex_point_t hitPoint, synctex_node_t node,sync
 				max = min + SYNCTEX_ABS_DEPTH_V(node);
 				min -= SYNCTEX_ABS_HEIGHT_V(node);
 				/*  We allways have min <= max */
-				if(hitPoint.v<min) {
+				if (hitPoint.v<min) {
 					return min - hitPoint.v; /*  regions 1+2+3, result is > 0 */
 				} else if (hitPoint.v>max) {
 					return max - hitPoint.v; /*  regions 7+8+9, result is < 0 */
@@ -3654,7 +3730,7 @@ int _synctex_point_v_distance(synctex_point_t hitPoint, synctex_node_t node,sync
 				max = min + SYNCTEX_ABS_DEPTH(node);
 				min -= SYNCTEX_ABS_HEIGHT(node);
 				/*  We allways have min <= max */
-				if(hitPoint.v<min) {
+				if (hitPoint.v<min) {
 					return min - hitPoint.v; /*  regions 1+2+3, result is > 0 */
 				} else if (hitPoint.v>max) {
 					return max - hitPoint.v; /*  regions 7+8+9, result is < 0 */
@@ -3673,26 +3749,26 @@ int _synctex_point_v_distance(synctex_point_t hitPoint, synctex_node_t node,sync
 
 SYNCTEX_INLINE static synctex_node_t _synctex_smallest_container(synctex_node_t node, synctex_node_t other_node) {
 	float height, other_height;
-	if(SYNCTEX_ABS_WIDTH(node)<SYNCTEX_ABS_WIDTH(other_node)) {
+	if (SYNCTEX_ABS_WIDTH(node)<SYNCTEX_ABS_WIDTH(other_node)) {
 		return node;
 	}
-	if(SYNCTEX_ABS_WIDTH(node)>SYNCTEX_ABS_WIDTH(other_node)) {
+	if (SYNCTEX_ABS_WIDTH(node)>SYNCTEX_ABS_WIDTH(other_node)) {
 		return other_node;
 	}
 	height = SYNCTEX_ABS_DEPTH(node) + SYNCTEX_ABS_HEIGHT(node);
 	other_height = SYNCTEX_ABS_DEPTH(other_node) + SYNCTEX_ABS_HEIGHT(other_node);
-	if(height<other_height) {
+	if (height<other_height) {
 		return node;
 	}
-	if(height>other_height) {
+	if (height>other_height) {
 		return other_node;
 	}
 	return node;
 }
 
 synctex_bool_t _synctex_point_in_box(synctex_point_t hitPoint, synctex_node_t node, synctex_bool_t visible) {
-	if(node) {
-		if(0 == _synctex_point_h_distance(hitPoint,node,visible)
+	if (node) {
+		if (0 == _synctex_point_h_distance(hitPoint,node,visible)
 				&& 0 == _synctex_point_v_distance(hitPoint,node,visible)) {
 			return synctex_YES;
 		}
@@ -3705,7 +3781,7 @@ int _synctex_node_distance_to_point(synctex_point_t hitPoint, synctex_node_t nod
 #       pragma unused(visible)
 #   endif
 	int result = INT_MAX; /*  when the distance is meaning less (sheet, input...)  */
-	if(node) {
+	if (node) {
 		int minH,maxH,minV,maxV;
 		switch(node->class->type) {
 			/*  The distance between a point and a box is special.
@@ -3735,22 +3811,22 @@ int _synctex_node_distance_to_point(synctex_point_t hitPoint, synctex_node_t nod
 				maxV = minV + SYNCTEX_ABS_DEPTH(node);
 				minV -= SYNCTEX_ABS_HEIGHT(node);
 				/*  In what region is the point hitPoint=(H,V) ? */
-				if(hitPoint.v<minV) {
-					if(hitPoint.h<minH) {
+				if (hitPoint.v<minV) {
+					if (hitPoint.h<minH) {
 						/*  This is region 1. The distance to the box is the L1 distance PA. */
 						result = minV - hitPoint.v + minH - hitPoint.h;/*  Integer overflow? probability epsilon */
-					} else if(hitPoint.h<=maxH) {
+					} else if (hitPoint.h<=maxH) {
 						/*  This is region 2. The distance to the box is the geometrical distance to the top edge.  */
 						result = minV - hitPoint.v;
 					} else {
 						/*  This is region 3. The distance to the box is the L1 distance PB. */
 						result = minV - hitPoint.v + hitPoint.h - maxH;
 					}
-				} else if(hitPoint.v<=maxV) {
-					if(hitPoint.h<minH) {
+				} else if (hitPoint.v<=maxV) {
+					if (hitPoint.h<minH) {
 						/*  This is region 4. The distance to the box is the geometrical distance to the left edge.  */
 						result = minH - hitPoint.h;
-					} else if(hitPoint.h<=maxH) {
+					} else if (hitPoint.h<=maxH) {
 						/*  This is region 4. We are inside the box.  */
 						result = 0;
 					} else {
@@ -3758,10 +3834,10 @@ int _synctex_node_distance_to_point(synctex_point_t hitPoint, synctex_node_t nod
 						result = hitPoint.h - maxH;
 					}
 				} else {
-					if(hitPoint.h<minH) {
+					if (hitPoint.h<minH) {
 						/*  This is region 7. The distance to the box is the L1 distance PC. */
 						result = hitPoint.v - maxV + minH - hitPoint.h;
-					} else if(hitPoint.h<=maxH) {
+					} else if (hitPoint.h<=maxH) {
 						/*  This is region 8. The distance to the box is the geometrical distance to the top edge.  */
 						result = hitPoint.v - maxV;
 					} else {
@@ -3772,7 +3848,7 @@ int _synctex_node_distance_to_point(synctex_point_t hitPoint, synctex_node_t nod
 				break;
 			case synctex_node_type_kern:
 				maxH = SYNCTEX_WIDTH(node);
-				if(maxH<0) {
+				if (maxH<0) {
 					minH = SYNCTEX_HORIZ(node);
 					maxH = minH - maxH;
 				} else {
@@ -3781,19 +3857,19 @@ int _synctex_node_distance_to_point(synctex_point_t hitPoint, synctex_node_t nod
 					minH += maxH;
 				}
 				minV = SYNCTEX_VERT(node);
-				if(hitPoint.h<minH) {
-					if(hitPoint.v>minV) {
+				if (hitPoint.h<minH) {
+					if (hitPoint.v>minV) {
 						result = hitPoint.v - minV + minH - hitPoint.h;
 					} else {
 						result = minV - hitPoint.v + minH - hitPoint.h;
 					}
 				} else if (hitPoint.h>maxH) {
-					if(hitPoint.v>minV) {
+					if (hitPoint.v>minV) {
 						result = hitPoint.v - minV + hitPoint.h - maxH;
 					} else {
 						result = minV - hitPoint.v + hitPoint.h - maxH;
 					}
-				} else if(hitPoint.v>minV) {
+				} else if (hitPoint.v>minV) {
 					result = hitPoint.v - minV;
 				} else {
 					result = minV - hitPoint.v;
@@ -3803,13 +3879,13 @@ int _synctex_node_distance_to_point(synctex_point_t hitPoint, synctex_node_t nod
 			case synctex_node_type_math:
 				minH = SYNCTEX_HORIZ(node);
 				minV = SYNCTEX_VERT(node);
-				if(hitPoint.h<minH) {
-					if(hitPoint.v>minV) {
+				if (hitPoint.h<minH) {
+					if (hitPoint.v>minV) {
 						result = hitPoint.v - minV + minH - hitPoint.h;
 					} else {
 						result = minV - hitPoint.v + minH - hitPoint.h;
 					}
-				} else if(hitPoint.v>minV) {
+				} else if (hitPoint.v>minV) {
 					result = hitPoint.v - minV + hitPoint.h - minH;
 				} else {
 					result = minV - hitPoint.v + hitPoint.h - minH;
@@ -3821,31 +3897,31 @@ int _synctex_node_distance_to_point(synctex_point_t hitPoint, synctex_node_t nod
 }
 
 static synctex_node_t _synctex_eq_deepest_container(synctex_point_t hitPoint,synctex_node_t node, synctex_bool_t visible) {
-	if(node) {
+	if (node) {
 		synctex_node_t result = NULL;
 		synctex_node_t child = NULL;
 		switch(node->class->type) {
 			case synctex_node_type_vbox:
 			case synctex_node_type_hbox:
 				/*  test the deep nodes first */
-				if((child = SYNCTEX_CHILD(node))) {
+				if ((child = SYNCTEX_CHILD(node))) {
 					do {
-						if((result = _synctex_eq_deepest_container(hitPoint,child,visible))) {
+						if ((result = _synctex_eq_deepest_container(hitPoint,child,visible))) {
 							return result;
 						}
 					} while((child = SYNCTEX_SIBLING(child)));
 				}
 				/*  is the hit point inside the box? */
-				if(_synctex_point_in_box(hitPoint,node,visible)) {
+				if (_synctex_point_in_box(hitPoint,node,visible)) {
 					/*  for vboxes we try to use some node inside.
 					 *  Walk through the list of siblings until we find the closest one.
 					 *  Only consider siblings with children. */
-					if((node->class->type == synctex_node_type_vbox) && (child = SYNCTEX_CHILD(node))) {
+					if ((node->class->type == synctex_node_type_vbox) && (child = SYNCTEX_CHILD(node))) {
 						int bestDistance = INT_MAX;
 						do {
-							if(SYNCTEX_CHILD(child)) {
+							if (SYNCTEX_CHILD(child)) {
 								int distance = _synctex_node_distance_to_point(hitPoint,child,visible);
-								if(distance < bestDistance) {
+								if (distance < bestDistance) {
 									bestDistance = distance;
 									node = child;
 								}
@@ -3864,20 +3940,20 @@ static synctex_node_t _synctex_eq_deepest_container(synctex_point_t hitPoint,syn
 SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_hbox(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t*  bestNodesRef,synctex_distances_t*  bestDistancesRef, synctex_bool_t visible);
 SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_hbox(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t*  bestNodesRef,synctex_distances_t*  bestDistancesRef, synctex_bool_t visible) {
 	int result = 0;
-	if((node = SYNCTEX_CHILD(node))) {
+	if ((node = SYNCTEX_CHILD(node))) {
 		do {
 			int off7 = _synctex_point_h_distance(hitPoint,node,visible);
-			if(off7 > 0) {
+			if (off7 > 0) {
 				/*  node is to the right of the hit point.
 				 *  We compare node and the previously recorded one, through the recorded distance.
 				 *  If the nodes have the same tag, prefer the one with the smallest line number,
 				 *  if the nodes also have the same line number, prefer the one with the smallest column. */
-				if(bestDistancesRef->right > off7) {
+				if (bestDistancesRef->right > off7) {
 					bestDistancesRef->right = off7;
 					bestNodesRef->right = node;
 					result |= SYNCTEX_MASK_RIGHT;
-				} else if(bestDistancesRef->right == off7 && bestNodesRef->right) {
-					if(SYNCTEX_TAG(bestNodesRef->right) == SYNCTEX_TAG(node)
+				} else if (bestDistancesRef->right == off7 && bestNodesRef->right) {
+					if (SYNCTEX_TAG(bestNodesRef->right) == SYNCTEX_TAG(node)
 						&& (SYNCTEX_LINE(bestNodesRef->right) > SYNCTEX_LINE(node)
 							|| (SYNCTEX_LINE(bestNodesRef->right) == SYNCTEX_LINE(node)
 								&& SYNCTEX_COLUMN(bestNodesRef->right) > SYNCTEX_COLUMN(node)))) {
@@ -3885,7 +3961,7 @@ SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_hbox(synctex_poin
 						result |= SYNCTEX_MASK_RIGHT;
 					}
 				}
-			} else if(off7 == 0) {
+			} else if (off7 == 0) {
 				/*  hitPoint is inside node. */ 
 				bestDistancesRef->left = bestDistancesRef->right = 0;
 				bestNodesRef->left = node;
@@ -3893,12 +3969,12 @@ SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_hbox(synctex_poin
 				result |= SYNCTEX_MASK_LEFT;
 			} else { /*  here off7 < 0, hitPoint is to the right of node */
 				off7 = -off7;
-				if(bestDistancesRef->left > off7) {
+				if (bestDistancesRef->left > off7) {
 					bestDistancesRef->left = off7;
 					bestNodesRef->left = node;
 					result |= SYNCTEX_MASK_LEFT;
-				} else if(bestDistancesRef->left == off7 && bestNodesRef->left) {
-					if(SYNCTEX_TAG(bestNodesRef->left) == SYNCTEX_TAG(node)
+				} else if (bestDistancesRef->left == off7 && bestNodesRef->left) {
+					if (SYNCTEX_TAG(bestNodesRef->left) == SYNCTEX_TAG(node)
 						&& (SYNCTEX_LINE(bestNodesRef->left) > SYNCTEX_LINE(node)
 							|| (SYNCTEX_LINE(bestNodesRef->left) == SYNCTEX_LINE(node)
 								&& SYNCTEX_COLUMN(bestNodesRef->left) > SYNCTEX_COLUMN(node)))) {
@@ -3908,21 +3984,21 @@ SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_hbox(synctex_poin
 				}
 			}
 		} while((node = SYNCTEX_SIBLING(node)));
-		if(result & SYNCTEX_MASK_LEFT) {
+		if (result & SYNCTEX_MASK_LEFT) {
 			/*  the left node is new, try to narrow the result */
-			if((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->left,visible))) {
+			if ((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->left,visible))) {
 				bestNodesRef->left = node;
 			} 
-			if((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->left,visible))) {
+			if ((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->left,visible))) {
 				bestNodesRef->left = node;
 			} 
 		}
-		if(result & SYNCTEX_MASK_RIGHT) {
+		if (result & SYNCTEX_MASK_RIGHT) {
 			/*  the right node is new, try to narrow the result */
-			if((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->right,visible))) {
+			if ((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->right,visible))) {
 				bestNodesRef->right = node;
 			} 
-			if((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->right,visible))) {
+			if ((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->right,visible))) {
 				bestNodesRef->right = node;
 			} 
 		}
@@ -3932,20 +4008,20 @@ SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_hbox(synctex_poin
 SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_vbox(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t*  bestNodesRef,synctex_distances_t*  bestDistancesRef,synctex_bool_t visible);
 SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_vbox(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t*  bestNodesRef,synctex_distances_t*  bestDistancesRef,synctex_bool_t visible) {
 	int result = 0;
-	if((node = SYNCTEX_CHILD(node))) {
+	if ((node = SYNCTEX_CHILD(node))) {
 		do {
 			int off7 = _synctex_point_v_distance(hitPoint,node,visible);/*  this is what makes the difference with the h version above */
-			if(off7 > 0) {
+			if (off7 > 0) {
 				/*  node is to the top of the hit point (below because TeX is oriented from top to bottom.
 				 *  We compare node and the previously recorded one, through the recorded distance.
 				 *  If the nodes have the same tag, prefer the one with the smallest line number,
 				 *  if the nodes also have the same line number, prefer the one with the smallest column. */
-				if(bestDistancesRef->right > off7) {
+				if (bestDistancesRef->right > off7) {
 					bestDistancesRef->right = off7;
 					bestNodesRef->right = node;
 					result |= SYNCTEX_MASK_RIGHT;
-				} else if(bestDistancesRef->right == off7 && bestNodesRef->right) {
-					if(SYNCTEX_TAG(bestNodesRef->right) == SYNCTEX_TAG(node)
+				} else if (bestDistancesRef->right == off7 && bestNodesRef->right) {
+					if (SYNCTEX_TAG(bestNodesRef->right) == SYNCTEX_TAG(node)
 						&& (SYNCTEX_LINE(bestNodesRef->right) > SYNCTEX_LINE(node)
 							|| (SYNCTEX_LINE(bestNodesRef->right) == SYNCTEX_LINE(node)
 								&& SYNCTEX_COLUMN(bestNodesRef->right) > SYNCTEX_COLUMN(node)))) {
@@ -3953,19 +4029,19 @@ SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_vbox(synctex_poin
 						result |= SYNCTEX_MASK_RIGHT;
 					}
 				}
-			} else if(off7 == 0) {
+			} else if (off7 == 0) {
 				bestDistancesRef->left = bestDistancesRef->right = 0;
 				bestNodesRef->left = node;
 				bestNodesRef->right = NULL;
 				result |= SYNCTEX_MASK_LEFT;
 			} else { /*  here off7 < 0 */
 				off7 = -off7;
-				if(bestDistancesRef->left > off7) {
+				if (bestDistancesRef->left > off7) {
 					bestDistancesRef->left = off7;
 					bestNodesRef->left = node;
 					result |= SYNCTEX_MASK_LEFT;
-				} else if(bestDistancesRef->left == off7 && bestNodesRef->left) {
-					if(SYNCTEX_TAG(bestNodesRef->left) == SYNCTEX_TAG(node)
+				} else if (bestDistancesRef->left == off7 && bestNodesRef->left) {
+					if (SYNCTEX_TAG(bestNodesRef->left) == SYNCTEX_TAG(node)
 						&& (SYNCTEX_LINE(bestNodesRef->left) > SYNCTEX_LINE(node)
 							|| (SYNCTEX_LINE(bestNodesRef->left) == SYNCTEX_LINE(node)
 								&& SYNCTEX_COLUMN(bestNodesRef->left) > SYNCTEX_COLUMN(node)))) {
@@ -3975,21 +4051,21 @@ SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_vbox(synctex_poin
 				}
 			}
 		} while((node = SYNCTEX_SIBLING(node)));
-		if(result & SYNCTEX_MASK_LEFT) {
+		if (result & SYNCTEX_MASK_LEFT) {
 			/*  the left node is new, try to narrow the result */
-			if((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->left,visible))) {
+			if ((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->left,visible))) {
 				bestNodesRef->left = node;
 			} 
-			if((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->left,visible))) {
+			if ((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->left,visible))) {
 				bestNodesRef->left = node;
 			} 
 		}
-		if(result & SYNCTEX_MASK_RIGHT) {
+		if (result & SYNCTEX_MASK_RIGHT) {
 			/*  the right node is new, try to narrow the result */
-			if((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->right,visible))) {
+			if ((node = _synctex_eq_deepest_container(hitPoint,bestNodesRef->right,visible))) {
 				bestNodesRef->right = node;
 			} 
-			if((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->right,visible))) {
+			if ((node = _synctex_eq_closest_child(hitPoint,bestNodesRef->right,visible))) {
 				bestNodesRef->right = node;
 			} 
 		}
@@ -3997,7 +4073,7 @@ SYNCTEX_INLINE static int __synctex_eq_get_closest_children_in_vbox(synctex_poin
 	return result;
 }
 SYNCTEX_INLINE static int _synctex_eq_get_closest_children_in_box(synctex_point_t hitPoint, synctex_node_t node, synctex_node_set_t*  bestNodesRef,synctex_distances_t*  bestDistancesRef,synctex_bool_t visible) {
-	if(node) {
+	if (node) {
 		switch(node->class->type) {
 			case synctex_node_type_hbox:
 				return __synctex_eq_get_closest_children_in_hbox(hitPoint, node, bestNodesRef, bestDistancesRef,visible);
@@ -4011,18 +4087,18 @@ SYNCTEX_INLINE static int _synctex_eq_get_closest_children_in_box(synctex_point_
 SYNCTEX_INLINE static synctex_node_t __synctex_eq_closest_child(synctex_point_t hitPoint, synctex_node_t node,int*  distanceRef, synctex_bool_t visible);
 SYNCTEX_INLINE static synctex_node_t __synctex_eq_closest_child(synctex_point_t hitPoint, synctex_node_t node,int*  distanceRef, synctex_bool_t visible) {
 	synctex_node_t best_node = NULL;
-	if((node = SYNCTEX_CHILD(node))) {
+	if ((node = SYNCTEX_CHILD(node))) {
 		do {
 			int distance = _synctex_node_distance_to_point(hitPoint,node,visible);
 			synctex_node_t candidate = NULL;
-			if(distance<=*distanceRef) {
+			if (distance<=*distanceRef) {
 				*distanceRef = distance;
 				best_node = node;
 			}
 			switch(node->class->type) {
 				case synctex_node_type_vbox:
 				case synctex_node_type_hbox:
-					if((candidate = __synctex_eq_closest_child(hitPoint,node,distanceRef,visible))) {
+					if ((candidate = __synctex_eq_closest_child(hitPoint,node,distanceRef,visible))) {
 						best_node = candidate;
 					}
 			}
@@ -4031,23 +4107,23 @@ SYNCTEX_INLINE static synctex_node_t __synctex_eq_closest_child(synctex_point_t
 	return best_node;
 }
 SYNCTEX_INLINE static synctex_node_t _synctex_eq_closest_child(synctex_point_t hitPoint,synctex_node_t node, synctex_bool_t visible) {
-	if(node) {
+	if (node) {
 		switch(node->class->type) {
 			case synctex_node_type_hbox:
 			case synctex_node_type_vbox:
 			{
 				int best_distance = INT_MAX;
 				synctex_node_t best_node = __synctex_eq_closest_child(hitPoint,node,&best_distance,visible);
-				if((best_node)) {
+				if ((best_node)) {
 					synctex_node_t child = NULL;
 					switch(best_node->class->type) {
 						case synctex_node_type_vbox:
 						case synctex_node_type_hbox:
-							if((child = SYNCTEX_CHILD(best_node))) {
+							if ((child = SYNCTEX_CHILD(best_node))) {
 								best_distance = _synctex_node_distance_to_point(hitPoint,child,visible);
 								while((child = SYNCTEX_SIBLING(child))) {
 									int distance = _synctex_node_distance_to_point(hitPoint,child,visible);
-									if(distance<=best_distance) {
+									if (distance<=best_distance) {
 										best_distance = distance;
 										best_node = child;
 									}
@@ -4087,27 +4163,29 @@ struct __synctex_updater_t {
 synctex_updater_t synctex_updater_new_with_output_file(const char * output, const char * build_directory) {
 	synctex_updater_t updater = NULL;
 	char * synctex = NULL;
-	synctex_io_mode_t io_mode = synctex_io_mode_read;
-	const char * mode;
-	/*  prepare the updater */
+	synctex_io_mode_t io_mode = 0;
+	const char * mode = NULL;
+	/*  prepare the updater, the memory is the only one dynamically allocated */
 	updater = (synctex_updater_t)_synctex_malloc(sizeof(synctex_updater_t));
-	if(NULL == updater) {
+	if (NULL == updater) {
 		_synctex_error("!  synctex_updater_new_with_file: malloc problem");
 		return NULL;
 	}
-	if(_synctex_open(output,build_directory,&synctex,&SYNCTEX_FILE,synctex_NO,&io_mode)
-		&& _synctex_open(output,build_directory,&synctex,&SYNCTEX_FILE,synctex_YES,&io_mode)) {
+	if (_synctex_open(output,build_directory,&synctex,&SYNCTEX_FILE,synctex_ADD_QUOTES,&io_mode)
+		&& _synctex_open(output,build_directory,&synctex,&SYNCTEX_FILE,synctex_DONT_ADD_QUOTES,&io_mode)) {
 return_on_error:
 		free(updater);
+        updater = NULL;
 		return NULL;
 	}
-	/*  OK, the file exists */
+	/*  OK, the file exists, we close it and reopen it with the correct mode.
+     *  The receiver is now the owner of the "synctex" variable. */
 	gzclose(SYNCTEX_FILE);
 	SYNCTEX_FILE = NULL;
-	SYNCTEX_NO_GZ = io_mode%2?synctex_NO:synctex_YES;
-	mode = synctex_io_modes[io_mode+synctex_io_mode_append];/* either "a" or "ab", depending on the file extension */
-	if(SYNCTEX_NO_GZ) {
-		if(NULL == (SYNCTEX_FILE = (void *)fopen(synctex,mode))) {
+	SYNCTEX_NO_GZ = (io_mode&synctex_io_gz_mask)?synctex_NO:synctex_YES;
+    mode = _synctex_get_io_mode_name(io_mode|synctex_io_append_mask);/* either "a" or "ab", depending on the file extension */
+	if (SYNCTEX_NO_GZ) {
+		if (NULL == (SYNCTEX_FILE = (void *)fopen(synctex,mode))) {
 no_write_error:
 			_synctex_error("!  synctex_updater_new_with_file: Can't append to %s",synctex);
 			free(synctex);
@@ -4115,7 +4193,7 @@ no_write_error:
 		}
 		updater->fprintf = (synctex_fprintf_t)(&fprintf);
 	} else {
-		if(NULL == (SYNCTEX_FILE = (void *)gzopen(synctex,mode))) {
+		if (NULL == (SYNCTEX_FILE = (void *)gzopen(synctex,mode))) {
 			goto no_write_error;
 		}
 		updater->fprintf = (synctex_fprintf_t)(&gzprintf);
@@ -4127,37 +4205,37 @@ no_write_error:
 
 
 void synctex_updater_append_magnification(synctex_updater_t updater, char * magnification){
-	if(NULL==updater) {
+	if (NULL==updater) {
 		return;
 	}
-	if(magnification && strlen(magnification)) {
+	if (magnification && strlen(magnification)) {
 		updater->length += SYNCTEX_fprintf(SYNCTEX_FILE,"Magnification:%s\n",magnification);
 	}
 }
 
 void synctex_updater_append_x_offset(synctex_updater_t updater, char * x_offset){
-	if(NULL==updater) {
+	if (NULL==updater) {
 		return;
 	}
-	if(x_offset && strlen(x_offset)) {
+	if (x_offset && strlen(x_offset)) {
 		updater->length += SYNCTEX_fprintf(SYNCTEX_FILE,"X Offset:%s\n",x_offset);
 	}
 }
 
 void synctex_updater_append_y_offset(synctex_updater_t updater, char * y_offset){
-	if(NULL==updater) {
+	if (NULL==updater) {
 		return;
 	}
-	if(y_offset && strlen(y_offset)) {
+	if (y_offset && strlen(y_offset)) {
 		updater->length += SYNCTEX_fprintf(SYNCTEX_FILE,"Y Offset:%s\n",y_offset);
 	}
 }
 
 void synctex_updater_free(synctex_updater_t updater){
-	if(NULL==updater) {
+	if (NULL==updater) {
 		return;
 	}
-	if(updater->length>0) {
+	if (updater->length>0) {
 		SYNCTEX_fprintf(SYNCTEX_FILE,"!%i\n",updater->length);
 	}
 	if (SYNCTEX_NO_GZ) {
diff --git a/cut-n-paste/synctex/synctex_parser.h b/cut-n-paste/synctex/synctex_parser.h
index b164b7f..4aca415 100644
--- a/cut-n-paste/synctex/synctex_parser.h
+++ b/cut-n-paste/synctex/synctex_parser.h
@@ -1,11 +1,12 @@
 /* 
-Copyright (c) 2008, 2009, 2010 jerome DOT laurens AT u-bourgogne DOT fr
+Copyright (c) 2008, 2009, 2010 , 2011 jerome DOT laurens AT u-bourgogne DOT fr
 
 This file is part of the SyncTeX package.
 
-Latest Revision: Wed Jul  1 11:16:51 UTC 2009
+Latest Revision: Tue Jun 14 08:23:30 UTC 2011
+
+Version: 1.16
 
-Version: 1.12
 See synctex_parser_readme.txt for more details
 
 License:
@@ -89,7 +90,7 @@ typedef _synctex_scanner_t *  synctex_scanner_t;
  *	It is the directory where all the auxiliary stuff is created.
  *	Sometimes, the synctex output file and the pdf, dvi or xdv files are not created in the same directory.
  *	This is the case in MikTeX (I will include this into TeX Live).
- *	This directory path can be nil, it will be ignored.
+ *	This directory path can be nil, it will be ignored then.
  *	It can be either absolute or relative to the directory of the output pdf (dvi or xdv) file.
  *	If no synctex file is found in the same directory as the output file, then we try to find one in the build directory.
  *  Please note that this new "build_directory" is provided as a convenient argument but should not be used.
diff --git a/cut-n-paste/synctex/synctex_parser_local.h b/cut-n-paste/synctex/synctex_parser_local.h
index 0a127af..6573b26 100644
--- a/cut-n-paste/synctex/synctex_parser_local.h
+++ b/cut-n-paste/synctex/synctex_parser_local.h
@@ -1,9 +1,13 @@
 /* 
-Copyright (c) 2008, 2009 jerome DOT laurens AT u-bourgogne DOT fr
+Copyright (c) 2008, 2009, 2010 , 2011 jerome DOT laurens AT u-bourgogne DOT fr
 
 This file is part of the SyncTeX package.
 
-Latest Revision: Wed Jul  1 11:16:13 UTC 2009
+Latest Revision: Tue Jun 14 08:23:30 UTC 2011
+
+Version: 1.16
+
+See synctex_parser_readme.txt for more details
 
 License:
 --------
diff --git a/cut-n-paste/synctex/synctex_parser_utils.c b/cut-n-paste/synctex/synctex_parser_utils.c
index 0aef577..569f7e9 100644
--- a/cut-n-paste/synctex/synctex_parser_utils.c
+++ b/cut-n-paste/synctex/synctex_parser_utils.c
@@ -1,11 +1,12 @@
 /* 
-Copyright (c) 2008, 2009 jerome DOT laurens AT u-bourgogne DOT fr
+Copyright (c) 2008, 2009, 2010 , 2011 jerome DOT laurens AT u-bourgogne DOT fr
 
 This file is part of the SyncTeX package.
 
-Latest Revision: Wed Nov  4 11:52:35 UTC 2009
+Latest Revision: Tue Jun 14 08:23:30 UTC 2011
+
+Version: 1.16
 
-Version: 1.9
 See synctex_parser_readme.txt for more details
 
 License:
@@ -140,8 +141,22 @@ void _synctex_strip_last_path_extension(char * string) {
 	}
 }
 
+const char * synctex_ignore_leading_dot_slash(const char * name)
+{
+    while(SYNCTEX_IS_DOT(*name) && SYNCTEX_IS_PATH_SEPARATOR(name[1])) {
+        name += 2;
+        while (SYNCTEX_IS_PATH_SEPARATOR(*name)) {
+            ++name;
+        }
+    }
+    return name;
+}
+
 /*  Compare two file names, windows is sometimes case insensitive... */
 synctex_bool_t _synctex_is_equivalent_file_name(const char *lhs, const char *rhs) {
+    /*  Remove the leading regex '(\./+)*' in both rhs and lhs */
+    lhs = synctex_ignore_leading_dot_slash(lhs);
+    rhs = synctex_ignore_leading_dot_slash(rhs);
 #	if SYNCTEX_WINDOWS
     /*  On Windows, filename should be compared case insensitive.
 	 *  The characters '/' and '\' are both valid path separators.
@@ -294,121 +309,115 @@ char * _synctex_merge_strings(const char * first,...) {
  *  There is a list of possible filenames from which we return the most recent one and try to remove all the others.
  *  With two runs of pdftex or xetex we are sure the the synctex file is really the most appropriate.
  */
-int _synctex_get_name(const char * output, const char * build_directory, char ** synctex_name_ref, synctex_compress_mode_t * compress_mode_ref)
+int _synctex_get_name(const char * output, const char * build_directory, char ** synctex_name_ref, synctex_io_mode_t * io_mode_ref)
 {
-	if(output && synctex_name_ref && compress_mode_ref) {
-#		define synctex_name (*synctex_name_ref)
-#		define compress_mode (*compress_mode_ref)
+	if(output && synctex_name_ref && io_mode_ref) {
 		/*  If output is already absolute, we just have to manage the quotes and the compress mode */
-		const char * basename = NULL; /*  base name of output*/
 		size_t size = 0;
-		/*  Initialize the return values. */
-		synctex_name = NULL;
-		compress_mode = synctex_compress_mode_none;
-		basename = _synctex_last_path_component(output); /*  do not free, output is the owner. */
+        char * synctex_name = NULL;
+        synctex_io_mode_t io_mode = *io_mode_ref;
+		const char * base_name = _synctex_last_path_component(output); /*  do not free, output is the owner. base name of output*/
 		/*  Do we have a real base name ? */
-		if((size = strlen(basename))>0) {
+		if(strlen(base_name)>0) {
 			/*  Yes, we do. */
 			const char * temp = NULL;
-			char * corename = NULL; /*  base name of output without path extension. */
-			char * dirname = NULL; /*  dir name of output */
-			char * quoted_corename = NULL;
-			char * none = NULL;
-			char * gz = NULL;
-			char * quoted = NULL;
-			char * quoted_gz = NULL;
-			char * build = NULL;
-			char * build_gz = NULL;
-			char * build_quoted = NULL;
-			char * build_quoted_gz = NULL;
+			char * core_name = NULL; /*  base name of output without path extension. */
+			char * dir_name = NULL; /*  dir name of output */
+			char * quoted_core_name = NULL;
+			char * basic_name = NULL;
+			char * gz_name = NULL;
+			char * quoted_name = NULL;
+			char * quoted_gz_name = NULL;
+			char * build_name = NULL;
+			char * build_gz_name = NULL;
+			char * build_quoted_name = NULL;
+			char * build_quoted_gz_name = NULL;
 			struct stat buf;
-			time_t time = 0;
-			/*  Create corename: let temp point to the dot before the path extension of basename;
+			time_t the_time = 0;
+			/*  Create core_name: let temp point to the dot before the path extension of base_name;
 			 *  We start form the \0 terminating character and scan the string upward until we find a dot.
-			 *  The first dot is not accepted. */
-			temp = strrchr(basename,'.');
-			size = temp - basename;
-			if(size>0) {
-				/*  dot properly found, now create corename  */
-				if(NULL == (corename = (char *)malloc(size+1))) {
+			 *  The leading dot is not accepted. */
+			if((temp = strrchr(base_name,'.')) && (size = temp - base_name)>0) {
+				/*  There is a dot and it is not at the leading position    */
+				if(NULL == (core_name = (char *)malloc(size+1))) {
 					_synctex_error("!  _synctex_get_name: Memory problem 1");
 					return -1;
 				}
-				if(corename != strncpy(corename,basename,size)) {
+				if(core_name != strncpy(core_name,base_name,size)) {
 					_synctex_error("!  _synctex_get_name: Copy problem 1");
-					free(corename);
-					dirname = NULL;
+					free(core_name);
+					dir_name = NULL;
 					return -2;
 				}
-				corename[size] = '\0';
+				core_name[size] = '\0';
 			} else {
 				/*  There is no path extension,
-				 *  Just make a copy of basename */
-				corename = _synctex_merge_strings(basename);
+				 *  Just make a copy of base_name */
+				core_name = _synctex_merge_strings(base_name);
 			}
-			/*  corename is properly set up, owned by "self". */
-			/*  creating dirname. */
-			size = strlen(output)-strlen(basename);
+			/*  core_name is properly set up, owned by "self". */
+			/*  creating dir_name. */
+			size = strlen(output)-strlen(base_name);
 			if(size>0) {
 				/*  output contains more than one path component */
-				if(NULL == (dirname = (char *)malloc(size+1))) {
+				if(NULL == (dir_name = (char *)malloc(size+1))) {
 					_synctex_error("!  _synctex_get_name: Memory problem");
-					free(corename);
-					dirname = NULL;
+					free(core_name);
+					dir_name = NULL;
 					return -1;
 				}
-				if(dirname != strncpy(dirname,output,size)) {
+				if(dir_name != strncpy(dir_name,output,size)) {
 					_synctex_error("!  _synctex_get_name: Copy problem");
-					free(dirname);
-					dirname = NULL;
-					free(corename);
-					dirname = NULL;
+					free(dir_name);
+					dir_name = NULL;
+					free(core_name);
+					dir_name = NULL;
 					return -2;
 				}
-				dirname[size] = '\0';
+				dir_name[size] = '\0';
 			}
-			/*  dirname is properly set up. It ends with a path separator, if non void. */
-			/*  creating quoted_corename. */
-			if(strchr(corename,' ')) {
-				quoted_corename = _synctex_merge_strings("\"",corename,"\"");
+			/*  dir_name is properly set up. It ends with a path separator, if non void. */
+			/*  creating quoted_core_name. */
+			if(strchr(core_name,' ')) {
+				quoted_core_name = _synctex_merge_strings("\"",core_name,"\"");
 			}
-			/*  quoted_corename is properly set up. */
-			if(dirname &&strlen(dirname)>0) {
-				none = _synctex_merge_strings(dirname,corename,synctex_suffix,NULL);
-				if(quoted_corename && strlen(quoted_corename)>0) {
-					quoted = _synctex_merge_strings(dirname,quoted_corename,synctex_suffix,NULL);
+			/*  quoted_core_name is properly set up. */
+			if(dir_name &&strlen(dir_name)>0) {
+				basic_name = _synctex_merge_strings(dir_name,core_name,synctex_suffix,NULL);
+				if(quoted_core_name && strlen(quoted_core_name)>0) {
+					quoted_name = _synctex_merge_strings(dir_name,quoted_core_name,synctex_suffix,NULL);
 				}
 			} else {
-				none = _synctex_merge_strings(corename,synctex_suffix,NULL);
-				if(quoted_corename && strlen(quoted_corename)>0) {
-					quoted = _synctex_merge_strings(quoted_corename,synctex_suffix,NULL);
+				basic_name = _synctex_merge_strings(core_name,synctex_suffix,NULL);
+				if(quoted_core_name && strlen(quoted_core_name)>0) {
+					quoted_name = _synctex_merge_strings(quoted_core_name,synctex_suffix,NULL);
 				}
 			}
 			if(!_synctex_path_is_absolute(output) && build_directory && (size = strlen(build_directory))) {
 				temp = build_directory + size - 1;
 				if(_synctex_path_is_absolute(temp)) {
-					build = _synctex_merge_strings(build_directory,none,NULL);
-					if(quoted_corename && strlen(quoted_corename)>0) {
-						build_quoted = _synctex_merge_strings(build_directory,quoted,NULL);
+					build_name = _synctex_merge_strings(build_directory,basic_name,NULL);
+					if(quoted_core_name && strlen(quoted_core_name)>0) {
+						build_quoted_name = _synctex_merge_strings(build_directory,quoted_name,NULL);
 					}
 				} else {
-					build = _synctex_merge_strings(build_directory,"/",none,NULL);
-					if(quoted_corename && strlen(quoted_corename)>0) {
-						build_quoted = _synctex_merge_strings(build_directory,"/",quoted,NULL);
+					build_name = _synctex_merge_strings(build_directory,"/",basic_name,NULL);
+					if(quoted_core_name && strlen(quoted_core_name)>0) {
+						build_quoted_name = _synctex_merge_strings(build_directory,"/",quoted_name,NULL);
 					}
 				}
 			}
-			if(none) {
-				gz = _synctex_merge_strings(none,synctex_suffix_gz,NULL);
+			if(basic_name) {
+				gz_name = _synctex_merge_strings(basic_name,synctex_suffix_gz,NULL);
 			}
-			if(quoted) {
-				quoted_gz =	_synctex_merge_strings(quoted,synctex_suffix_gz,NULL);
+			if(quoted_name) {
+				quoted_gz_name = _synctex_merge_strings(quoted_name,synctex_suffix_gz,NULL);
 			}
-			if(build) {
-				build_gz = _synctex_merge_strings(build,synctex_suffix_gz,NULL);
+			if(build_name) {
+				build_gz_name = _synctex_merge_strings(build_name,synctex_suffix_gz,NULL);
 			}
-			if(build_quoted) {
-				build_quoted_gz = _synctex_merge_strings(build_quoted,synctex_suffix_gz,NULL);
+			if(build_quoted_name) {
+				build_quoted_gz_name = _synctex_merge_strings(build_quoted_name,synctex_suffix_gz,NULL);
 			}
 			/*  All the others names are properly set up... */
 			/*  retain the most recently modified file */
@@ -417,22 +426,24 @@ int _synctex_get_name(const char * output, const char * build_directory, char **
 				if (stat(FILENAME, &buf)) { \
 					free(FILENAME);\
 					FILENAME = NULL;\
-				} else { \
-					if(buf.st_mtime>time) { \
-						time=buf.st_mtime; \
-						synctex_name = FILENAME; \
-						compress_mode = COMPRESS_MODE; \
-					} \
+				} else if (buf.st_mtime>the_time) { \
+                    the_time=buf.st_mtime; \
+                    synctex_name = FILENAME; \
+                    if (COMPRESS_MODE) { \
+                        io_mode |= synctex_io_gz_mask; \
+                    } else { \
+                        io_mode &= ~synctex_io_gz_mask; \
+                    } \
 				} \
 			}
-			TEST(none,synctex_compress_mode_none);
-			TEST(gz,synctex_compress_mode_gz);
-			TEST(quoted,synctex_compress_mode_none);
-			TEST(quoted_gz,synctex_compress_mode_gz);
-			TEST(build,synctex_compress_mode_none);
-			TEST(build_gz,synctex_compress_mode_gz);
-			TEST(build_quoted,synctex_compress_mode_none);
-			TEST(build_quoted_gz,synctex_compress_mode_gz);
+			TEST(basic_name,synctex_DONT_COMPRESS);
+			TEST(gz_name,synctex_COMPRESS);
+			TEST(quoted_name,synctex_DONT_COMPRESS);
+			TEST(quoted_gz_name,synctex_COMPRESS);
+			TEST(build_name,synctex_DONT_COMPRESS);
+			TEST(build_gz_name,synctex_COMPRESS);
+			TEST(build_quoted_name,synctex_DONT_COMPRESS);
+			TEST(build_quoted_gz_name,synctex_COMPRESS);
 #			undef TEST
 			/*  Free all the intermediate filenames, except the one that will be used as returned value. */
 #			define CLEAN_AND_REMOVE(FILENAME) \
@@ -442,21 +453,27 @@ int _synctex_get_name(const char * output, const char * build_directory, char **
 				free(FILENAME);\
 				FILENAME = NULL;\
 			}
-			CLEAN_AND_REMOVE(none);
-			CLEAN_AND_REMOVE(gz);
-			CLEAN_AND_REMOVE(quoted);
-			CLEAN_AND_REMOVE(quoted_gz);
-			CLEAN_AND_REMOVE(build);
-			CLEAN_AND_REMOVE(build_gz);
-			CLEAN_AND_REMOVE(build_quoted);
-			CLEAN_AND_REMOVE(build_quoted_gz);
+			CLEAN_AND_REMOVE(basic_name);
+			CLEAN_AND_REMOVE(gz_name);
+			CLEAN_AND_REMOVE(quoted_name);
+			CLEAN_AND_REMOVE(quoted_gz_name);
+			CLEAN_AND_REMOVE(build_name);
+			CLEAN_AND_REMOVE(build_gz_name);
+			CLEAN_AND_REMOVE(build_quoted_name);
+			CLEAN_AND_REMOVE(build_quoted_gz_name);
 #			undef CLEAN_AND_REMOVE
+            /* set up the returned values */
+            * synctex_name_ref = synctex_name;
+            * io_mode_ref = io_mode;
 			return 0;
 		}
 		return -1;/*  bad argument */
-#		undef synctex_name
-#		undef compress_mode 
 	}
 	return -2;
 }
 
+const char * _synctex_get_io_mode_name(synctex_io_mode_t io_mode) {
+    static const char * synctex_io_modes[4] = {"r","rb","a","ab"}; 
+    unsigned index = ((io_mode & synctex_io_gz_mask)?1:0) + ((io_mode & synctex_io_append_mask)?2:0);// bug pointed out by Jose Alliste
+    return synctex_io_modes[index];
+}
diff --git a/cut-n-paste/synctex/synctex_parser_utils.h b/cut-n-paste/synctex/synctex_parser_utils.h
index e28ff58..e67f8f5 100644
--- a/cut-n-paste/synctex/synctex_parser_utils.h
+++ b/cut-n-paste/synctex/synctex_parser_utils.h
@@ -1,10 +1,12 @@
 /* 
-Copyright (c) 2008, 2009 jerome DOT laurens AT u-bourgogne DOT fr
+Copyright (c) 2008, 2009, 2010, 2011 jerome DOT laurens AT u-bourgogne DOT fr
 
 This file is part of the SyncTeX package.
 
-Version: 1.8
-Latest Revision: Wed Jul  1 11:16:01 UTC 2009
+Latest Revision: Tue Jun 14 08:23:30 UTC 2011
+
+Version: 1.16
+
 See synctex_parser_readme.txt for more details
 
 License:
@@ -44,7 +46,11 @@ authorization from the copyright holder.
 
 #	define synctex_bool_t int
 #	define synctex_YES -1
+#	define synctex_ADD_QUOTES -1
+#	define synctex_COMPRESS -1
 #	define synctex_NO 0
+#	define synctex_DONT_ADD_QUOTES 0
+#	define synctex_DONT_COMPRESS 0
 
 #ifndef __SYNCTEX_PARSER_UTILS__
 #   define __SYNCTEX_PARSER_UTILS__
@@ -60,7 +66,13 @@ extern "C" {
 #	else
 #		define SYNCTEX_IS_PATH_SEPARATOR(c) ('/' == c)
 #	endif
-
+    
+#	if _WIN32
+#		define SYNCTEX_IS_DOT(c) ('.' == c)
+#	else
+#		define SYNCTEX_IS_DOT(c) ('.' == c)
+#	endif
+    
 /*  This custom malloc functions initializes to 0 the newly allocated memory.
  *  There is no bzero function on windows. */
 void *_synctex_malloc(size_t size);
@@ -103,19 +115,25 @@ int _synctex_copy_with_quoting_last_path_component(const char * src, char ** des
 extern const char * synctex_suffix;
 extern const char * synctex_suffix_gz;
 
+typedef unsigned int synctex_io_mode_t;
+
 typedef enum {
-	synctex_io_mode_read = 0,
-	synctex_io_mode_append = 2
-} synctex_io_mode_t;
+	synctex_io_append_mask = 1,
+    synctex_io_gz_mask = synctex_io_append_mask<<1
+} synctex_io_mode_masks_t;
 
 typedef enum {
 	synctex_compress_mode_none = 0,
 	synctex_compress_mode_gz = 1
 } synctex_compress_mode_t;
 
-int _synctex_get_name(const char * output, const char * build_directory, char ** synctex_name_ref, synctex_compress_mode_t * compress_mode_ref);
+int _synctex_get_name(const char * output, const char * build_directory, char ** synctex_name_ref, synctex_io_mode_t * io_mode_ref);
 
+/*  returns the correct mode required by fopen and gzopen from the given io_mode */
+const char * _synctex_get_io_mode_name(synctex_io_mode_t io_mode);
 
+const char * synctex_ignore_leading_dot_slash(const char * name);
+    
 #ifdef __cplusplus
 }
 #endif
diff --git a/cut-n-paste/synctex/synctex_parser_version.txt b/cut-n-paste/synctex/synctex_parser_version.txt
index b816207..03ff897 100644
--- a/cut-n-paste/synctex/synctex_parser_version.txt
+++ b/cut-n-paste/synctex/synctex_parser_version.txt
@@ -1 +1 @@
-1.11
\ No newline at end of file
+1.16
\ No newline at end of file



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]