~adamreichold/qpdfview/trunk

« back to all changes in this revision

Viewing changes to synctex/synctex_parser_readme.md

  • Committer: Adam Reichold
  • Date: 2022-07-23 15:52:13 UTC
  • Revision ID: adam.reichold@t-online.de-20220723155213-fxl4qnc2o1zj7ivc
Update vendored SyncTeX sources to version 1.21.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# __SyncTeX__
 
2
 
 
3
This file is part of the __SyncTeX__ package.
 
4
 
 
5
[//]: # (Version: 1.21)
 
6
[//]: # (Date: Sun Oct 15 15:09:55 UTC 2017)
 
7
 
 
8
## Important
 
9
 
 
10
* Changes in version `1.21`
 
11
 
 
12
        * Display query returns more results (as much as `1.18`)
 
13
        * Remove a `\` character from the name of 2 test files.
 
14
        * Change variable name `class` to `class_` because the former is a reserved keyword in C++.
 
15
        * Adding a more portable unused variable management.
 
16
        * Various cosmetic changes in the source code, including explicit declaration of `void` in forward function declaration.
 
17
        
 
18
 
 
19
* Changes in version `1.20`
 
20
 
 
21
        One bug fixed in some initialization and different syntax to make some compilers happy.
 
22
 
 
23
* Changes in version `1.19`
 
24
 
 
25
        A long standing bug affecting only pdftex has been fixed by adding support to pdf forms. As a side effect, the synchronization algorithm gains in accuracy for all the engines, especially from pdf to source. Of course, there is a small cost in both memory footprint and computational time, but none is noticeable.
 
26
        
 
27
        Some technical changes in the API.
 
28
        * more consistent type naming convention
 
29
                * `_s` suffix for struct's
 
30
                * `_p` suffix for pointers
 
31
                * `_t` suffix for standard types
 
32
                * `_f` suffix for functions...
 
33
                
 
34
                thus `synctex_node_t` has become `synctex_node_p`.
 
35
                
 
36
        * supplemental argument in `synctex_display_query`. Set `page_hint` to the currently displayed pdf page number (0 based). If this info is not available, set `page_hint` to 0, it corresponds to the old behaviour.
 
37
        * rename `synctex_next_result` to `synctex_scanner_next_result`
 
38
        * additional `synctex_parser_private.h` header where 
 
39
        more API are exposed. For an advanced usage only (eg parallel synchronizations).
 
40
        * `SYNCTEX_NO_UPDATER` preprocessor macro to deactivate some code useless to frontends.
 
41
 
 
42
## What is it ?
 
43
 
 
44
The *Synchronization TeXnology* named __SyncTeX__ is a new feature
 
45
of recent __TeX__ engines designed by Jérôme Laurens.
 
46
It allows to synchronize between input and output, which means to
 
47
navigate from the source document to the typeset material and vice versa.
 
48
Browse the source code for more information.
 
49
 
 
50
## Contents
 
51
This package is mainly for developers, it contains the following files:
 
52
 
 
53
* `synctex_parser_readme.md` (this file)
 
54
* `synctex_parser_version.txt`
 
55
* `synctex_parser_utils.c`
 
56
* `synctex_parser_utils.h`
 
57
* `synctex_parser_local.h`
 
58
* `synctex_parser.h`
 
59
* `synctex_parser_advanced.h`
 
60
* `synctex_parser.c`
 
61
 
 
62
The file you are reading contains more informations about the __SyncTeX__ parser history.
 
63
 
 
64
## Source
 
65
 
 
66
All stable sources are available from [TeXLive repository](http://www.tug.org/svn/texlive/trunk/Build/source/texk/web2c/synctexdir/).
 
67
 
 
68
Latest development sources are available from GitHub.
 
69
 
 
70
Please notice that due to the complexity of the TeXLive TeX distribution, there might be some delay before synchronization occurs between various repositories.
 
71
 
 
72
## Usage
 
73
 
 
74
In order to support __SyncTeX__ in a viewer, it is sufficient to include
 
75
in the source the files `synctex_parser.c` and `synctex_parser_utils.c`.
 
76
The synctex parser usage is described in `synctex_parser.h` header file.
 
77
 
 
78
More advanced usage is found in `synctex_parser_advanced.h`
 
79
 
 
80
The other files are used by tex engines or by the synctex command line utility:
 
81
 
 
82
```
 
83
ChangeLog
 
84
README.txt
 
85
am
 
86
man1
 
87
man5
 
88
synctex-common.h
 
89
synctex-convert.sh
 
90
synctex-e-mem.ch0
 
91
synctex-e-mem.ch1
 
92
synctex-e-rec.ch0
 
93
synctex-e-rec.ch1
 
94
synctex-etex.h
 
95
synctex-mem.ch0
 
96
synctex-mem.ch1
 
97
synctex-mem.ch2
 
98
synctex-pdf-rec.ch2
 
99
synctex-pdftex.h
 
100
synctex-rec.ch0
 
101
synctex-rec.ch1
 
102
synctex-rec.ch2
 
103
synctex-tex.h
 
104
synctex-xe-mem.ch2
 
105
synctex-xe-rec.ch2
 
106
synctex-xe-rec.ch3
 
107
synctex-xetex.h
 
108
synctex.c
 
109
synctex.defines
 
110
synctex.h
 
111
synctex_main.c
 
112
tests
 
113
...
 
114
```
 
115
 
 
116
## Version:
 
117
 
 
118
This is version 1, which refers to the synctex output file format.
 
119
 
 
120
The files are identified by a build number.
 
121
In order to help developers to automatically manage the version and build numbers
 
122
and download the parser only when necessary, the `synctex_parser_version.txt`
 
123
is an ASCII text file just containing the current version and build numbers eg `1.19`.
 
124
 
 
125
## History:
 
126
 
 
127
* 1.1: Thu Jul 17 09:28:13 UTC 2008
 
128
        - First official version available in TeXLive 2008 DVD.
 
129
  Unfortunately, the backwards synchronization is not working properly mainly for ConTeXt users, see below.
 
130
* 1.2: Tue Sep  2 10:28:32 UTC 2008
 
131
        - Correction for ConTeXt support in the edit query.
 
132
  The previous method was assuming that TeX boxes do not overlap,
 
133
  which is reasonable for LaTeX but not for ConTeXt.
 
134
  This assumption is no longer considered.
 
135
* 1.3: Fri Sep  5 09:39:57 UTC 2008
 
136
        - Local variable "read" renamed to "already_read" to avoid conflicts.
 
137
        - "inline" compiler directive renamed to "SYNCTEX_INLINE" for code support and maintenance
 
138
        - _synctex_error cannot be inlined due to variable arguments (thanks Christiaan Hofman)
 
139
        - Correction in the display query, extra boundary nodes are used for a more precise forwards synchronization
 
140
* 1.4: Fri Sep 12 08:12:34 UTC 2008
 
141
        - For an unknown reason, the previous version was not the real 1.3 (as used in iTeXMac2 build 747).
 
142
  As a consequence, a crash was observed.
 
143
        - Some typos are fixed.
 
144
* 1.6: Mon Nov  3 20:20:02 UTC 2008
 
145
        - The bug that prevented synchronization with compressed files on windows has been fixed.
 
146
        - New interface to allow system specific customization.
 
147
        - Note that some APIs have changed.
 
148
* 1.8: Mer  8 jul 2009 11:32:38 UTC
 
149
Note that version 1.7 was delivered privately.
 
150
        - bug fix: synctex was causing a memory leak in pdftex and xetex, thus some processing speed degradation
 
151
        - bug fix: the synctex command line tool was broken when updating a .synctex file
 
152
        - enhancement: better accuracy of the synchronization process
 
153
        - enhancement: the pdf output file and the associated .synctex file no longer need to live in the same directory.
 
154
               The new -d option of the synctex command line tool manages this situation.
 
155
               This is handy when using something like tex -output-directory=DIR ...
 
156
* 1.9: Wed Nov  4 11:52:35 UTC 2009
 
157
        - Various typo fixed
 
158
        - OutputDebugString replaced by OutputDebugStringA to deliberately disable unicode preprocessing
 
159
        - New conditional created because OutputDebugStringA is only available since Windows 2K professional
 
160
* 1.10: Sun Jan  10 10:12:32 UTC 2010 
 
161
        - Bug fix in synctex_parser.c to solve a synchronization problem with amsmath's gather environment.
 
162
  Concerns the synctex tool.
 
163
* 1.11: Sun Jan  17 09:12:31 UTC 2010
 
164
        - Bug fix in synctex_parser.c, function synctex_node_box_visible_v: 'x' replaced by 'y'.
 
165
  Only 3rd party tools are concerned.
 
166
* 1.12: Mon Jul 19 21:52:10 UTC 2010
 
167
        - Bug fix in synctex_parser.c, function __synctex_open: the io_mode was modified even in case of a non zero return,
 
168
causing a void .synctex.gz file to be created even if it was not expected. Reported by Marek Kasik concerning a bug on evince.
 
169
* 1.13: Fri Mar 11 07:39:12 UTC 2011
 
170
        - Bug fix in synctex_parser.c, better synchronization as suggested by Jan Sundermeyer (near line 3388).
 
171
        - Stronger code design in synctex_parser_utils.c, function _synctex_get_name (really neutral behavior).
 
172
  Only 3rd party tools are concerned.
 
173
* 1.14: Fri Apr 15 19:10:57 UTC 2011
 
174
        - taking output_directory into account
 
175
        - Replaced FOPEN_WBIN_MODE by FOPEN_W_MODE when opening the text version of the .synctex file.
 
176
        - Merging with LuaTeX's version of synctex.c
 
177
* 1.15: Fri Jun 10 14:10:17 UTC 2011
 
178
This concerns the synctex command line tool and 3rd party developers.
 
179
TeX and friends are not concerned by these changes.
 
180
        - Bug fixed in _synctex_get_io_mode_name, sometimes the wrong mode was returned
 
181
        - Support for LuaTeX convention of './' file prefixing
 
182
* 1.16: Tue Jun 14 08:23:30 UTC 2011
 
183
This concerns the synctex command line tool and 3rd party developers.
 
184
TeX and friends are not concerned by these changes.
 
185
        - Better forward search (thanks Jose Alliste)
 
186
        - Support for LuaTeX convention of './' file prefixing now for everyone, not only for Windows
 
187
* 1.17: Fri Oct 14 08:15:16 UTC 2011
 
188
This concerns the synctex command line tool and 3rd party developers.
 
189
TeX and friends are not concerned by these changes.
 
190
        - synctex_parser.c: cosmetic changes to enhance code readability 
 
191
        - Better forward synchronization.
 
192
  The problem occurs for example with LaTeX \item command.
 
193
  The fact is that this command creates nodes at parse time but these nodes are used only
 
194
  after the text material of the \item is displayed on the page. The consequence is that sometimes,
 
195
  forward synchronization spots an irrelevant point from the point of view of the editing process.
 
196
  This was due to some very basic filtering policy, where a somehow arbitrary choice was made when
 
197
  many different possibilities where offered for synchronisation.
 
198
  Now, forward synchronization prefers nodes inside an hbox with as many acceptable spots as possible.
 
199
  This is achieved with the notion of mean line and node weight.
 
200
        - Adding support for the new file naming convention with './'
 
201
            - function `synctex_ignore_leading_dot_slash_in_path replaces` `synctex_ignore_leading_dot_slash`
 
202
            - function `_synctex_is_equivalent_file_name` is more permissive
 
203
  Previously, the function synctex_scanner_get_tag would give an answer only when
 
204
  the given file name was EXACTLY one of the file names listed in the synctex file.
 
205
  The we added some changes accepting for example 'foo.tex' instead of './foo.tex'.
 
206
  Now we have an even looser policy for dealing with file names.
 
207
  If the given file name does not match exactly one the file names of the synctex file,
 
208
  then we try to match the base names. If there is only one match of the base names,
 
209
  then it is taken as a match for the whole names.
 
210
  The base name is defined as following:
 
211
  
 
212
      `./foo => foo
 
213
      /my///.////foo => foo
 
214
      /foo => /foo
 
215
      /my//.foo => /my//.foo`
 
216
      
 
217
* 1.17: Tue Mar 13 10:10:03 UTC 2012
 
218
        - minor changes, no version changes
 
219
        - syntax man pages are fixed as suggested by M. Shimata
 
220
        see mail to tex-live@tug.org titled "syntax.5 has many warnings from groff" and "syntax.1 use invalid macro for mdoc"
 
221
        - 1.17: Tue Jan 14 09:55:00 UTC 2014, fixed a segfault, patch from Sebastian Ramacher
 
222
        - 1.17: Mon Aug 04, fixed a memory leak
 
223
* 1.18: Thu Jun 25 11:36:05 UTC 2015
 
224
        - nested sheets now fully supported (does it make sense in TeX)
 
225
        - cosmetic changes: uniform indentation
 
226
        - suppression of warnings, mainly long/int ones. In short, zlib likes ints when size_t likes longs.
 
227
        - CLI synctex tool can build out of TeXLive (modulo appropriate options passed to the compiler)
 
228
* 1.19: Mon Jul  3 20:03:56 UTC 2017
 
229
        - the nested sheets patch was not a good solution.
 
230
  It has been moved from the parser to the engine.
 
231
  See the `synctex.c` source file for detailed explanations.
 
232
        - there is a new synctex format specification.
 
233
  We can see that a `.synctex` file can contain many times
 
234
  the same vertical position because many objects belong
 
235
  to the same line. When the options read `-synctex=±2` or more,
 
236
  a very basic compression algorithm is used:
 
237
  if synctex is about to write the same number then it writes
 
238
  an `=` sign instead. This saves approximately 10% of the
 
239
  synctex output file, either compressed or not.
 
240
  The new synctex parser has been updated accordingly.
 
241
  Actual tex frontend won't see any difference with the
 
242
  TeX engines that include this new feature.
 
243
  Frontends with the new parser won't see any difference
 
244
  with the older TeX engines.
 
245
  Frontends with the new parser will only see a difference
 
246
  with new TeX engines if `-synctex=±2` or more is used.
 
247
 
 
248
## Acknowledgments:
 
249
 
 
250
The author received useful remarks from the __pdfTeX__ developers, especially Hahn The Thanh,
 
251
and significant help from __XeTeX__ developer Jonathan Kew.
 
252
 
 
253
## Nota Bene:
 
254
 
 
255
If you include or use a significant part of the __SyncTeX__ package into a software,
 
256
I would appreciate to be listed as contributor and see __SyncTeX__" highlighted.
 
257
 
 
258
Copyright (c) 2008-2017 jerome DOT laurens AT u-bourgogne DOT fr
 
259