bug-texinfo
[Top][All Lists]
Advanced

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

Re: [bug #43122] texi2dvi does not compile enough times to get toc


From: Vincent Belaïche
Subject: Re: [bug #43122] texi2dvi does not compile enough times to get toc
Date: Wed, 02 Sep 2015 08:45:56 +0200

Salut Gavin,

My answers inserted below...

Le 30/08/2015 23:46, Gavin Smith a écrit :
> On 29 August 2015 at 12:40, Vincent Belaïche <address@hidden> wrote:
>> Some proposal below...
>>
>> Le 22/08/2015 00:26, Karl Berry a écrit :
>>> At this point, I guess I have to conclude it is better to use -recorder
>>> if it is available.
>>>
>>> k
>>
>>
>> Hello,
>>
>> Attached is a patch that solves the problem for me. It is a bit long,
>> because I did it as backward compatible as possible.
>>
>> By setting environnement variable TEXI2DVI_USE_RECORDER you can suppress
>> the additional prior testing and make this novel texi2dvi almost as fast as 
>> it
>> used to be.
>>
>> VBR,
>>         Vincent Belaïche
>>
>>
>>
>
> Here are notes I made while looking at this:
>
> I see no need for a command-line flag.
>

It allows you to test whether the \openout is still working. Otherwise
you may wind up with dead parts of code that are never (can't be ever)
tested. But anyway, I did not see any test bench for texi2dvi...


> "pushd" and "popd" are bash extensions, use cd instead.
>

Done... MSYS sh did not bark at that.

> Eliminate duplication between the two generated_files_get functions.
>

Excellent comment: that is something I had also thought of after sending
my previous email, that can be definitely further factorized.

Done.

> Remove unnecessary semi-colons.
>

Done.

> Can someone tell me why there is all this stuff in texi2dvi for
> processing LaTeX files?
>

I don't know, Karl surely does.  I also noticed that not only latex
stuff is there but also hevea (a terrifically fast HTML converted, but
not all packaged are supported).

> Possible problem: a *.fls file meets the *.??s glob pattern for sorted
> index files. Probably not a problem.
>

I am not so sure, I tried to compile the texinfo.texi manual and I get
some texindex error (see at the end of this email).

I am not sure what would happen if the user does a custom index...

> Two-space indents.
>

Sorry, four spaces were the default with Emacs. I have added some Emacs
cookie at the end of the texi2dvi file to configure indent consistently
with the existing code. I hope that no one minds about that, otherwise
it is not a problem to do the same configuration via an sh-mode hook
function in my init file.

I also noticed that you have one space between function names and `()',
I fixed that for new functions.

> Space after \openout in regexp. Check for single quote after filename.
> Remove $ anchor from end of regexp. Format for openout lines must
> differ between web2c and MikTeX.

MikTeX does not have any openout lines, so I wrote the regexp w/o any
way for testing. Which regexp are you pointing at, that of the check
function ?

>
> Change yesmaybe to nomaybe as per suggestion.

Done.

> Remove env var from help message - there should be no need for the
> user to think about this.
>

I *DON'T* agree, the user should be left the opportunity to remove useless
disk access if he/she is concerned about the environment --- or if
he/she have a very slow computer.

Anyway, let us give Karl the final word about that...


> Move setting of catcode_special variable, to just before use of
> make_tex_cmd. But there's a -~ option, so check it hasn't been set.
>

Done, good comment. I had not noticed the -~ option.

> Renaming of functions and comments - matter of taste.
>

Please be more specific. I am not a native English speaker (are you ?),
so no surprise that the wording needs some revision. I tried to make
some more comments.

> We'll also need a ChangeLog entry.
>

Done, I also added something into the manual for all the environment
variables influencing texi2dvi (not only the new one).

Please note that I removed the trailing blanks in the ChangeLog.

For the manual, probably there should be some forward reference from
node `Format with texi2dvi' to node `Other Customization Variables', as
the latter is below texi2any.

> Here's the current state. It would benefit from more testing and
> review. I'l have another look at it in the next couple of days.

I definitely agree that more testing is needed. Some test bench with
something like

rm -fr test.log
test1_options=-u no --tidy
test2_options=--tidy
test3_options=--tidy
for test in test1 test2 test3; do
  if texi2pdf ${${test}_options} $test.texi; then
    pdftotext $test.pdf
    if diff -q $test.txt ref/$test.txt; then
      echo "Failed diff to ref: $test" >> test.log;
    fi
  else
      echo "Failed compilation: $test" >> test.log;
  fi
done


FYI, there is one manual which I cannot compile : texinfo manual, in the
trunk/doc directory, I get the following:

========================================================================================================
$ texi2pdf --tidy -V texinfo.texi
/local/bin/texi2dvi: Processing texinfo.texi ...
/local/bin/texi2dvi: Checking TeX recorder support...
/local/bin/texi2dvi: /local/bin/texi2dvi: running pdfetex -recorder '\input' 
openout.tex ...
/local/bin/texi2dvi: Checking TeX recorder support... yes
/local/bin/texi2dvi: 
BIBINPUTS='.:/c/Programmes/installation/texinfo-install/trunk/doc:/c/Programmes/installation/texinfo-install/trunk/doc/.:'
/local/bin/texi2dvi: 
BSTINPUTS='.:/c/Programmes/installation/texinfo-install/trunk/doc:/c/Programmes/installation/texinfo-install/trunk/doc/.:'
/local/bin/texi2dvi: 
DVIPSHEADERS='.:/c/Programmes/installation/texinfo-install/trunk/doc:/c/Programmes/installation/texinfo-install/trunk/doc/.:'
/local/bin/texi2dvi: 
INDEXSTYLE='.:/c/Programmes/installation/texinfo-install/trunk/doc:/c/Programmes/installation/texinfo-install/trunk/doc/.:'
/local/bin/texi2dvi: 
MFINPUTS='.:/c/Programmes/installation/texinfo-install/trunk/doc:/c/Programmes/installation/texinfo-install/trunk/doc/.:'
/local/bin/texi2dvi: 
MPINPUTS='.:/c/Programmes/installation/texinfo-install/trunk/doc:/c/Programmes/installation/texinfo-install/trunk/doc/.:'
/local/bin/texi2dvi: 
TEXINPUTS='.:/c/Programmes/installation/texinfo-install/trunk/doc:/c/Programmes/installation/texinfo-install/trunk/doc/.:'
/local/bin/texi2dvi: 
TFMFONTS='.:/c/Programmes/installation/texinfo-install/trunk/doc:/c/Programmes/installation/texinfo-install/trunk/doc/.:'
/local/bin/texi2dvi: texinfo.tex preloaded as `', version is `20150803' ...
/local/bin/texi2dvi: cd 
/c/Programmes/installation/texinfo-install/trunk/doc/texinfo.t2d/pdf/build
/local/bin/texi2dvi: Cycle 1 for ./texinfo.texi
/local/bin/texi2dvi: /local/bin/texi2dvi: Running pdfetex -recorder 
'\catcode126=12 \def\normaltilde{~}\catcode126=13 \let~\normaltilde ' '\input' 
'/c/Programmes/installation/texinfo-install/trunk/doc/./texinfo.texi' ...
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (MiKTeX 2.9 64-bit)
entering extended mode
(c:/Programmes/installation/texinfo-install/trunk/doc/texinfo.texi
("C:\Programmes\MiKTeX 2.9\tex\texinfo\base\texinfo.tex"
Loading texinfo [version 2015-08-03.11]: pdf, fonts, markup, glyphs,
page headings, tables, conditionals, indexing, sectioning, toc, environments,
defuns, macros, cross references, insertions,
("C:\Programmes\MiKTeX 2.9\tex\generic\epsf\epsf.tex"
This is `epsf.tex' v2.7.4 <14 February 2011>
) localization, formatting, and turning on texinfo input format.)
(c:\Programmes\installation\texinfo-install\trunk\doc\version.texi) [1{C:/Users
/Vincent/AppData/Local/MiKTeX/2.9/pdftex/config/pdftex.map}] [2] [3] [4]
[-1] [-2] (Texinfo Copying Conditions) [1]
Cross reference values unknown; you must run TeX again. Chapter 1 [2] [3]
[4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] Chapter 2 [17]
[18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32]
[33] Chapter 3 [34] [35] [36] [37] [38] [39] [40] Chapter 4 [41] [42] [43]
[44] [45] [46] [47] [48] Chapter 5 [49] [50] [51] [52] Chapter 6 [53] [54]
[55] [56] [57] [58] [59] [60] [61] [62] [63] [64] Chapter 7 [65] [66] [67]
[68] [69] [70] [71] [72] [73] [74] [75] Chapter 8 [76] [77] [78] [79] [80]
[81] [82] [83] [84] [85] Chapter 9 [86] [87] [88] [89] [90] [91] [92] [93]
Chapter 10 [94] [95] [96] [97] [98] [99] [100] Chapter 11 [101] [102] [103]
[104] [105] [106] Chapter 12 [107] [108] [109] [110] [111] [112] [113] [114]
[115] [116] [117] [118] [119] [120] [121] [122] Chapter 13 [123] [124] [125]
[126] Chapter 14 [127] [128] [129] [130] [131] [132] [133] [134] [135] [136]
[137] [138] [139] Chapter 15 [140] [141] [142] Chapter 16 [143] [144] [145]
[146] [147] [148] [149] [150] [151] [152] Chapter 17 [153] [154] [155] [156]
[157] [158] [159] [160] [161] Chapter 18 [162] [163] [164] Chapter 19 [165]
[166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176] Chapter 20
[177] [178] [179] [180] [181] [182] [183] [184] [185] [186] [187] [188]
[189] [190]
Underfull \hbox (badness 10000) in paragraph at lines 17339--17342
 @texttt @set*contentsaftertitlepage[] @textrm is set (see address@hidden 
address@hidden
rm address@hidden i$ @textrm [Cont-ents],
[191] [192] [193] [194] [195] [196] [197] [198] [199] [200] [201] [202]
Chapter 21 [203] [204] [205] [206] [207] [208] [209] [210] [211] [212]
Chapter 22 [213] [214] [215] [216] [217] [218] [219] [220] [221] [222] [223]
Appendix A [224] [225] [226] [227] [228] [229] [230] [231] [232] [233] [234]
[235] [236] [237] [238] [239] [240] [241] [242] [243] [244] [245] [246]
Appendix B [247] Appendix C [248] [249] [250] [251] [252] Appendix D [253]
[254] [255] [256] [257] [258] Appendix E [259] [260] [261] [262] [263] [264]
[265] [266] [267] [268] [269] [270] Appendix F [271] [272] [273] [274] [275]
Appendix G [276] [277] [278] [279] [280] [281] [282] Appendix H [283] [284]
[285] [286] [287] [288] Appendix I [289]
(c:\Programmes\installation\texinfo-install\trunk\doc\fdl.texi [290] [291]
[292] [293] [294] [295] [296]) (Command and Variable Index) [297]
(General Index) [298] [299] )
(see the transcript file for additional information) <C:\Users\Vincent\AppData\
Local\MiKTeX\2.9\fonts\pk\ljfour\jknappen\ec\dpi603\ecrm1095.pk> <C:\Users\Vinc
ent\AppData\Local\MiKTeX\2.9\fonts\pk\ljfour\jknappen\ec\dpi650\ecbx1200.pk> <C
:\Users\Vincent\AppData\Local\MiKTeX\2.9\fonts\pk\ljfour\jknappen\ec\dpi583\ecb
x1440.pk><C:/Programmes/MiKTeX 2.9/fonts/type1/public/amsfonts/cm/cmb10.pfb><C:
/Programmes/MiKTeX 2.9/fonts/type1/public/amsfonts/cm/cmbx12.pfb><C:/Programmes
/MiKTeX 2.9/fonts/type1/public/amsfonts/cm/cmbxsl10.pfb><C:/Programmes/MiKTeX 2
.9/fonts/type1/public/amsfonts/cm/cmbxti10.pfb><C:/Programmes/MiKTeX 2.9/fonts/
type1/public/amsfonts/cm/cmcsc10.pfb><C:/Programmes/MiKTeX 2.9/fonts/type1/publ
ic/amsfonts/cm/cmex10.pfb><C:/Programmes/MiKTeX 2.9/fonts/type1/public/amsfonts
/cm/cmmi10.pfb><C:/Programmes/MiKTeX 2.9/fonts/type1/public/amsfonts/cm/cmmi12.
pfb><C:/Programmes/MiKTeX 2.9/fonts/type1/public/amsfonts/cm/cmmi7.pfb><C:/Prog
rammes/MiKTeX 2.9/fonts/type1/public/amsfonts/cm/cmr10.pfb><C:/Programmes/MiKTe
X 2.9/fonts/type1/public/amsfonts/cm/cmr12.pfb><C:/Programmes/MiKTeX 2.9/fonts/
type1/public/amsfonts/cm/cmr7.pfb><C:/Programmes/MiKTeX 2.9/fonts/type1/public/
amsfonts/cm/cmr8.pfb><C:/Programmes/MiKTeX 2.9/fonts/type1/public/amsfonts/cm/c
mr9.pfb><C:/Programmes/MiKTeX 2.9/fonts/type1/public/amsfonts/cm/cmsl10.pfb><C:
/Programmes/MiKTeX 2.9/fonts/type1/public/amsfonts/cm/cmsl9.pfb><C:/Programmes/
MiKTeX 2.9/fonts/type1/public/amsfonts/cm/cmsltt10.pfb><C:/Programmes/MiKTeX 2.
9/fonts/type1/public/amsfonts/cm/cmss10.pfb><C:/Programmes/MiKTeX 2.9/fonts/typ
e1/public/amsfonts/cm/cmsy10.pfb><C:/Programmes/MiKTeX 2.9/fonts/type1/public/a
msfonts/cm/cmsy7.pfb><C:/Programmes/MiKTeX 2.9/fonts/type1/public/amsfonts/cm/c
msy9.pfb><C:/Programmes/MiKTeX 2.9/fonts/type1/public/amsfonts/cm/cmti10.pfb><C
:/Programmes/MiKTeX 2.9/fonts/type1/public/amsfonts/cm/cmti9.pfb><C:/Programmes
/MiKTeX 2.9/fonts/type1/public/amsfonts/cm/cmtt10.pfb><C:/Programmes/MiKTeX 2.9
/fonts/type1/public/amsfonts/cm/cmtt12.pfb><C:/Programmes/MiKTeX 2.9/fonts/type
1/public/amsfonts/cm/cmtt9.pfb><C:/Programmes/MiKTeX 2.9/fonts/type1/public/eur
osym/feybr10.pfb><C:/Programmes/MiKTeX 2.9/fonts/type1/public/eurosym/feymr10.p
fb><C:/Programmes/MiKTeX 2.9/fonts/type1/public/amsfonts/latxfont/lcircle1.pfb>

Output written on texinfo.pdf (305 pages, 1569219 bytes).
Transcript written on texinfo.log.
/local/bin/texi2dvi: Moving texinfo.pdf to 
/c/Programmes/installation/texinfo-install/trunk/doc/texinfo.pdf
/local/bin/texi2dvi: Original xref files =
/local/bin/texi2dvi: New xref files      = texinfo.aux
texinfo.cp
texinfo.fn
texinfo.toc
/local/bin/texi2dvi: Cycle 2 for ./texinfo.texi
/local/bin/texi2dvi: Backing up xref files: texinfo.aux
texinfo.cp
texinfo.fn
texinfo.toc
/local/bin/texi2dvi: Running texindex texinfo.cp texinfo.fn
texindex: No page number in \entry{\{ (literal \{)}{108}{\code {{\tt \char 123} 
\r {(literal \samp {{\tt \char 123}})}}}
/local/bin/texi2dvi: texindex failed
========================================================================================================

It seems that this is another bug predating the -recorder support
change, I have not tried with reverting texi2dvi to repo latest.

  Vincent.



---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel 
antivirus Avast.
http://www.avast.com
Index: ChangeLog
===================================================================
--- ChangeLog   (revision 6531)
+++ ChangeLog   (working copy)
@@ -1,3 +1,38 @@
+2015-09-02  Vincent Belaïche  <address@hidden>
+
+       * ChangeLog: remove line trailing blanks.
+
+       * doc/texinfo.texi (Other Customization Variables): Add
+       documentation for texi2dvi configuration env variables:
+       TEXI2DVI_BUILD_DIRECTORY, TEXI2DVI_BUILD_MODE, and
+       TEXI2DVI_USE_RECORDER.
+
+       * util/texi2dvi (catcode_special): Set to false at the script
+       outset, because false is needed by the -record/\openout testing,
+       then it is set again to maybe original value by the
+       resolve_use_recorder functon.
+       (usage): Add documentation for -u & --use-recorder option, and for
+       TEXI2DVI_USE_RECORDER env variable.
+       (generated_files_raw_get_from_log): new function.
+       (generated_files_raw_get_from_fls): new function.
+       (generated_files_get): Generate files based on log
+       file or fls file whichever applicable according to variable
+       generated_files_raw_get.
+       (make_tex_cmd): new function taking on some preamble part of
+       run_tex_cmd, in order to reuse it in functions
+       check_recorder_support & check_openout_in_log_support.
+       (make_tex_cmd): compared to original code, may insert -recorder
+       option when applicable, based on recorder_option_maybe variable.
+       (run_tex): Delegate to make_tex_cmd making of the tex command.
+       (make_openout_test): new function.
+       (check_recorder_support): new function.
+       (check_openout_in_log_support): new function.
+       (set_xref_detection_from_fls): new function.
+       (set_xref_detection_from_log): new function.
+       (resolve_use_recorder): new function.
+       (Main part/argmuent processing): process -u & --use-recorder argument 
options.
+       (Main part/preamble to action): call resolve_use_recorder fn.
+
 2015-08-15  Gavin Smith  <address@hidden>
 
        * autogen.sh: Run libtoolize before autoreconf.
@@ -5,15 +40,15 @@
 2015-08-14  Gavin Smith  <address@hidden>
 
        * makeinfo/README,
-       * texi2html/README: Refer to directory containing texi2any 
+       * texi2html/README: Refer to directory containing texi2any
        implementation.
 
 2015-08-14  Gavin Smith  <address@hidden>
 
-       * info/info-utils.c (printed_representation): Remove code 
-       looking at value of ISO_Latin_p, which doesn't do anything.  (It 
+       * info/info-utils.c (printed_representation): Remove code
+       looking at value of ISO_Latin_p, which doesn't do anything.  (It
        hasn't done much since the display routines became locale-aware.)
-       * info/terminal.c (ISO_Latin_p): Move declaration of variable to 
+       * info/terminal.c (ISO_Latin_p): Move declaration of variable to
        this file.
        * info/info-stnd.texi (Variables) <ISO-Latin>: Update.
 
@@ -20,21 +55,21 @@
 2015-08-14  Gavin Smith  <address@hidden>
 
        * doc/texinfo.texi (Texinfo Mode): Move to an appendix.
-       (Command Contexts): Make a top-level appendix.  Remove some 
+       (Command Contexts): Make a top-level appendix.  Remove some
        unnecessary words.
-       (Command Syntax, Formatting Commands): Merge.  Distinguish 
-       commands taking an argument on a line from commands starting a 
-       block.  Also mention that there other exceptions than @refill, 
+       (Command Syntax, Formatting Commands): Merge.  Distinguish
+       commands taking an argument on a line from commands starting a
+       block.  Also mention that there other exceptions than @refill,
        like @tab.
 
 2015-08-13  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi (@ftable @vtable): Mention that @itemx as 
+       * doc/texinfo.texi (@ftable @vtable): Mention that @itemx as
        well as @item creates an index entry.
 
 2015-08-13  Gavin Smith  <address@hidden>
 
-       * doc/info-stnd.texi (Variables): Replace @table with @vtable 
+       * doc/info-stnd.texi (Variables): Replace @table with @vtable
        and remove @vindex lines.
 
 2015-08-13  Gavin Smith  <address@hidden>
@@ -44,27 +79,27 @@
 2015-08-13  Gavin Smith  <address@hidden>
 
        * tp/Texinfo/Convert/XSParagraph/XSParagraph.xs,
-       * tp/Texinfo/Convert/XSParagraph/xspara.c: Update some comments 
+       * tp/Texinfo/Convert/XSParagraph/xspara.c: Update some comments
        and remove some commented-out code.
 
 2015-08-13  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi (Info Format Specification): Uncomment 
-       material on node quoting, and add advice not to use it until 
+       * doc/texinfo.texi (Info Format Specification): Uncomment
+       material on node quoting, and add advice not to use it until
        it's more widely supported.
 
 2015-08-13  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Common.pm (@variable_string_settables): Add 
+       * tp/Texinfo/Common.pm (@variable_string_settables): Add
        'INFO_SPECIAL_CHARS_QUOTE'.
-       * tp/Texinfo/Convert/Info.pm (_node) <INFO_SPECIAL_CHARS_QUOTE>: 
+       * tp/Texinfo/Convert/Info.pm (_node) <INFO_SPECIAL_CHARS_QUOTE>:
        Add quoting characters around node name if required.
        * tp/Texinfo/Convert/Plaintext.pm (_convert) <xrefs and menus>
-       <INFO_SPECIAL_CHARS_QUOTE>: Add quoting characters around 
-       segments of cross-references and menu entries if they contain 
+       <INFO_SPECIAL_CHARS_QUOTE>: Add quoting characters around
+       segments of cross-references and menu entries if they contain
        problematic characters.
-       <xrefs> <INFO_SPECIAL_CHARS_WARNING>: Warn if a node name 
-       contains a full stop even if it is not followed by whitespace, 
+       <xrefs> <INFO_SPECIAL_CHARS_WARNING>: Warn if a node name
+       contains a full stop even if it is not followed by whitespace,
        as this still breaks readers.
 
 2015-08-13  Gavin Smith  <address@hidden>
@@ -85,9 +120,9 @@
 
 2015-08-12  Gavin Smith  <address@hidden>
 
-       * info/indices.c (apropos_in_all_indices): Check if there is no 
-       filename, to avoid crash with "info -k" when there is a 
-       malformed dir entry.  Crash reported by Ivan Pacheco, and cause 
+       * info/indices.c (apropos_in_all_indices): Check if there is no
+       filename, to avoid crash with "info -k" when there is a
+       malformed dir entry.  Crash reported by Ivan Pacheco, and cause
        of crash discovered by Sergey Poznyakoff.
 
 2015-08-08  Gavin Smith  <address@hidden>
@@ -96,8 +131,8 @@
 
 2015-08-08  Gavin Smith  <address@hidden>
 
-       * info/session.c (_scroll_forward, _scroll_backward): Set point 
-       at beginning (resp. end) of node if going backwards (resp.  
+       * info/session.c (_scroll_forward, _scroll_backward): Set point
+       at beginning (resp. end) of node if going backwards (resp.
        forwards) failed.  If we did go backwards, put the cursor at the
        beginning of the window.  Change since Texinfo 5.2 reported by
        Benno Schulenberg.
@@ -104,14 +139,14 @@
 
 2015-08-08  Gavin Smith  <address@hidden>
 
-       * info/session.c (forward_move_node_structure): Don't go down a 
-       menu for a dir node.  (Broken since 2015-07-13 when N_IsInternal 
+       * info/session.c (forward_move_node_structure): Don't go down a
+       menu for a dir node.  (Broken since 2015-07-13 when N_IsInternal
        ceased to be set for dir nodes.)
-       
+
 2015-08-08  Gavin Smith  <address@hidden>
 
-       * doc/info-stnd.texi (Cursor Commands): Remove explanation for 
-       having cursor movement commands in Info.  Change "have" to "has" 
+       * doc/info-stnd.texi (Cursor Commands): Remove explanation for
+       having cursor movement commands in Info.  Change "have" to "has"
        and "identical to" to "the same as".
 
        * doc/info-stnd.texi (Searching Commands, Index Commands): Split
@@ -118,20 +153,20 @@
        Searching Commands in two.
 
        * doc/info-stnd.texi (Top): Re-jig.
-       (Stand-alone Info): Change "ASCII terminal" to "text terminal", 
+       (Stand-alone Info): Change "ASCII terminal" to "text terminal",
        to cover e.g. UTF-8 and ISO-8859-1.
 
-       * doc/info-stnd.texi (Search Commands): Move mention of 
-       'min-search-length' to end.  Remove repeated information about 
-       '}' and '{'.  Remove mention that default search string is 
-       displayed between '[' and ']'.  Move paragraph about incremental 
-       searching to be next to paragraph about non-incremental 
-       searching.  Move description of 'search-next' and 
-       'search-previous' commands earlier, and mention that regex use 
-       (or not) is also maintained.  Remove unnecessary mention that 
-       lines in the same node are not skipped.  Rely more on 
-       description for 'search-next', and mention that 
-       'search-previous' usually goes back to the same match after a 
+       * doc/info-stnd.texi (Search Commands): Move mention of
+       'min-search-length' to end.  Remove repeated information about
+       '}' and '{'.  Remove mention that default search string is
+       displayed between '[' and ']'.  Move paragraph about incremental
+       searching to be next to paragraph about non-incremental
+       searching.  Move description of 'search-next' and
+       'search-previous' commands earlier, and mention that regex use
+       (or not) is also maintained.  Remove unnecessary mention that
+       lines in the same node are not skipped.  Rely more on
+       description for 'search-next', and mention that
+       'search-previous' usually goes back to the same match after a
        'search-next'.
        (Index Commands) <i>: Remove mention of unreliable feature.
 
@@ -141,27 +176,27 @@
 
 2015-08-07  Gavin Smith  <address@hidden>
 
-       * info/variables.c (info_variables): Help string for 
+       * info/variables.c (info_variables): Help string for
        "follow-strategy".
 
 2015-08-06  Gavin Smith  <address@hidden>
 
-       * TODO: Remove @else, obsolete problem with scrolling to bottom 
-       of help, full text search and reference highlighting (both in 
-       progress, unnecessary customization of which key to report in 
+       * TODO: Remove @else, obsolete problem with scrolling to bottom
+       of help, full text search and reference highlighting (both in
+       progress, unnecessary customization of which key to report in
        help).  Add suggestion for another Info display mode.
 
 2015-08-06  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi (Fonts): Remove obsolete paragraph about 
+       * doc/texinfo.texi (Fonts): Remove obsolete paragraph about
        using @t in a node name.
 
 2015-08-05  Gavin Smith  <address@hidden>
 
-       * info/variables.c (info_variables): New user variable 
+       * info/variables.c (info_variables): New user variable
        "follow-strategy".
-       * info/nodes.c (info_get_node_with_defaults): If 
-       follow-strategy=remain (the default), try to remain within the 
+       * info/nodes.c (info_get_node_with_defaults): If
+       follow-strategy=remain (the default), try to remain within the
        same directory as the node we're coming from.
 
 2015-08-05  Gavin Smith  <address@hidden>
@@ -169,25 +204,25 @@
        * configure.ac,
        * tp/Texinfo/Convert/XSParagraph/configure.ac,
        * tp/Texinfo/Convert/XSParagraph/Makefile.am: Recognize
-       PERL_EXT_CFLAGS, PERL_EXT_CPPFLAGS, PERL_EXT_LDLAGS as user 
+       PERL_EXT_CFLAGS, PERL_EXT_CPPFLAGS, PERL_EXT_LDLAGS as user
        variables.
 
 2015-08-05  Gavin Smith  <address@hidden>
 
        * configure.ac,
-       * tp/Texinfo/Convert/XSParagraph/configure.ac: Add 
-       --enable-perl-xs option.  Record result via Autoconf output 
+       * tp/Texinfo/Convert/XSParagraph/configure.ac: Add
+       --enable-perl-xs option.  Record result via Autoconf output
        variable and Automake conditional.
        * tp/Makefile.am: Substitute result into texi2any.pl.
-       * tp/Makefile.am: If --disable-perl-xs was given, don't build in 
+       * tp/Makefile.am: If --disable-perl-xs was given, don't build in
        XSParagraph subdirectory
 
-       * tp/texi2any.pl: Substitute choice for --enable-perl-xs option, 
+       * tp/texi2any.pl: Substitute choice for --enable-perl-xs option,
        and propagate to Texinfo::Convert::XSParagraph::XSParagraph module.
-       * tp/Texinfo/Convert/XSParagraph/XSParagraph.pm: If 
-       --disable-perl-xs was given to configure, disable use of Perl XS 
+       * tp/Texinfo/Convert/XSParagraph/XSParagraph.pm: If
+       --disable-perl-xs was given to configure, disable use of Perl XS
        modules.
-       * README-hacking: Mention a case when you might want to run 
+       * README-hacking: Mention a case when you might want to run
        tp/texi2any.
 
        * NEWS: Update with some work in progress.
@@ -194,15 +229,15 @@
 
 2015-08-04  Gavin Smith  <address@hidden>
 
-       * info/session.c (BEFORE_MENUS): New symbol.  Use it instead of 
+       * info/session.c (BEFORE_MENUS): New symbol.  Use it instead of
        literal value.  Remove some commented-out code.
 
 2015-08-03  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi (Short Sample Texinfo File): Remove some 
+       * doc/texinfo.texi (Short Sample Texinfo File): Remove some
        unnecessary words.
        (Sample Texinfo Files): Reword slightly.
-       (Short Sample): Remove some unnecessary words and sentences, and 
+       (Short Sample): Remove some unnecessary words and sentences, and
        rearrange some paragraphs.
 
 2015-08-03  Gavin Smith  <address@hidden>
@@ -212,9 +247,9 @@
 2015-08-03  Gavin Smith  <address@hidden>
 
        * doc/texinfo.tex (\initialfonts): New macro.
-       (\initial): Split into \initial and \initialx.  Use 
-       \initialfonts in \initial, and use \egroup at the end of 
-       \initialx.  Rely on the use of \secfonts in \initialfonts 
+       (\initial): Split into \initial and \initialx.  Use
+       \initialfonts in \initial, and use \egroup at the end of
+       \initialx.  Rely on the use of \secfonts in \initialfonts
        instead of \let\tentt=\sectt etc.
        (\normalhyphen, \usemathbackslash): New control sequences.
        (\secrmnotbold): New font.
@@ -229,19 +264,19 @@
        (info_tree_search, info_tree_search_next, info_tree_search_prev): New
        user commmands (experimental).
 
-       * info/session.c (put_node_in_window, forget_node_fast) 
-       (wipe_seen_flags, info_set_node_of_window_fast) 
+       * info/session.c (put_node_in_window, forget_node_fast)
+       (wipe_seen_flags, info_set_node_of_window_fast)
        (tag_of_reference): New utility functions.
 
-       * info/nodes.c (find_node_from_tag): Preserve active_menu field 
+       * info/nodes.c (find_node_from_tag): Preserve active_menu field
        for nodes in window histories.
-       * info/infomap.c (default_emacs_like_info_keys): Add bindings 
+       * info/infomap.c (default_emacs_like_info_keys): Add bindings
        for new commands.
        * info/window.c (window_line_of_point),
-       * info/display.c (display_update_one_window): Calculate line 
+       * info/display.c (display_update_one_window): Calculate line
        starts if needed.
        * info/window.c (calculate_line_starts): No longer static.
-       * info/nodes.c (info_load_file): Store filename without file 
+       * info/nodes.c (info_load_file): Store filename without file
        extension.
        * info/window.h (WINDOW): Update a comment.
 
@@ -256,15 +291,15 @@
 
 2015-07-31  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/ModulePath.pm.in: New file, to add directories to 
+       * tp/Texinfo/ModulePath.pm.in: New file, to add directories to
        module search path.
        * configure.ac: Process it to create ModulePath.pm.
        * tp/Makefile.am: List ModulePath.pm.in and ModulePath.pm.
-       * tp/texi2any.pl (BEGIN): Use Texinfo::ModulePath module.  Don't 
-       look at file extension of invoked program to decide whether to 
-       use installed modules; instead, check whether strings like 
+       * tp/texi2any.pl (BEGIN): Use Texinfo::ModulePath module.  Don't
+       look at file extension of invoked program to decide whether to
+       use installed modules; instead, check whether strings like
        @these@ have been substituted.
-       * README-hacking: Update advice on running uninstalled texi2any 
+       * README-hacking: Update advice on running uninstalled texi2any
        scripts.
        * tp/paragraph.t (BEGIN): Use Texinfo::ModulePath.
        * tp/t/test_utils.t (BEGIN): Use Texinfo::ModulePath.
@@ -276,7 +311,7 @@
        * tp/t/paragraph.t: Uniformly refer to XSParagraph.pm
        as "Texinfo::Convert::XSParagraph::XSParagraph".
 
-       * tp/Texinfo/Convert/XSParagraph/Makefile.am: Install 
+       * tp/Texinfo/Convert/XSParagraph/Makefile.am: Install
        XSParagraph.pm under $(pkgdatadir)/Texinfo/Convert/XSParagraph.
 
        * tp/tests/htmlxref/Makefile.am,
@@ -287,30 +322,30 @@
        * tp/tests/run_parser_all.sh,
        * doc/Makefile.am,
        * man/Makefile.am:
-       Set AM_TESTS_ENVIRONMENT to pass 'top_srcdir', 'top_builddir' 
-       onto tests.  Don't specify location of directories containing 
+       Set AM_TESTS_ENVIRONMENT to pass 'top_srcdir', 'top_builddir'
+       onto tests.  Don't specify location of directories containing
        Perl modules with "-I" flags to Perl.
 
 2015-07-31  Gavin Smith  <address@hidden>
 
-       * NEWS: Mention improvements in speed and memory usage for Info.  
+       * NEWS: Mention improvements in speed and memory usage for Info.
        (Changes on 2015-07-31 and 2015-07-13.)
 
 2015-07-31  Gavin Smith  <address@hidden>
 
-       * info/nodes.c (info_node_of_tag, info_node_of_tag_ext): Rename 
-       and add an extra argument.  Call scan_node_contents 
+       * info/nodes.c (info_node_of_tag, info_node_of_tag_ext): Rename
+       and add an extra argument.  Call scan_node_contents
        conditionally.
        (info_node_of_tag, info_node_of_tag_fast): New functions.
-       * info/session.c (info_search_internal): Call 
+       * info/session.c (info_search_internal): Call
        info_node_of_tag_fast to get node.
-       (info_search_in_node_internal): If there is a match, fetch the 
+       (info_search_in_node_internal): If there is a match, fetch the
        node and do the search again.
-       (info_search_internal): Always free a node if it wasn't retained 
+       (info_search_internal): Always free a node if it wasn't retained
        in the window.
 
        * info/nodes.h (N_Simple): New flag.
-       * info/session.c (regexp_search): Indicate search not found in 
+       * info/session.c (regexp_search): Indicate search not found in
        return value if that is the case.
 
 2015-07-29  Gavin Smith  <address@hidden>
@@ -319,19 +354,19 @@
 
 2015-07-29  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi (Printing Indices & Menus): Move node to 
+       * doc/texinfo.texi (Printing Indices & Menus): Move node to
        indices chapter.
-       (Ending a File): Add cross-reference to Printing Indices & 
+       (Ending a File): Add cross-reference to Printing Indices &
        Menus.
        (File End): Move into end of Ending a File.
        (Ending a File): Subordinate to Beginning a File chapter.
-       (Beginning a File): Rename Beginning and Ending a File.  (This 
-       also makes the document short table of contents fit on a single 
+       (Beginning a File): Rename Beginning and Ending a File.  (This
+       also makes the document short table of contents fit on a single
        page.)  Remove a sentence.
 
 2015-07-29  Gavin Smith  <address@hidden>
 
-       * info/nodes.c (info_node_of_tag): Don't save a pointer into a 
+       * info/nodes.c (info_node_of_tag): Don't save a pointer into a
        file buffer, only an offset.
 
 2015-07-29  Gavin Smith  <address@hidden>
@@ -347,9 +382,9 @@
 2015-07-28  Gavin Smith  <address@hidden>
 
        * tp/Texinfo/Convert/XSParagraph/configure.ac: Check for
-       Perl's CC before AC_PROG_CC so the automatic dependency checking 
+       Perl's CC before AC_PROG_CC so the automatic dependency checking
        style will not be inappropriate.
-       * tp/Texinfo/Convert/XSParagraph/Makefile.am: Move setting of CC 
+       * tp/Texinfo/Convert/XSParagraph/Makefile.am: Move setting of CC
        from here to configure.ac.
 
        * tp/texi2any.pl: Show error message if loading a module failed.
@@ -361,14 +396,14 @@
 
 2015-07-28  Gavin Smith  <address@hidden>
 
-       * tp/texi2any.pl: Import fewer modules by default, for speed.  
+       * tp/texi2any.pl: Import fewer modules by default, for speed.
        (texi2any --help changed from about 0.4 s to about 0.1 s.).
-       (%formats_table): Store name of required module in 'module' 
+       (%formats_table): Store name of required module in 'module'
        values of hashes.
        * tp/Texinfo/Convert/XSParagraph/XSParagraph.pm: Add
        "require Texinfo::Convert::Paragraph" for fall-back code.
        * tp/Texinfo/Convert/Plaintext.pm,
-       * tp/Texinfo/Convert/Info.pm: Use Texinfo/Convert/Paragraph.pm 
+       * tp/Texinfo/Convert/Info.pm: Use Texinfo/Convert/Paragraph.pm
        indirectly via Texinfo/Convert/XSParagraph/XSParagraph.pm.
 
 2015-07-27  Gavin Smith  <address@hidden>
@@ -377,15 +412,15 @@
        (xspara_new): Optional conf parameter.
        (xspara_add_next): Propagate 'transparent' argument.
        * tp/Texinfo/Convert/XSParagraph/xspara.c
-       (xspara_add_next, xspara__add_next): Update state.last_letter, 
+       (xspara_add_next, xspara__add_next): Update state.last_letter,
        taking into account 'transparent' argument.
 
-       * tp/t/paragraph.t: Run tests for XSParagraph module as well as 
+       * tp/t/paragraph.t: Run tests for XSParagraph module as well as
        Texinfo::Convert::XSParagraph.
 
 2015-07-27  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Convert/XSParagraph/xspara.c: Remove all comments 
+       * tp/Texinfo/Convert/XSParagraph/xspara.c: Remove all comments
        with out-of-date line numbers for Paragraph.pm.
 
        * tp/Texinfo/Convert/Paragraph.pm
@@ -398,29 +433,29 @@
        * tp/Texinfo/Convert/Line.pm,
        * tp/Texinfo/Convert/UnFilled.pm,
        * tp/Texinfo/Convert/XSParagraph/XSParagraph.xs,
-       * tp/Texinfo/Convert/XSParagraph/xspara.c (add_next): Remove an 
+       * tp/Texinfo/Convert/XSParagraph/xspara.c (add_next): Remove an
        unused parameter.
 
 2015-07-25  Gavin Smith  <address@hidden>
 
        * tp/Texinfo/Convert/XSParagraph/Makefile.am: Clear CFLAGS.
-       * tp/Texinfo/Convert/XSParagraph/XSParagraph.pm: Don't goto a 
+       * tp/Texinfo/Convert/XSParagraph/XSParagraph.pm: Don't goto a
        label inside an if (0) { ... } block.
 
-       * tp/Texinfo/Convert/XSParagraph/configure.ac (fetch_conf): New 
-       function, to replace fetch_conf.pl script.  Use Perl executable 
+       * tp/Texinfo/Convert/XSParagraph/configure.ac (fetch_conf): New
+       function, to replace fetch_conf.pl script.  Use Perl executable
        from ${PERL} instead of /usr/bin/env perl, to make it easier for
        the user to use a different perl.
 
 2015-07-25  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Convert/Plaintext.pm (new_formatter): Uncomment 
+       * tp/Texinfo/Convert/Plaintext.pm (new_formatter): Uncomment
        line using XSParagraph module.  Don't call XSParagraph::hello.
        * tp/Texinfo/Convert/XSParagraph/xspara.c (xspara_hello)
-       (xspara_init): Rename.  Specify whether an error occurred in the 
+       (xspara_init): Rename.  Specify whether an error occurred in the
        return value.
-       * tp/Texinfo/Convert/XSParagraph/XSParagraph.pm: Place code in 
-       BEGIN block.  Call XSParagraph::init, and on error, replace 
+       * tp/Texinfo/Convert/XSParagraph/XSParagraph.pm: Place code in
+       BEGIN block.  Call XSParagraph::init, and on error, replace
        XSParagraph module with Texinfo::Convert::Paragraph.
 
        * tp/t/converters_tests.t: Skip
@@ -441,15 +476,15 @@
 
 2015-07-24  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi (Nodes): Combine two sentences.  Move advice 
-       on not renaming nodes to Node Names.  Remove sentence saying 
+       * doc/texinfo.texi (Nodes): Combine two sentences.  Move advice
+       on not renaming nodes to Node Names.  Remove sentence saying
        that nodes don't impose a hierarchical structure.
-       (@node): Change word "stretch" to "region".  Move remark on how 
-       definition of node compares to definition of sections later.  
-       Change wording of reference to Node Line Requirements.  Move 
-       explanation of use of chapter structuring command earlier.  
-       Reword paragraph about formatting for printing.  Move mention of 
-       @anchor and cross-references to Nodes.  Move description of 
+       (@node): Change word "stretch" to "region".  Move remark on how
+       definition of node compares to definition of sections later.
+       Change wording of reference to Node Line Requirements.  Move
+       explanation of use of chapter structuring command earlier.
+       Reword paragraph about formatting for printing.  Move mention of
+       @anchor and cross-references to Nodes.  Move description of
        optional arguments later in node.
        (makeinfo Pointer Creation): Move section to end of chapter.
 
@@ -465,9 +500,9 @@
 
 2015-07-23  Gavin Smith  <address@hidden>
 
-       * info/info-utils.c (scan_reference_target): Remove quoting 
+       * info/info-utils.c (scan_reference_target): Remove quoting
        characters from label.
-       (scan_reference_label): Handle case of a manual name appearing 
+       (scan_reference_label): Handle case of a manual name appearing
        in a label along with a quoted node name.
        * info/t/quoted-manual-in-target.sh,
        * info/t/quoted-manual-in-label.sh: New tests.
@@ -474,41 +509,41 @@
 
 2015-07-23  Gavin Smith  <address@hidden>
 
-       * tp/Makefile.am: Reword comments about purpose of Makefile.tres 
+       * tp/Makefile.am: Reword comments about purpose of Makefile.tres
        and Makefile.docstr.
 
 2015-07-23  Gavin Smith  <address@hidden>
 
-       * info/info-utils.c (read_quoted_string) [QUOTE_NODENAMES]: Make 
+       * info/info-utils.c (read_quoted_string) [QUOTE_NODENAMES]: Make
        unconditional.
        (printed_representation): Suppress display of character \177.
-       (parse_top_node_line): Get length of filename in node pointers 
+       (parse_top_node_line): Get length of filename in node pointers
        separately.
-       (read_bracketed_filename): Update comment.  Allow out parameter 
+       (read_bracketed_filename): Update comment.  Allow out parameter
        to take a null value.
        (info_parse_node): Call read_quoted_string to get node name.
        (scan_reference_label): Don't remove quoting.
        (scan_reference_target): Add TODO to remove it here instead.
 
-       * info/session.c (info_handle_pointer): Call info_parse_node on 
+       * info/session.c (info_handle_pointer): Call info_parse_node on
        pointer text.
        (info_parse_and_select): Call info_parse_node.
 
-       * info/nodes.c (get_filename_and_nodename): Don't call 
+       * info/nodes.c (get_filename_and_nodename): Don't call
        info_parse_node.
 
 2015-07-22  Gavin Smith  <address@hidden>
 
-       * tp/tests/Makefile.am: Give a clue for what "onetst" stands 
+       * tp/tests/Makefile.am: Give a clue for what "onetst" stands
        for, and elaborate on purpose of tests-parser.txt files.
-       * tp/maintain/regenerate_cmd_tests.sh: Say where this file is 
+       * tp/maintain/regenerate_cmd_tests.sh: Say where this file is
        run from.  Place some comments in the generated file.
 
 2015-07-22  Gavin Smith  <address@hidden>
-       
-       * tp/Texinfo/Convert/XSParagraph/mylib: Move all files up a 
+
+       * tp/Texinfo/Convert/XSParagraph/mylib: Move all files up a
        level.
-       * tp/Texinfo/Convert/XSParagraph/lib/XSParagraph.pm: Move up a 
+       * tp/Texinfo/Convert/XSParagraph/lib/XSParagraph.pm: Move up a
        level.
        * tp/t/test_utils.pl: Include builddir for XSParagraph in @INC.
 
@@ -519,53 +554,53 @@
 
 2015-07-22  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi (Writing A Menu): Move node before "Menu 
+       * doc/texinfo.texi (Writing A Menu): Move node before "Menu
        Location" node.
-       (Menus, Menu Location): Move advice on writing short nodes to 
+       (Menus, Menu Location): Move advice on writing short nodes to
        Menu Location.
-       (Menu Parts, Menu Location): Move advice on how to access menu 
-       entries in Info to be next to the advice on how to access menu 
+       (Menu Parts, Menu Location): Move advice on how to access menu
+       entries in Info to be next to the advice on how to access menu
        entries in HTML.
-       (Menu Location): Place obsolete advice within an @ignore block. 
-       Move exhortation to use a hierarchical structure to Writing A 
+       (Menu Location): Place obsolete advice within an @ignore block.
+       Move exhortation to use a hierarchical structure to Writing A
        Menu, because that isn't to do with the menu location.
        (Menu Example): Move node to be just after Writing A Menu node.
-       (Writing a Menu): Split paragraph about menu entries and menu 
+       (Writing a Menu): Split paragraph about menu entries and menu
        comments into two.
-       (Writing a Menu, Menu Parts): Move advice about extraneous 
+       (Writing a Menu, Menu Parts): Move advice about extraneous
        whitespace from Writing a Menu.
 
 2015-07-22  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi (Top): Add menu comment to separate 
+       * doc/texinfo.texi (Top): Add menu comment to separate
        Appendices from Chapters.
 
 2015-07-21  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi: Add \global\usebracesinindexestrue at start 
+       * doc/texinfo.texi: Add \global\usebracesinindexestrue at start
        of file.
 
 2015-07-21  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi (Updating Nodes and Menus): Don't say that 
-       updating node pointers is required, because makeinfo determines 
+       * doc/texinfo.texi (Updating Nodes and Menus): Don't say that
+       updating node pointers is required, because makeinfo determines
        them automatically.
        (Updating Requirements): Don't say that makeinfo requires menus.
-       (Chapter Structuring): Remove aside about "sectioning 
+       (Chapter Structuring): Remove aside about "sectioning
        structuring".
-       (Tree Structuring): Don't mention that node pointers are 
+       (Tree Structuring): Don't mention that node pointers are
        implicit in example.
-       (Raise/Lower Sections): Reword paragraph about a problem that 
-       can arise to emphasize that menus need to match the sectioning 
+       (Raise/Lower Sections): Reword paragraph about a problem that
+       can arise to emphasize that menus need to match the sectioning
        structure.
-       (Node Names): Rename section title from "Choosing Node and 
+       (Node Names): Rename section title from "Choosing Node and
        Pointer Names" to "Choosing Node Names".
-       (Writing a Node): Reorder section to put description of node 
+       (Writing a Node): Reorder section to put description of node
        pointers later.
-       (Node Line Requirements): Move bullet point about node pointers 
+       (Node Line Requirements): Move bullet point about node pointers
        later in section.
        (@top Command): Remove mention of node pointers.
-       (Node Menu Illustration): Delete an unecessary word.  Remove a 
+       (Node Menu Illustration): Delete an unecessary word.  Remove a
        mention of implicitly determined node pointers.
 
 2015-07-21  Gavin Smith  <address@hidden>
@@ -575,7 +610,7 @@
 
 2015-07-21  Gavin Smith  <address@hidden>
 
-       * contrib/nontests: New directory.  Move most of the files from 
+       * contrib/nontests: New directory.  Move most of the files from
        util/tests into it.  Suggestion from Karl Berry on 7th July.
        * contrib/tests/README: Say that tests were for util directory.
 
@@ -582,30 +617,30 @@
 2015-07-21  Gavin Smith  <address@hidden>
 
        * NEWS: Mention new command @validatemenus.
-       * tp/Texinfo/Common.pm (%default_parser_state_configuration): 
+       * tp/Texinfo/Common.pm (%default_parser_state_configuration):
        Add validatemenus flag.
        (%misc_commands): Add 'validatemenus'.
-       * tp/Texinfo/Parser.pm (_end_line) <@validatemenus>: Set flag on 
+       * tp/Texinfo/Parser.pm (_end_line) <@validatemenus>: Set flag on
        parser.
-       (_parse_line_command_args): Accept 'on' and 'off' as the 
+       (_parse_line_command_args): Accept 'on' and 'off' as the
        argument to @validatemenus.
 
-       * tp/Texinfo/Structuring.pm (add_missing_menus): New function, 
+       * tp/Texinfo/Structuring.pm (add_missing_menus): New function,
        based on complete_tree_nodes_menus.
-       (add_node_menu_if_missing): New function, based on 
+       (add_node_menu_if_missing): New function, based on
        complete_node_menu.
 
-       * tp/texi2any.pl: Call add_missing_menus if 'validatemenus' flag 
+       * tp/texi2any.pl: Call add_missing_menus if 'validatemenus' flag
        is not turned on in parser object.
 
 2015-07-20  Gavin Smith  <address@hidden>
 
-       * info/man.c (xrefs_of_manpage): An open parenthesis precededed 
+       * info/man.c (xrefs_of_manpage): An open parenthesis precededed
        by a newline cannot be part of a man page cross-reference.
 
 2015-07-20  Gavin Smith  <address@hidden>
 
-       * info/display.c (display_update_node_text) <W_NoWrap>: Fix, 
+       * info/display.c (display_update_node_text) <W_NoWrap>: Fix,
        broken in last commit.
 
 2015-07-20  Gavin Smith  <address@hidden>
@@ -613,7 +648,7 @@
        * info/display.c (display_update_window_1, display_update_node_text):
        Rename function.  Avoid outputting line with standout or underline if
        nothing has changed on it.
-       (display_process_line): Function split out from 
+       (display_process_line): Function split out from
        display_update_node_text.
        (writing_out): New file-level variable.
 
@@ -632,16 +667,16 @@
 
        * info/nodes.c (info_find_file): If filename has slash, look for
        it in search path if it does not begin "./".
-       * info/filesys.c (info_find_fullpath): Don't look for a filename 
-       beginning "./" in the search path, but otherwise look for the 
+       * info/filesys.c (info_find_fullpath): Don't look for a filename
+       beginning "./" in the search path, but otherwise look for the
        filename in the search path even if it contains a slash.
-       (info_file_find_next_in_path): Prefix returned path with "./" if 
+       (info_file_find_next_in_path): Prefix returned path with "./" if
        it is relative to the current directory.
        (info_add_extension): Allow second argument to be null.
 
-       * info/info.c (main) <--file or slash in argument>: If argument 
-       not an absolute path, prefix it with "./".  Call 
-       info_add_extension instead of info_find_fullpath for arguments 
+       * info/info.c (main) <--file or slash in argument>: If argument
+       not an absolute path, prefix it with "./".  Call
+       info_add_extension instead of info_find_fullpath for arguments
        other than simple filenames.
 
 2015-07-15  Gavin Smith  <address@hidden>
@@ -658,48 +693,48 @@
 
 2015-07-13  Gavin Smith  <address@hidden>
 
-       * info/info-utils.c (scan_node_contents): Always set 
-       nodestart_adjusted for anchors in a node, whether rewriting the 
-       node's contents or not.  Failure to follow a cross-reference to 
+       * info/info-utils.c (scan_node_contents): Always set
+       nodestart_adjusted for anchors in a node, whether rewriting the
+       node's contents or not.  Failure to follow a cross-reference to
        an anchor reported by Ludovic Courtes.
 
 2015-07-13  Gavin Smith  <address@hidden>
 
-       * info/nodes.h (TAG): New field "cache".  Remove nodelen field.  
+       * info/nodes.h (TAG): New field "cache".  Remove nodelen field.
        All uses of TAG.nodelen changed to use TAG.cache.nodelen.
        * info/nodes.c (info_node_of_tag): Save information about node,
        like contents and reference list, in cache field.
-       (find_node_from_tag): If reseting tag table entry, free and 
-       clear contents and reference lists.  Use N_IsInternal flag 
-       instead of N_WasRewritten to decide if a node has independent 
+       (find_node_from_tag): If reseting tag table entry, free and
+       clear contents and reference lists.  Use N_IsInternal flag
+       instead of N_WasRewritten to decide if a node has independent
        data.
        (get_nodes_of_info_file, build_tag_table): Function renamed.
 
        * info/window.c (text_buffer_to_node): Set N_IsInternal flag on node.
-       * info/dir.c (build_dir_node): Don't set N_IsInternal flag on 
+       * info/dir.c (build_dir_node): Don't set N_IsInternal flag on
        node.
        (get_dir_node): Don't do a deep copy of dir node.
-       * info/indices.c (info_indices_of_file_buffer): Don't free 
+       * info/indices.c (info_indices_of_file_buffer): Don't free
        reference list of node returned from info_node_of_tag.
-       (info_index_apropos): Free contents of apropos node if scanning 
+       (info_index_apropos): Free contents of apropos node if scanning
        it changes it.  Don't set N_WasRewritten flag.
-       * info/man.c (get_manpage_node): Don't set N_IsInternal flag for 
-       man page node.  Don't return a new reference list each time the 
+       * info/man.c (get_manpage_node): Don't set N_IsInternal flag for
+       man page node.  Don't return a new reference list each time the
        same man page is requested.
-       * info/window.c (test_buffer_to_node): Set N_IsInternal on 
+       * info/window.c (test_buffer_to_node): Set N_IsInternal on
        returned node.
 
-       * info/session.c (info_split_window): Don't duplicate fields in 
+       * info/session.c (info_split_window): Don't duplicate fields in
        copied node, as they are recorded in the tag table.
        (free_history_node): Only free data in node if node is internal.
        (info_select_reference): Copy fields of argument.
 
-       * info/window.c (calculate_line_starts): Have one line start at 
+       * info/window.c (calculate_line_starts): Have one line start at
        end of node.
 
 2015-07-12  Gavin Smith  <address@hidden>
 
-       * info/display.c (display_update_window_1): Sometimes highlight 
+       * info/display.c (display_update_window_1): Sometimes highlight
        a reference when the point is after its end.
 
 2015-07-12  Gavin Smith  <address@hidden>
@@ -707,13 +742,13 @@
        * run gnulib-tool --add-import --no-libtool
        * configure.ac (LT_INIT): Remove.
        * info/Makefile.am,
-       install-info/Makefile.am: Change Gnulib library file from 
+       install-info/Makefile.am: Change Gnulib library file from
        libgnu.la to libgnu.a.
        * autogen.sh: Remove use of libtoolize.
 
-       * tp/Texinfo/Convert/XSParagraph/Makefile.am: Refer to gnulib 
+       * tp/Texinfo/Convert/XSParagraph/Makefile.am: Refer to gnulib
        files in subdirectory.
-       * tp/Texinfo/Convert/XSParagraph/configure.ac: Run gl_EARLY and 
+       * tp/Texinfo/Convert/XSParagraph/configure.ac: Run gl_EARLY and
        gl_INIT.
        * tp/Texinfo/Convert/XSParagraph: Run
        gnulib-tool --libtool --import vasprintf.
@@ -727,14 +762,14 @@
        * tp/Texinfo/Convert/XSParagraph/configure.ac (AM_CPPFLAGS)
        (XSParagraph_la_LIBADD): Refer to Gnulib headers and library.
 
-       * install-info/Makefile.am: Change Gnulib library file from 
+       * install-info/Makefile.am: Change Gnulib library file from
        libgnu.a to libgnu.la.
 
 2015-07-11  Gavin Smith  <address@hidden>
 
-       * info/Makefile.am (LDADD): Change Gnulib library file from 
+       * info/Makefile.am (LDADD): Change Gnulib library file from
        libgnu.a to libgnu.la.
-       * man/Makefile.am (mi_perl5lib_path): Look for produced library 
+       * man/Makefile.am (mi_perl5lib_path): Look for produced library
        in builddir.
 
 2015-07-11  Gavin Smith  <address@hidden>
@@ -756,9 +791,9 @@
 2015-07-11  Gavin Smith  <address@hidden>
 
        * tp/Texinfo/Convert/XSParagraph/mylib/xspara.c (xspara_hello):
-       Use dTHX to avoid perl error about undefined "my_perl" due to 
+       Use dTHX to avoid perl error about undefined "my_perl" due to
        Perl's "malloc" being used.
-       
+
 2015-07-11  Eli Zaretskii  <address@hidden>
 
        * tp/Texinfo/Convert/XSParagraph/mylib/xspara.c [_WIN32]: Don't
@@ -771,14 +806,14 @@
 
 2015-07-11  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Convert/XSParagraph/mylib/xspara.c 
-       (xspara_add_text) <space doubling in @w>: Change a call to 
+       * tp/Texinfo/Convert/XSParagraph/mylib/xspara.c
+       (xspara_add_text) <space doubling in @w>: Change a call to
        iswspace to a call to isspace.  Reported by Eli Zaretskii.
 
 2015-07-11  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Convert/XSParagraph/mylib/xspara.c (xspara_hello): 
-       If setting "en_US.UTF-8" as the locale fails, try basing a 
+       * tp/Texinfo/Convert/XSParagraph/mylib/xspara.c (xspara_hello):
+       If setting "en_US.UTF-8" as the locale fails, try basing a
        locale name on the current locale name.
 
 2015-07-11  Eli Zaretskii  <address@hidden>
@@ -793,41 +828,41 @@
 
 2015-07-11  Gavin Smith  <address@hidden>
 
-       * info/display.c (display_update_window_1): Better handling of 
+       * info/display.c (display_update_window_1): Better handling of
        cross-references split across across lines.
 
 2015-07-10  Gavin Smith  <address@hidden>
 
        * info/display.c (display_update_window_1) <xref-rendition=1>:
-       Highlight the reference that we expect will be followed if the 
+       Highlight the reference that we expect will be followed if the
        user presses return.
        * info/session.c (read_and_dispatch) <xref-rendition=On>: Call
        display_update_one_window after each user command.
 
-       * info/session.c (info_menu_or_ref_item): Fix condition for 
+       * info/session.c (info_menu_or_ref_item): Fix condition for
        multiple cross-references in one line.
 
 2015-07-10  Gavin Smith  <address@hidden>
 
-       * info/variables.c (info_variables): New user variable 
+       * info/variables.c (info_variables): New user variable
        'xref-rendition'.
        * info/display.c (xref_rendition_p): New variable.
        * info/terminal.c (terminal_begin_underline, terminal_end_underline):
        New functions.
 
-       * info/info-utils.c (scan_reference_label): Don't place terminal 
-       escape characters in text of node.  Alter expression used for 
+       * info/info-utils.c (scan_reference_label): Don't place terminal
+       escape characters in text of node.  Alter expression used for
        end of a label.
 
        * info/display.c (decide_if_in_reference): New function, based
        on decide_if_in_match.
-       (display_update_window_1): Keep track of whether we are in a 
-       cross-reference or menu item and turn on and off underlining 
+       (display_update_window_1): Keep track of whether we are in a
+       cross-reference or menu item and turn on and off underlining
        accordingly, if xref-rendition=On.
 
        * info/info-utils.c (printed_rep),
        * info/infodoc.c (pretty_keyseq),
-       * info/nodemenu.c (format_node_info): Use { 0 } for null struct 
+       * info/nodemenu.c (format_node_info): Use { 0 } for null struct
        initializer instead of {}.
 
        * info/info-utils.c (underlining_on, underlining_off): Removed.
@@ -835,7 +870,7 @@
 2015-07-07  Gavin Smith  <address@hidden>
 
        * tp/Texinfo/Convert/Line.pm,
-       * tp/Texinfo/Convert/Paragraph.pm: Rename 'underlying_text' key 
+       * tp/Texinfo/Convert/Paragraph.pm: Rename 'underlying_text' key
        to 'last_char'.  Add some comments.
 
 2015-07-07  Gavin Smith  <address@hidden>
@@ -846,29 +881,29 @@
 2015-07-07  Gavin Smith  <address@hidden>
 
        * util/Makefile.am (EXTRA_DIST): Distribute TESTS, but not
-       all the contents of the test subdirectory, as this makes it 
+       all the contents of the test subdirectory, as this makes it
        possible for *.trs files to be be distributed.
 
 2015-07-06  Gavin Smith  <address@hidden>
 
        * util/Makefile.am (TESTS): Add variable.
-       * util/tests/texi2dvi_helpversion.sh: Add test, based on 
+       * util/tests/texi2dvi_helpversion.sh: Add test, based on
        texindex/tests/ti-helpversion.sh.  Suggestion from Karl.
 
 2015-07-06  Gavin Smith  <address@hidden>
 
-       * tp/t/test_utils.pl: Add directories containing XSParagraph 
+       * tp/t/test_utils.pl: Add directories containing XSParagraph
        files to the module include path, so that running, e.g.,
        "perl -w t/80include.t" works.  Suggestion from Patrice.
 
 2015-07-06  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi (Inserting Quotation Marks): Narrow prototype 
+       * doc/texinfo.texi (Inserting Quotation Marks): Narrow prototype
        text for rightmost column.
 
 2015-07-06  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi: Change @t to @code, @command or @samp in 
+       * doc/texinfo.texi: Change @t to @code, @command or @samp in
        node names.
 
 2015-07-05  Patrice Dumas  <address@hidden>
@@ -883,22 +918,22 @@
 
        * tp/Texinfo/Convert/Plaintext.pm
        (new_formatter): Set 'suppress_styles' on formatter object.
-       (_node_line, _printindex_formatted): Pass 'suppress_styles' 
+       (_node_line, _printindex_formatted): Pass 'suppress_styles'
        option to line formatter.
        (%index_style_commands): New hash.
-       (_convert) <command has styles>: If styles are suppressed, 
-       suppress styles unless the command is in %index_style_commands, 
+       (_convert) <command has styles>: If styles are suppressed,
+       suppress styles unless the command is in %index_style_commands,
        or it was defined with @definfoenclose.
-       <cross-reference command>: Suppress styles for converting node 
+       <cross-reference command>: Suppress styles for converting node
        name.
        <menu entry>: Suppress styles for node names.
 
 2015-07-04  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Convert/Plaintext.pm (_convert) <brace commands 
-       with no arguments>: Don't call 
-       Texinfo::Convert::Text::brace_no_arg_command for @dots or 
-       @enddots, to prevent the Unicode ellipsis character from being 
+       * tp/Texinfo/Convert/Plaintext.pm (_convert) <brace commands
+       with no arguments>: Don't call
+       Texinfo::Convert::Text::brace_no_arg_command for @dots or
+       @enddots, to prevent the Unicode ellipsis character from being
        used.
 
 2015-07-04  Gavin Smith  <address@hidden>
@@ -918,19 +953,19 @@
 
        * tp/Texinfo/Convert/XSParagraph/configure.ac: Retrieve
        "privlibexp" Perl configuration value.
-       * tp/Texinfo/Convert/XSParagraph/Makefile.am: Use it for 
+       * tp/Texinfo/Convert/XSParagraph/Makefile.am: Use it for
        -typemap argument to xsubpp.
 
 2015-07-04  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi: Change "a @node line" back to "an @node 
+       * doc/texinfo.texi: Change "a @node line" back to "an @node
        line".
 
 2015-07-03  Gavin Smith  <address@hidden>
 
-       * README-hacking: Mention gnupload --user and --replace.  Move 
-       dtd version check earlier, and explanations of how to make diffs 
-       and upload dtd file earlier.  Explanation of how to upload 
+       * README-hacking: Mention gnupload --user and --replace.  Move
+       dtd version check earlier, and explanations of how to make diffs
+       and upload dtd file earlier.  Explanation of how to upload
        texi2dvi.  Move explanations of release announcements together.
 
 2015-07-03  Gavin Smith  <address@hidden>
@@ -966,18 +1001,18 @@
 
 2015-07-03  Gavin Smith  <address@hidden>
 
-       * man/Makefile.am (mi_perl5lib_path): Add directories containing 
+       * man/Makefile.am (mi_perl5lib_path): Add directories containing
        XSParagraph files.
 
-       * tp/texi2any.pl (BEGIN): Change directories to look for modules 
+       * tp/texi2any.pl (BEGIN): Change directories to look for modules
        in.
-       * tp/tests/run_parser_all.sh: Pass more -I flags when running 
+       * tp/tests/run_parser_all.sh: Pass more -I flags when running
        texi2any.
        * tp/Makefile.am (AM_T_LOG_FLAGS): -I flags changed.
 
 2015-07-02  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Convert/XSParagraph/configure.ac: Retrieve "cc" 
+       * tp/Texinfo/Convert/XSParagraph/configure.ac: Retrieve "cc"
        Perl configuration value.
        * tp/Texinfo/Convert/XSParagraph/Makefile.am: Use it as CC.
 
@@ -993,19 +1028,19 @@
 
 2015-07-02  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Convert/XSParagraph/configure.ac 
+       * tp/Texinfo/Convert/XSParagraph/configure.ac
        (lookup_perl_flags): Strip any compiler flags that
        aren't -I or -D.
        * tp/Texinfo/Convert/XSParagraph/mylib/xspara.c (hello): Try a
        "en_US.UTF-8" locale.
-       * tp/Texinfo/Convert/XSParagraph/lib/XSParagraph.pm: Reduce 
+       * tp/Texinfo/Convert/XSParagraph/lib/XSParagraph.pm: Reduce
        required Perl version.
 
 2015-07-02  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Convert/XSParagraph/lib/XSParagraph.pm: Rewritten 
-       to use DynaLoader module, instead of XSLoader.  Look for a 
-       Libtool *.la file and extract the name of the loadable object 
+       * tp/Texinfo/Convert/XSParagraph/lib/XSParagraph.pm: Rewritten
+       to use DynaLoader module, instead of XSLoader.  Look for a
+       Libtool *.la file and extract the name of the loadable object
        from it.
        * tp/Texinfo/Convert/XSParagraph/Makefile.am,
        tp/Texinfo/Convert/XSParagraph/configure.ac,
@@ -1014,14 +1049,14 @@
        * tp/texi2any.pl (BEGIN) <in source run>, <not in source run>:
        Add directories to look for loadable modules in to @INC.
 
-       * tp/Texinfo/Convert/Plaintext.pm: Uncomment import of 
+       * tp/Texinfo/Convert/Plaintext.pm: Uncomment import of
        XSParagraph (but don't use it yet).
 
-       * configure.ac (AC_CONFIG_SUBDIRS): Configure 
+       * configure.ac (AC_CONFIG_SUBDIRS): Configure
        tp/Texinfo/Convert/XSParagraph.
        * tp/Makefile.am (SUBDIRS): Add Texinfo/Convert/XSParagraph.
        (do_subst): Substitute also for "@pkglibexecdir@" in texi2any.pl.
-       * doc/Makefile.am: Pass -I flag to makeinfo to find in-source 
+       * doc/Makefile.am: Pass -I flag to makeinfo to find in-source
        XSParagraph module.
 
        * autogen.sh: Run autoreconf in tp/Texinfo/Convert/XSParagraph.
@@ -1028,10 +1063,10 @@
 
 2015-07-01  Gavin Smith  <address@hidden>
 
-       * info/terminal.c (terminal_initialize_terminal): Save values of 
+       * info/terminal.c (terminal_initialize_terminal): Save values of
        LINES and COLUMNS environmental variables.
        (terminal_get_screen_size): Use saved values.
-       * info/t/c-u-m-x-scroll-forward.sh: Correct use of 
+       * info/t/c-u-m-x-scroll-forward.sh: Correct use of
        synch_with_program function.
 
 2015-07-01  Karl Berry  <address@hidden>
@@ -1052,39 +1087,39 @@
        tp/Texinfo/Convert/UnFilled.pm: (allow_end_sentence): New function.
 
        * tp/Texinfo/Convert/Line.pm, tp/Texinfo/Convert/Paragraph.pm,
-       tp/Texinfo/Convert/UnFilled.pm (_add_text, add_next, _add_next): 
+       tp/Texinfo/Convert/UnFilled.pm (_add_text, add_next, _add_next):
        Handle backspace as a marker to allow an end of sentence.
 
-       * tp/Texinfo/Convert/Plaintext.pm (_protect_sentence_ends): New 
+       * tp/Texinfo/Convert/Plaintext.pm (_protect_sentence_ends): New
        function.
-       (_process_text): Don't return a pair the second element of which 
-       is the underlying text.  Instead, call _protect_sentence_ends on 
-       the text.  No special handing of @code or @var.  Caller in 
+       (_process_text): Don't return a pair the second element of which
+       is the underlying text.  Instead, call _protect_sentence_ends on
+       the text.  No special handing of @code or @var.  Caller in
        _convert updated.
 
-       (new_formatter): Add commented-out line to use XSParagraph 
+       (new_formatter): Add commented-out line to use XSParagraph
        instead of Texinfo::Convert::Paragraph.
 
-       (_count_added): Reinstate a commented-out use of end_line_count 
+       (_count_added): Reinstate a commented-out use of end_line_count
        method.
 
-       (_convert): Remove check for 'underlying_text' element, which 
+       (_convert): Remove check for 'underlying_text' element, which
        was only used for @acronym and @abbr.
-       <@acronym and @abbr>: Don't cause underlying text to be saved in 
-       the formatters.  Instead, call allow_end_sentence after 
-       converting the argument, and return the result of the 
+       <@acronym and @abbr>: Don't cause underlying text to be saved in
+       the formatters.  Instead, call allow_end_sentence after
+       converting the argument, and return the result of the
        conversion.
-       <close @var and close monospace>: Call allow_end_sentence method 
+       <close @var and close monospace>: Call allow_end_sentence method
        on formatter.
-       <brace commands with no arguments> If command is not a single 
+       <brace commands with no arguments> If command is not a single
        character, call allow_end_sentence after converting.  Call
        allow_end_sentence if in @var or monospace.
        <accent commands>: Don't pass underlying text to the formatters.
-       Always call allow_end_sentence in @var and monospace, and call 
-       it when in @sc and the original output would have been not have 
+       Always call allow_end_sentence in @var and monospace, and call
+       it when in @sc and the original output would have been not have
        been an uppercase letter.
 
-       * tp/texi2any.pl (BEGIN) <in-source run> Add directories for 
+       * tp/texi2any.pl (BEGIN) <in-source run> Add directories for
        XSParagraph to @INC.
        * tp/Makefile.am (AM_T_LOG_FLAGS): Add -I flags for XSParagraph.
 
@@ -1093,12 +1128,12 @@
 
 2015-06-26  Gavin Smith  <address@hidden>
 
-       * README-hacking: Notes on how to tag source tree and update 
+       * README-hacking: Notes on how to tag source tree and update
        manual web pages.
 
 2015-06-26  Gavin Smith  <address@hidden>
 
-       * NEWS, util/texi2dvi, util/texi2pdf, 
+       * NEWS, util/texi2dvi, util/texi2pdf,
        doc/refcard/txirefcard.tex, configure.ac: 6.0 release.
 
 2015-06-25  Gavin Smith  <address@hidden>
@@ -1107,29 +1142,29 @@
 
 2015-06-24  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.tex (\macrolineargctxt): New macro, based on 
+       * doc/texinfo.tex (\macrolineargctxt): New macro, based on
        \macroargctxt.
        (\defmacro) <one argument non-recursive>,
        <one argument recursive>: Don't call \macroargctxt.
-       (\braceorlinexxx) Call \macroargctxt only if a { follows the 
-       macro name, otherwise call \macrolineargctxt.  (Various reports 
+       (\braceorlinexxx) Call \macroargctxt only if a { follows the
+       macro name, otherwise call \macrolineargctxt.  (Various reports
        from, inter alia, Werner Lemberg and David Kastrup.)
 
 2015-06-24  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Convert/DocBook.pm (@inline_elements): Add 
-       'subscript' and 'superscript' so they can show up in a @def* 
+       * tp/Texinfo/Convert/DocBook.pm (@inline_elements): Add
+       'subscript' and 'superscript' so they can show up in a @def*
        line.  Bug report from Per Bothner.
 
 2015-06-23  Gavin Smith  <address@hidden>
 
-       * info/t/Init-inter.inc (run_ginfo): Remove delay if PID of 
+       * info/t/Init-inter.inc (run_ginfo): Remove delay if PID of
        process is unknown.
-       
+
        * info/t/Init-inter.inc (synch_with_program): Add function.
        * info/t/c-u-m-x-scroll-forward.sh, info/t/gc-split.sh,
        info/t/inc-sea-forward-non-regex.sh, info/t/inc-sea-forward.sh,
-       info/t/inc-sea-history.sh, info/t/inc-sea-insensitive.sh: Use 
+       info/t/inc-sea-history.sh, info/t/inc-sea-insensitive.sh: Use
        it.
 
 2015-06-23  Gavin Smith  <address@hidden>
@@ -1170,7 +1205,7 @@
 
 2015-06-18  Eli Zaretskii  <address@hidden>
 
-       * tp/Texinfo/Common.pm (open_out): Call binmode on opened file 
+       * tp/Texinfo/Common.pm (open_out): Call binmode on opened file
        handle as intended.
 
 2015-06-18  Karl Berry  <address@hidden>
@@ -1186,10 +1221,10 @@
 
 2015-06-17  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Commom.pm (open_out): Add parameter which 
+       * tp/Texinfo/Commom.pm (open_out): Add parameter which
        conditionalizes the calls to "binmode" on file handle.
        * tp/Texinfo/Convert/Info.pm (_open_info_file): New function,
-       wrapping Texinfo::Common::open_out.  Call 
+       wrapping Texinfo::Common::open_out.  Call
        Texinfo::Common::open_out so that it calls "binmode".
        (output): Call _open_info_file instead of open_out directly.
 
@@ -1203,7 +1238,7 @@
 2015-06-15  Eli Zaretskii  <address@hidden>, and
             Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Common.pm (open_out): Run "binmode" on file handle, 
+       * tp/Texinfo/Common.pm (open_out): Run "binmode" on file handle,
        to disable conversion of LF to CR LF under MS-Windows.
 
 2015-06-14  Karl Berry  <address@hidden>
@@ -1234,38 +1269,38 @@
 
 2015-06-09  Gavin Smith  <address@hidden>
 
-       * info/indices.c (info_virtual_index): Change type of a local 
+       * info/indices.c (info_virtual_index): Change type of a local
        variable to match expected type of argument to next_index_match.
        * info/dir.c (dir_entry_of_infodir),
-       * info/info-utils.c (info_get_menu_entry_by_label): Add 
+       * info/info-utils.c (info_get_menu_entry_by_label): Add
        parentheses around assignment for clarity.
-       * info/info-utils.c (printed_representation): Change declaration 
-       of a variable from an unsigned char * to a char * and cast it 
+       * info/info-utils.c (printed_representation): Change declaration
+       of a variable from an unsigned char * to a char * and cast it
        when we need to check the referent is in a range.
 
 2015-06-09  Gavin Smith  <address@hidden>
 
-       * gnulib: Add stdarg module, to try to fix compilations in C89 
+       * gnulib: Add stdarg module, to try to fix compilations in C89
        mode due to lack of va_copy.
        * README-hacking: Add note how to ignore files in SVN.
 
 2015-06-08  Gavin Smith  <address@hidden>
 
-       * info/t/Timeout-test.inc: Also check that "time -t 0" produces 
+       * info/t/Timeout-test.inc: Also check that "time -t 0" produces
        no output.  (Attempt at stopping failures under OpenBSD 5.5.)
 
 2015-06-07  Gavin Smith  <address@hidden>
 
        * configure.ac (AC_CHECK_HEADERS): Check for stropts.h.
-       * info/pseudotty.c [HAVE_STROPTS_H]: Perform STREAMS ioctl's on 
-       slave device, as recommended in the GNU C Library Reference 
-       Manual.  (Attempt at stopping hang of test replace-viewed.sh 
+       * info/pseudotty.c [HAVE_STROPTS_H]: Perform STREAMS ioctl's on
+       slave device, as recommended in the GNU C Library Reference
+       Manual.  (Attempt at stopping hang of test replace-viewed.sh
        under Solaris 10.)
 
 2015-06-07  Gavin Smith  <address@hidden>
 
-       * info/t/c-u-m-x-scroll-forward: Synch with controlled program 
-       before sending in typed input.  (Attempt at fixing test failures 
+       * info/t/c-u-m-x-scroll-forward: Synch with controlled program
+       before sending in typed input.  (Attempt at fixing test failures
        under CentOS.)
 
 2015-06-07  Gavin Smith  <address@hidden>
@@ -1278,8 +1313,8 @@
 
 2015-06-07  Gavin Smith  <address@hidden>
 
-       * info/nodes.c (forget_info_file): Function replaced.  Don't 
-       free the file buffer because it could still be referenced in a 
+       * info/nodes.c (forget_info_file): Function replaced.  Don't
+       free the file buffer because it could still be referenced in a
        displayed node.
        * info/Makefile.am (XFAIL_TESTS): Remove replace-viewed.sh.
        * info/nodes.h (N_Gone): New symbol.
@@ -1286,7 +1321,7 @@
 
 2015-06-07  Gavin Smith  <address@hidden>
 
-       * info/t/replaced-viewed.sh: New test.  (Bug reported by Benno 
+       * info/t/replaced-viewed.sh: New test.  (Bug reported by Benno
        Schulenberg).
        * info/Makefile.am (TESTS, XFAIL_TESTS): Add it.
 
@@ -1296,47 +1331,47 @@
 
 2015-06-06  Gavin Smith  <address@hidden>
 
-       * info/t/Timeout-test.inc: Check for "read -t" slightly 
+       * info/t/Timeout-test.inc: Check for "read -t" slightly
        differently.
 
 2015-06-06  Gavin Smith  <address@hidden>
 
        * info/t/Init-test.inc,
-       * info/t/Init-inter.inc: Check if running the test turned off 
+       * info/t/Init-inter.inc: Check if running the test turned off
        terminal echoing, and only run "stty sane" if that is the case.
-       * info/t/Timeout-test.inc: Default exit status of test to 
+       * info/t/Timeout-test.inc: Default exit status of test to
        success.
 
 2015-06-06  Gavin Smith  <address@hidden>
 
-       * info/t/index-apropos.sh: Wait for 'index-apropos' command to 
+       * info/t/index-apropos.sh: Wait for 'index-apropos' command to
        finish before we sent more key strokes.
 
 2015-06-05  Gavin Smith  <address@hidden>
 
-       * info/t/Init-test.inc (cleanup): Run "stty sane" (interactive 
+       * info/t/Init-test.inc (cleanup): Run "stty sane" (interactive
        tests only).
        * info/t/Init-inter.inc: Check for stty program.
 
 2015-06-05  Gavin Smith  <address@hidden>
 
-       * info/t/adjust-anchors.sh: Add comment about name of character 
+       * info/t/adjust-anchors.sh: Add comment about name of character
        encoding.  Export LC_ALL instead of LANG.
 
 2015-06-04  Gavin Smith  <address@hidden>
 
-       * info/pseudotty.c: Check for failure from "write" call.  Don't 
-       exit for an error communicating with controlled process; do exit 
+       * info/pseudotty.c: Check for failure from "write" call.  Don't
+       exit for an error communicating with controlled process; do exit
        for error on control channel.
-       * info/t/Init-inter.inc: Open FIFO for commmunicating that ginfo 
-       has finished on both ends, to allow timeout to work.  Start 
-       pseudotty with "exec" in case there is an intermediate shell, to 
+       * info/t/Init-inter.inc: Open FIFO for commmunicating that ginfo
+       has finished on both ends, to allow timeout to work.  Start
+       pseudotty with "exec" in case there is an intermediate shell, to
        get its PID correctly.
        * info/t/README: Update.
 
 2015-06-04  Gavin Smith  <address@hidden>
 
-       * info/t/Infokey-config: Set key-time=0 to try to increase 
+       * info/t/Infokey-config: Set key-time=0 to try to increase
        predictability of interactive tests.
 
 2015-06-03  Karl Berry  <address@hidden>
@@ -1345,8 +1380,8 @@
 
 2015-06-03  Gavin Smith  <address@hidden>
 
-       * info/t/Init-inter.inc (run_ginfo): Close fd opened to control 
-       FIFO in subshell so pseudotty can exit for an EOF.  This 
+       * info/t/Init-inter.inc (run_ginfo): Close fd opened to control
+       FIFO in subshell so pseudotty can exit for an EOF.  This
        prevents lingering processes if a test is interrupted.
 
 2015-06-03  Karl Berry  <address@hidden>
@@ -1361,17 +1396,17 @@
 
 2015-06-03  Gavin Smith  <address@hidden>
 
-       * info/pseudotty.c: Don't get control channel from an already 
-       redirected file descriptor, get it from the filename of a FIFO 
-       passed on the command line.  #define _XOPEN_SOURCE as 500 to 
+       * info/pseudotty.c: Don't get control channel from an already
+       redirected file descriptor, get it from the filename of a FIFO
+       passed on the command line.  #define _XOPEN_SOURCE as 500 to
        expose prototype of "ptsname" under NetBSD 6.1.4.
-       * info/t/Init-inter.inc: Create control channel FIFO and pass 
-       name of it to pseudotty.  Don't use background processes to keep 
-       the control FIFO open.  Redirect FIFO for communicating name of 
-       pty slave device within a subshell.  Keep control FIFO open 
+       * info/t/Init-inter.inc: Create control channel FIFO and pass
+       name of it to pseudotty.  Don't use background processes to keep
+       the control FIFO open.  Redirect FIFO for communicating name of
+       pty slave device within a subshell.  Keep control FIFO open
        using file descriptor redirection in main shell process.
        * info/t/Init-test.inc: Remove unneeded cleanup code.
-       * info/t/Timeout-test.inc: Don't try to open FIFO for indicating 
+       * info/t/Timeout-test.inc: Don't try to open FIFO for indicating
        that ginfo has finished read-write.
 
 2015-06-03  Gavin Smith  <address@hidden>
@@ -1396,7 +1431,7 @@
        so a duplicated index entry is kept if it's in a different index.
        Doc: discuss @ vs. \ as command character; indexing updates.
        * doc/texinfo.texi (Details of texindex): a bit more about twjr.
-       
+
        * doc/texinfo.tex (\lastsection): define as empty in case
        a sub(sub)heading occurs out of sequence.
 
@@ -1444,9 +1479,9 @@
 
 2015-05-29  Gavin Smith  <address@hidden>
 
-       * info/session.c (info_read_and_dispatch): Make call to 
-       window_clear_echo_area conditional on read_key_sequence not 
-       having dispatched to a user command itself, so error messages 
+       * info/session.c (info_read_and_dispatch): Make call to
+       window_clear_echo_area conditional on read_key_sequence not
+       having dispatched to a user command itself, so error messages
        aren't cleared.
        (read_key_sequence) <menu digit>: Clear echo area first.
        Reported by Benno Schulenberg.
@@ -1453,7 +1488,7 @@
 
 2015-05-29  Benno Schulenberg <address@hidden> (tiny change)
 
-       * info/session.c (display_startup_message): Reword note to 
+       * info/session.c (display_startup_message): Reword note to
        translators.
 
 2015-05-26  Karl Berry  <address@hidden>
@@ -1460,12 +1495,12 @@
 
        * doc/texinfo.tex (\setnonasciicharscatcodenonglobal):
        rm spurious blank line.  Report from David Kastrup,
-       26 May 2015 15:14:06.   
+       26 May 2015 15:14:06.
 
 2015-05-21  Gavin Smith  <address@hidden>
 
-       * info/pseudotty.c: Check return value of fclose.  Use an int to 
-       hold return value of read.  Consistent syntax for infinite 
+       * info/pseudotty.c: Check return value of fclose.  Use an int to
+       hold return value of read.  Consistent syntax for infinite
        loops.  (Suggestions from Karl Berry.)
 
 2015-05-20  Karl Berry  <address@hidden>
@@ -1476,8 +1511,8 @@
 
 2015-05-18  Gavin Smith  <address@hidden>
 
-       * info/info-utils.c (printed_representation): Declare char * as 
-       unsigned, so that check for printable limit works.  Display 
+       * info/info-utils.c (printed_representation): Declare char * as
+       unsigned, so that check for printable limit works.  Display
        unknown bytes with an octal representation.
 
 2015-05-18  Gavin Smith  <address@hidden>
@@ -1485,57 +1520,57 @@
        * info/t/Init-test.inc, info/t/Init-inter.inc, info/t/*.sh:
        Revert split of GINFO variable from yesterday.
 
-       * info/t/Init-inter.inc: Wedge pipe for input key presses open 
+       * info/t/Init-inter.inc: Wedge pipe for input key presses open
        for reading as well as for writing.
-       * info/t/Timeout-test.inc: Try to detect if "read -t" works by 
-       running it in a subshell.  If exit status of "read -t" is 1, 
+       * info/t/Timeout-test.inc: Try to detect if "read -t" works by
+       running it in a subshell.  If exit status of "read -t" is 1,
        report that an end-of-file was likely.
 
-       * info/man.c (get_manpage_from_formatter): Ignore exit status of 
+       * info/man.c (get_manpage_from_formatter): Ignore exit status of
        man page formatter.
 
 2015-05-17  Gavin Smith  <address@hidden>
 
-       * info/t/Init-test.inc: Split GINFO variable into GINFO and 
+       * info/t/Init-test.inc: Split GINFO variable into GINFO and
        GINFO_OPTIONS, and provide GINFO function to use them together.
-       * info/t/Init-inter.inc: Pass GINFO_OPTIONS variable as 
+       * info/t/Init-inter.inc: Pass GINFO_OPTIONS variable as
        arguments to GINFO.  (Attempt at fixing error message on
-       Solaris 10, "./ginfo --init-file ./t/Infokey-config: not found".  
+       Solaris 10, "./ginfo --init-file ./t/Infokey-config: not found".
        Maybe word splitting isn't happening.)
        * info/t/*.sh: Use GINFO alias instead of $GINFO.
 
-       * info/t/Init-test.inc: Remove portability code for "local" 
+       * info/t/Init-test.inc: Remove portability code for "local"
        builtin.  It doesn't work.
        (findprog): Don't use "local".
 
 2015-05-17  Gavin Smith  <address@hidden>
 
-       * info/t/index-apropos.sh: Don't run printf in background to 
-       pass input keystrokes into program.  (Attempt at fixing test 
+       * info/t/index-apropos.sh: Don't run printf in background to
+       pass input keystrokes into program.  (Attempt at fixing test
        failure reported by Assaf Gordon.)
-       * info/pseudotty.c: Include sys/select.h for fd_set and others.  
+       * info/pseudotty.c: Include sys/select.h for fd_set and others.
        Reported by Assaf Gordon.
 
-       * info/pseudotty.c: Log bytes received from control channel, for 
+       * info/pseudotty.c: Log bytes received from control channel, for
        better trouble-shooting.
 
-       * po/Makevars: Escape "$" in XGETTEXT_OPTIONS.  (Attempt at 
+       * po/Makevars: Escape "$" in XGETTEXT_OPTIONS.  (Attempt at
        fixing build failure on FreeBSD 9.3, reported by Assaf Gordon.)
 
 2015-05-17  Gavin Smith  <address@hidden>
 
-       * info/t/Init-inter.inc: Copy shell portability code for "local" 
+       * info/t/Init-inter.inc: Copy shell portability code for "local"
        builtin from util/texi2dvi.
-       * init/t/Init-test.inc: Use "2" as argument to "trap" instead of 
+       * init/t/Init-test.inc: Use "2" as argument to "trap" instead of
        "SIGINT" for portability to Solaris, among others.
        * init/t/empty-infopath.sh: Set and export variable separately.
-       (Automated build report via Dagobert Michelsen and 
+       (Automated build report via Dagobert Michelsen and
        platform-testers.)
 
 2015-05-16  Gavin Smith  <address@hidden>
 
-       * info/pseudotty.c: Define a global "program_name" variable for 
-       use by "error" function.  Include string.h to make sure we get a 
+       * info/pseudotty.c: Define a global "program_name" variable for
+       use by "error" function.  Include string.h to make sure we get a
        declaration of memset.  Reported by Dagobert Michelsen.
 
 2015-05-14  Karl Berry  <address@hidden>
@@ -1550,11 +1585,11 @@
 
 2015-05-11  Gavin Smith  <address@hidden>
 
-       * info/nodes.c (convert_eols): Do pointer arithmetic before 
+       * info/nodes.c (convert_eols): Do pointer arithmetic before
        reallocating.
-       (find_node_from_tag) <EOL conversion>: Also update 'node' field 
+       (find_node_from_tag) <EOL conversion>: Also update 'node' field
        of each window as well as the histories.
-       * info/info.c (add_initial_nodes) <inexact menu following>: 
+       * info/info.c (add_initial_nodes) <inexact menu following>:
        Always free reached node.
 
 2015-05-10  Eli Zaretskii  <address@hidden>
@@ -1574,9 +1609,9 @@
 2015-05-07  Gavin Smith  <address@hidden>
 
        * tp/Texinfo/Convert/Plaintext.pm (_add_text_count)
-       (_count_added): Don't call Texinfo::Common::count_bytes, collect 
+       (_count_added): Don't call Texinfo::Common::count_bytes, collect
        the argument instead into a string.
-       (_update_count_context): Count the text collected in 
+       (_update_count_context): Count the text collected in
        _add_text_count.
 
        * tp/Texinfo/Convert/Plaintext.pm (add_location)
@@ -1584,11 +1619,11 @@
        (_printindex_formatted, _convert),
        * tp/Texinfo/Convert/Info.pm (output),
        * tp/DebugTexinfo/DebugCount.pm (_convert):
-       Call _update_count_context before accessing 'bytes' value of 
+       Call _update_count_context before accessing 'bytes' value of
        current count context.
 
        * tp/Texinfo/Convert/Plaintext.pm (_count_added): Access
-       'end_line_count' value on hash directly instead of via function 
+       'end_line_count' value on hash directly instead of via function
        call.
 
 2015-05-06  Karl Berry  <address@hidden>
@@ -1604,8 +1639,8 @@
 2015-05-06  Gavin Smith  <address@hidden>
 
        * tp/Texinfo/Parser.pm (parse_texi): Only use regex to look for
-       @-command once instead of twice.  Reorder a condition to make 
-       regex execution less likely.  Combine "ABORT MENU STAR" and 
+       @-command once instead of twice.  Reorder a condition to make
+       regex execution less likely.  Combine "ABORT MENU STAR" and
        "MENU ENTRY (certainly)" blocks into a single condition.
 
 2015-05-03  Gavin Smith  <address@hidden>
@@ -1613,12 +1648,12 @@
        * tp/Texinfo/Convert/Unicode.pm (string_width): Calculate string
        width using "unpack" function.
 
-       * tp/Texinfo/Convert/Paragraph.pm (_add_next): Add new argument 
-       "$newlines_impossible" to elimate a regex match.  Don't access 
+       * tp/Texinfo/Convert/Paragraph.pm (_add_next): Add new argument
+       "$newlines_impossible" to elimate a regex match.  Don't access
        arguments we don't need.
-       (add_text): Use "split" function to split up text.  Try to 
-       eliminate regex matches for a newline character.  Save some 
-       flags in local variables.  Reorder a condition.  Add "o" flag to 
+       (add_text): Use "split" function to split up text.  Try to
+       eliminate regex matches for a newline character.  Save some
+       flags in local variables.  Reorder a condition.  Add "o" flag to
        some regexes that used variables.
 
 2015-05-03  Karl Berry  <address@hidden>
@@ -1644,9 +1679,9 @@
 
 2015-05-01  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Plaintext.pm: Change a few more function calls not 
+       * tp/Texinfo/Plaintext.pm: Change a few more function calls not
        to use method call syntax.
-       (convert, _convert_element): Use method call syntax to call 
+       (convert, _convert_element): Use method call syntax to call
        _footnotes.  (Mail from Patrice.)
 
 2015-04-30  Gavin Smith  <address@hidden>
@@ -1653,7 +1688,7 @@
 
        * tp/Texinfo/Parser.pm, tp/Texinfo/Convert/Paragraph.pm,
        tp/Texinfo/Convert/Plaintext.pm:
-       Don't use object-oriented method call syntax for functions in 
+       Don't use object-oriented method call syntax for functions in
        same file.
 
 2015-04-29  Karl Berry  <address@hidden>
@@ -1664,7 +1699,7 @@
 
 2015-04-26  Gavin Smith  <address@hidden>
 
-       * README-hacking: Add note about updating DTD version number in 
+       * README-hacking: Add note about updating DTD version number in
        configure.ac.  (Thien-Thi Nguyen, bug-texinfo 2015-03-01.)
 
 2015-04-23  Gavin Smith  <address@hidden>
@@ -1671,7 +1706,7 @@
 
        * tp/Texinfo/Convert/Plaintext.pm (converter_initialize)
        <utf-8 output>: Override $self->{'style_map'}->{'dfn'} to use
-       directed double quotes.  Use of directed quotes for @dfn 
+       directed double quotes.  Use of directed quotes for @dfn
        suggested by Paul Eggert.
 
 2015-04-22  Karl Berry  <address@hidden>
@@ -1681,21 +1716,21 @@
 
 2015-04-14  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Conver/Plaintext.pm (_printindex_formatted): Don't 
-       call Texinfo::Convert::Unicode::string_width with the part of 
+       * tp/Texinfo/Conver/Plaintext.pm (_printindex_formatted): Don't
+       call Texinfo::Convert::Unicode::string_width with the part of
        the string we have already called it on.
 
-       * tp/Texinfo/Convert/Unicode.pm (unicode_text): Don't normalize 
+       * tp/Texinfo/Convert/Unicode.pm (unicode_text): Don't normalize
        return value.
 
-       * tp/Texinfo/Convert/Paragraph.pm (add_text): Don't track 
-       "underlying text" separately if it is the same as the text given 
+       * tp/Texinfo/Convert/Paragraph.pm (add_text): Don't track
+       "underlying text" separately if it is the same as the text given
        to be wrapped.
 
 2015-04-13  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Common.pm (count_bytes): Add special handling of 
-       case when output encoding is UTF-8, and for other encodings save 
+       * tp/Texinfo/Common.pm (count_bytes): Add special handling of
+       case when output encoding is UTF-8, and for other encodings save
        result of Encode::find_encoding between function calls.
 
 2015-04-12  Gavin Smith  <address@hidden>
@@ -1702,17 +1737,17 @@
 
        * tp/Texinfo/Convert/Plaintext.pm (new_formatter): Replace
        function call to get_conf with hash lookup.
-       (_count_added): Call Texinfo::Common::count_bytes directly 
+       (_count_added): Call Texinfo::Common::count_bytes directly
        instead of via _add_text_count, and inline _add_lines_count.
 
 2015-04-09  Gavin Smith  <address@hidden>
 
-       * doc/info-stnd.texi (Variables) <mouse>: Add note about text 
+       * doc/info-stnd.texi (Variables) <mouse>: Add note about text
        selection with the mouse.
 
 2015-04-07  Gavin Smith  <address@hidden>
 
-       * info/info.c (add_initial_nodes): Follow menus inexactly before 
+       * info/info.c (add_initial_nodes): Follow menus inexactly before
        checking indices sloppily.  Reported by Benno Schulenberg.
        * info/indices.c (look_in_indices): Arguments changed.
 
@@ -1720,9 +1755,9 @@
 
        * info/session.c (forward_move_node_structure) <Up and Next>,
        (backward_move_node_structure) <Prev and down>: Clean up window
-       history so to add only one node in history.  Report from Benno 
+       history so to add only one node in history.  Report from Benno
        Schulenberg.
-       (backward_move_node_structure): Case-insensitive check for name 
+       (backward_move_node_structure): Case-insensitive check for name
        of (dir).
 
 2015-04-07  Gavin Smith  <address@hidden>
@@ -1735,7 +1770,7 @@
        node for first run to avoid makeinfo complaint.
        Mail to bug-texinfo, 02 Mar 2015 11:38:53 (and thread ff.,
        continuing into April).
-       
+
 2015-04-06  Eli Zaretskii  <address@hidden>
 
        * info/pcterm.c (w32_info_prep): Enable mouse input.
@@ -1744,16 +1779,16 @@
 
 2015-04-06  Gavin Smith  <address@hidden>
 
-       * info/info.c (add_initial_nodes) <--node>: Look through node 
-       names of file for argument, and if not found look for a 
+       * info/info.c (add_initial_nodes) <--node>: Look through node
+       names of file for argument, and if not found look for a
        case-insensitive initial match.
-       * info/nodes.c (info_get_node_of_file_buffer): Remove doubled 
+       * info/nodes.c (info_get_node_of_file_buffer): Remove doubled
        condition.
 
 2015-04-06  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi (Invoking install-info): Include ellipsis 
-       within square brackets in synopsis.  Report from Benno 
+       * doc/texinfo.texi (Invoking install-info): Include ellipsis
+       within square brackets in synopsis.  Report from Benno
        Schulenberg.
 
 2015-04-04  Karl Berry  <address@hidden>
@@ -1769,44 +1804,44 @@
 
 2015-03-29  Patrice Dumas  <address@hidden>
 
-       * autogen.sh, tp/maintain/regenerate_cmd_tests.sh, 
-       tp/tests/Makefile.am, tp/tests/htmlxref*/Makefile.am, 
-       tp/tests/parser_tests.sh, tp/tests/run_parser_all.sh: 
-       avoid changing directory when running tests.  
-       Arrange to be able to run tests directly in subdirectories 
+       * autogen.sh, tp/maintain/regenerate_cmd_tests.sh,
+       tp/tests/Makefile.am, tp/tests/htmlxref*/Makefile.am,
+       tp/tests/parser_tests.sh, tp/tests/run_parser_all.sh:
+       avoid changing directory when running tests.
+       Arrange to be able to run tests directly in subdirectories
        for tests that need it, namely tests in tests/htmlxref*.
-       * tp/tests/test_scripts/*, tp/tests/htmlxref*/test_scripts/: 
+       * tp/tests/test_scripts/*, tp/tests/htmlxref*/test_scripts/:
        generate/regenerate.
 
 2015-03-14  Gavin Smith  <address@hidden>
 
-       * info/indices.c (next_index_match) <substring search>: Find 
+       * info/indices.c (next_index_match) <substring search>: Find
        non-case-matching initial matches.
 
 2015-03-13  Gavin Smith  <address@hidden>
 
        * info/indices.c (index_initial): New variable.
-       (info_index_search): Initialize index_initial as well as 
+       (info_index_search): Initialize index_initial as well as
        index_partial.
-       (next_index_match): Search for initial substrings after 
+       (next_index_match): Search for initial substrings after
        searching for exact matches.
-       (info_virtual_index): Call next_index_match to get index entries 
+       (info_virtual_index): Call next_index_match to get index entries
        in order.
 
 2015-03-09  Gavin Smith  <address@hidden>
 
-       * info/search.c (regexp_search): Permit zero-length matches, so 
-       that "^" doesn't search through entire file.  Pass REG_NOTBOL 
+       * info/search.c (regexp_search): Permit zero-length matches, so
+       that "^" doesn't search through entire file.  Pass REG_NOTBOL
        flag to regexec.
 
 2015-03-09  Gavin Smith  <address@hidden>
 
-       * info/info-utils.c (parse_top_node_line): Check for 
+       * info/info-utils.c (parse_top_node_line): Check for
        INFO_ALTPREV_LABEL, as was done before.
 
 2015-03-07  Gavin Smith  <address@hidden>
 
-       * info/man.c (get_manpage_node): Use return value of asprintf 
+       * info/man.c (get_manpage_node): Use return value of asprintf
        instead of calling strlen.
        * info/dir.c (dir_entry_of_infodir): Check for null filename.
        * info/info-utils.c (scan_reference_target): Allow skipping tabs
@@ -1814,18 +1849,18 @@
 
 2015-03-06  Gavin Smith  <address@hidden>
 
-       * info/man.c (get_manpage_node): Avoid using fixed-size buffer 
+       * info/man.c (get_manpage_node): Avoid using fixed-size buffer
        to construct string.  Report from James Chang.
 
 2015-03-04  Gavin Smith  <address@hidden>
 
-       * info/info-utils.c (parse_top_node_line): Check for labels 
+       * info/info-utils.c (parse_top_node_line): Check for labels
        case-insensitively, as was done before.
-       (scan_reference_target): Allow a tab to terminate a node name in 
+       (scan_reference_target): Allow a tab to terminate a node name in
        a menu entry.
-       * info/infopath.c (infopath_next): Handle case when the search 
+       * info/infopath.c (infopath_next): Handle case when the search
        path is empty.
-       * info/session.c (info_select_reference): Default to "Top" in 
+       * info/session.c (info_select_reference): Default to "Top" in
        error message if node couldn't be loaded.
        * into/t/empty-infopath.sh: New test.
 
@@ -1832,7 +1867,7 @@
 2015-03-03  Gavin Smith  <address@hidden>
 
        * info/t/Init-test.inc: Trap SIGINT.
-       (cleanup): Kill the subshell that launched ginfo and delete FIFO 
+       (cleanup): Kill the subshell that launched ginfo and delete FIFO
        file for communicating that subshell was finished.
        * info/t/Timeout-test.inc: Clear SUBSHELL shell variable.
 
@@ -1843,53 +1878,53 @@
 
 2015-03-03  Gavin Smith  <address@hidden>
 
-       * info/info-stnd.texi (infokey format): Example .infokey changed 
-       to include "ESC u" for clearing search highlight.  Line setting 
-       scroll-step to its default value removed.  Suggest keys Up and 
+       * info/info-stnd.texi (infokey format): Example .infokey changed
+       to include "ESC u" for clearing search highlight.  Line setting
+       scroll-step to its default value removed.  Suggest keys Up and
        Down to scroll up and down.
 
 2015-03-03  Gavin Smith  <address@hidden>
 
-       * info/t/Init-inter.inc: Create a background process to hold a 
-       FIFO open for writing, instead of opening it read-write for 
+       * info/t/Init-inter.inc: Create a background process to hold a
+       FIFO open for writing, instead of opening it read-write for
        pseudotty.
-       Eliminate extra invocation of mknod.  Remove extra shell 
+       Eliminate extra invocation of mknod.  Remove extra shell
        variable with same value as another.
        * info/t/Init-test.inc (cleanup): Kill this background process.
 
-       * info/pseudotty.c: Exit for end-of-file on either of the file 
+       * info/pseudotty.c: Exit for end-of-file on either of the file
        descriptors being used.
 
-       * info/t/index-apropos.sh, info/t/last-no-history.sh, 
-       info/t/next-quoted.sh, info/t/quoted-label-and-target.sh, 
-       info/t/quoted-label-as-target.sh, info/t/quoted-target.sh: Run 
+       * info/t/index-apropos.sh, info/t/last-no-history.sh,
+       info/t/next-quoted.sh, info/t/quoted-label-and-target.sh,
+       info/t/quoted-label-as-target.sh, info/t/quoted-target.sh: Run
        ginfo with "run_ginfo" and source t/Timeout-test.inc.
 
 2015-03-03  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi (Invoking texi2any): Change a cross-reference 
+       * doc/texinfo.texi (Invoking texi2any): Change a cross-reference
        to explain customization variables.
 
 2015-03-01  Gavin Smith  <address@hidden>
 
-       * info/nodemenu.c (nodemenu_format_info): Add note for 
+       * info/nodemenu.c (nodemenu_format_info): Add note for
        translators.
        * doc/texinfo.texi (Writing a Node): Fix minor typo.
 
 2015-02-27  Gavin Smith  <address@hidden>
 
-       * install-info/install-info.c (open_possibly_compressed_file): 
-       If file is compressed, close it before opening it again on 
+       * install-info/install-info.c (open_possibly_compressed_file):
+       If file is compressed, close it before opening it again on
        stdin.
        (format_entry): Remove unused local variable.
-       * install-info/Makefile.am (SUBDIRS): Put "." before tests to 
+       * install-info/Makefile.am (SUBDIRS): Put "." before tests to
        make sure that "make check" works without doing "make" first.
 
 2015-02-27  Ken Brown  <address@hidden>
 
        * install-info/install-info.c (open_possibly_compressed_file):
-       Use 'fopen' to read the few first bytes, and then, only if it is 
-       compressed, redirect stdin to it and call 'popen'.  Suggestion 
+       Use 'fopen' to read the few first bytes, and then, only if it is
+       compressed, redirect stdin to it and call 'popen'.  Suggestion
        from Eli Zaretskii.
 
 2015-02-26  Patrice Dumas  <address@hidden>
@@ -1899,12 +1934,12 @@
 
 2015-02-26  Gavin Smith  <address@hidden>
 
-       * info/man.c (get_manpage_from_formatter): Accept output of 
+       * info/man.c (get_manpage_from_formatter): Accept output of
        "man" despite a failing exit status if it is long enough.
 
 2015-02-26  Gavin Smith  <address@hidden>
 
-       * info/session.c (display_startup_message): Startup message 
+       * info/session.c (display_startup_message): Startup message
        changed.  Note added for translators.
        * po/Makevars (XGETTEXT_OPTIONS): Add -cTRANSLATORS flag.
        * po/POTFILES.in: Add info/infomap.c.
@@ -1911,9 +1946,9 @@
 
 2015-02-25  Gavin Smith  <address@hidden>
 
-       * configure.ac: Check for posix_openpt in AC_CHECK_FUNCS, and 
+       * configure.ac: Check for posix_openpt in AC_CHECK_FUNCS, and
        set automake conditional "have_ptys" depending on result.
-       * info/Makefile.am (check_PROGRAMS): Build of "pseudotty" 
+       * info/Makefile.am (check_PROGRAMS): Build of "pseudotty"
        dependent upon "have_ptys".
        * info/t/Init-inter.inc: Skip test if pseudotty not built.
 
@@ -1920,7 +1955,7 @@
 2015-02-25  Gavin Smith  <address@hidden>
 
        * info/man.c (get_manpage_from_formatter)
-       [PIPE_USE_FORK, !PIPE_USE_FORK]: If exit status of "man" command 
+       [PIPE_USE_FORK, !PIPE_USE_FORK]: If exit status of "man" command
        is non-zero, throw away its output.  Report from Eli Zaretskii.
 
 2015-02-25  Eli Zaretskii  <address@hidden>
@@ -1935,7 +1970,7 @@
 
 2015-02-24  Gavin Smith  <address@hidden>
 
-       * info/infomap.c (fetch_user_maps): Print an error message if 
+       * info/infomap.c (fetch_user_maps): Print an error message if
        couldn't open init file specified with --init-file.
 
 2015-02-24  Eli Zaretskii  <address@hidden>
@@ -1953,7 +1988,7 @@
 
        * pretest 5.9.90.
        * configure.ac: version.
-       
+
        * util/srclist.txt: sync po_document/Makefile.in.in.
        * configure.ac, etc.: finish gettext 0.19.4 update.
 
@@ -1971,11 +2006,11 @@
        * tp/README,
        * tp/tests/README,
        * tp/t/README: a few words about adding new tests.
-       
+
        * tp/maintain/all_tests.sh,
        * tp/maintain/regenerate_cmd_tests.sh,
        * tp/maintain/prepare_perl_module_files.sh: copyright years.
-       
+
        * tp/maintain/MANIFEST_generated_files,
        * tp/MANIFEST: regenerate.
 
@@ -2002,12 +2037,12 @@
        * tp/Texinfo/Convert/HTML.pm (_convert_U_command): change accordingly.
        * tp/Texinfo/Convert/Plaintext.pm (_convert): change accordingly;
        also check if the Unicode character is valid before outputting it.
-       
+
        * tp/tests/coverage_macro.texi,
        * tp/t/02coverage.t,
        * tp/t/05paragraph.t,
        * tp/t/plaintext_tests.t: test it.  (Re)generate results.
-       
+
        * NEWS,
        * doc/refcard/txirefcard.tex,
        * doc/texinfo.texi (Inserting Unicode),
@@ -2015,7 +2050,7 @@
        (Command Summary): document it.
 
        * doc/refcard/txicmdcheck: report commands missing from the findex.
-       
+
        * tp/tests/README: mention envvars for long_tests and tex_html_tests.
        * tp/t/README: (non-)copyright for tp/t, wording.
 
@@ -2022,15 +2057,15 @@
 2015-02-13  Gavin Smith  <address@hidden>
 
        * INSTALL, README, README-alpha, TODO: 2015.
-       * README, README-hacking: Remove mention of texindex.c, mention 
+       * README, README-hacking: Remove mention of texindex.c, mention
        texindex subdirectory.
 
 2015-02-13  Gavin Smith  <address@hidden>
 
        * tp/Texinfo/Parser.pm (Module documentation section):
-       Show how to dump a parse tree with makeinfo.  Add some section 
-       headings.  Elaborate a bit on spaces_at_end and 
-       empty_spaces_before_argument.  Elaborate on the contents of a 
+       Show how to dump a parse tree with makeinfo.  Add some section
+       headings.  Elaborate a bit on spaces_at_end and
+       empty_spaces_before_argument.  Elaborate on the contents of a
        paragraph element, and the use of 'misc_arg'.
 
 2015-02-11  Gavin Smith  <address@hidden>, and
@@ -2041,10 +2076,10 @@
        (_convert) <multitable>: Increment 'in_multitable' on hash on
        top of document_context stack.
        <end of multitable>: Decrement 'in_multitable'.
-       <$ref_commands>: Check if in multitable context by checking top 
-       of 'document_context' stack, and if so suppress line breaks for 
+       <$ref_commands>: Check if in multitable context by checking top
+       of 'document_context' stack, and if so suppress line breaks for
        output of cross-reference.
-       (_footnotes): Pop 'document_context' along with the other 
+       (_footnotes): Pop 'document_context' along with the other
        context stacks.
 
        * tp/t/21multitable.t (ref_in_multitable): New test.
@@ -2051,12 +2086,12 @@
 
 2015-02-11  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Convert/Plaintext.pm (_convert) <empty line>: Pass 
-       a "\n" into the active formatter so it can register an 
+       * tp/Texinfo/Convert/Plaintext.pm (_convert) <empty line>: Pass
+       a "\n" into the active formatter so it can register an
        end-of-line if it needs to.
        * tp/t/20preformatted.t (comments_in_example): Add a use of @c
        in an @example followed by an empty line.
-       * tp/t/README: Elaborate on how tests are found, and how to run 
+       * tp/t/README: Elaborate on how tests are found, and how to run
        a single test by itself.
 
 2015-02-10  Karl Berry  <address@hidden>
@@ -2065,7 +2100,7 @@
 
 2015-02-10  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Report.pm (Module documentation section): Minor 
+       * tp/Texinfo/Report.pm (Module documentation section): Minor
        tweaks to grammar.
 
 2015-02-09  Karl Berry  <address@hidden>
@@ -2100,14 +2135,14 @@
 
 2015-02-07  Gavin Smith  <address@hidden>
 
-       * info/session.c (incremental_search): For searches uses regex, 
-       keep on searching for a match for a longer search string even if 
-       a shorter search string was not found.  Report from Werner 
+       * info/session.c (incremental_search): For searches uses regex,
+       keep on searching for a match for a longer search string even if
+       a shorter search string was not found.  Report from Werner
        Lemberg.
 
-       * info/session.c (window_set_state, window_get_state): Save 
-       point of window so we know where to position cursor when we go 
-       back to a failing search.  Call display_update_one_window when 
+       * info/session.c (window_set_state, window_get_state): Save
+       point of window so we know where to position cursor when we go
+       back to a failing search.  Call display_update_one_window when
        going back to a failing search.
 
 2015-02-06  Karl Berry  <address@hidden>
@@ -2124,12 +2159,12 @@
 2015-02-06  Gavin Smith  <address@hidden>
 
        * texindex/Makeinfo.am: Change rule to build "ti.info" to build
-       "texindex.info", which is the name set with @setfilename in 
+       "texindex.info", which is the name set with @setfilename in
        ti.texi.
 
 2015-02-06  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi (Info Format Specification): Remove mention 
+       * doc/texinfo.texi (Info Format Specification): Remove mention
        of quoting for certain characters in node names.
 
 2015-02-06  Gavin Smith  <address@hidden>
@@ -2140,7 +2175,7 @@
 
        * doc/texinfo.tex (\commondummies): add forgotten \mathopsup,
        \sub, \sup.
-       
+
        * doc/texinfo.tex (\nonasciistringdefs): new macros,
        to define every char from ^^a0 to ^^ff as (the typesettable
        version of) itself.
@@ -2161,7 +2196,7 @@
 
        * Makefile.am (long-checks),
        * tp/Makefile.am (long-checks): convenience target for tp/tests.
-       
+
 2015-02-02  Karl Berry  <address@hidden>
 
        * doc/texinfo.texi (First Node): mention TOP_NODE_UP_URL usage.
@@ -2197,12 +2232,12 @@
 
 2015-01-30  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Parser.pm (Module documentation section): Grammar 
+       * tp/Texinfo/Parser.pm (Module documentation section): Grammar
        tweaks.
 
 2015-01-30  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Convert/XSParagraph: Add directory (experimental 
+       * tp/Texinfo/Convert/XSParagraph: Add directory (experimental
        replacement for tp/Texinfo/Convert/Paragraph.pm).
        * tp/Texinfo/Convert/XSParagraph/README,
        tp/Texinfo/Convert/XSParagraph/XSParagraph.xs,
@@ -2216,18 +2251,18 @@
 2015-01-30  Gavin Smith  <address@hidden>
 
        * info/t/Cleanup.inc: File removed.
-       * info/t/Init-test.inc (cleanup) Add contents of Cleanup.inc as 
+       * info/t/Init-test.inc (cleanup) Add contents of Cleanup.inc as
        a function.
-       * info/t: All *.sh files: use cleanup function instead of 
+       * info/t: All *.sh files: use cleanup function instead of
        sourcing Cleanup.inc.
-       * info/t/Timeout-test.inc: If exit status of 'read' builtin 
-       could indicate that '-t' option is not supported, skip the test.  
+       * info/t/Timeout-test.inc: If exit status of 'read' builtin
+       could indicate that '-t' option is not supported, skip the test.
        Test failures reported by Nathan Royce.
 
 2015-01-29  Vitezslav Crhonek <address@hidden> (tiny change)
 
-       * info/info.c (main): Call info_error with "%s" just in case the 
-       error string contained a formatting sequence.  (Report via 
+       * info/info.c (main): Call info_error with "%s" just in case the
+       error string contained a formatting sequence.  (Report via
        Savannah.)
 
 2015-01-28  Karl Berry  <address@hidden>
@@ -2252,7 +2287,7 @@
 2015-01-26  Walter Garcia-Fontes  <address@hidden>
 
        * doc/txi-ca.tex: Add Catalan translation.
-       
+
 2015-01-25  Karl Berry  <address@hidden>
 
        * tp/Texinfo/Convert/HTML.pm (css_map): consistently use
@@ -2260,7 +2295,7 @@
 
 2015-01-23  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Parser.pm (documentation for multitable): Change 
+       * tp/Texinfo/Parser.pm (documentation for multitable): Change
        'cell_count' to 'cell_number'.
 
 2015-01-22  Karl Berry  <address@hidden>
@@ -2271,8 +2306,8 @@
 2015-01-19  Gavin Smith  <address@hidden>
 
        * tp/Texinfo/Parser.pm (Module documentation section): Tweak
-       descriptions of what 'node_manuals' entries and 
-       'menu_entry_node' are.  Add section mentioning 'nodes' and 
+       descriptions of what 'node_manuals' entries and
+       'menu_entry_node' are.  Add section mentioning 'nodes' and
        'menus' arrays.
 
 2015-01-18  Karl Berry  <address@hidden>
@@ -2283,9 +2318,9 @@
 2015-01-15  Gavin Smith  <address@hidden>
 
        * info/t/Init-inter.inc: (findprog) Add function from util/texi2dvi.
-       (run_ginfo) Call findprog to check for pgrep.  If not found, 
+       (run_ginfo) Call findprog to check for pgrep.  If not found,
        wait a short while for controlled process to start.
-       * info/t/resize-in-completions.sh: Print an informative message 
+       * info/t/resize-in-completions.sh: Print an informative message
        to standard error if test is skipped.
 
 2015-01-15  Karl Berry  <address@hidden>
@@ -2296,16 +2331,16 @@
 
 2015-01-14  Gavin Smith  <address@hidden>
 
-       * info/t/Init-inter.inc (run_ginfo): When setting GINFO_PID, 
-       include more commands in subshell.  This means the tests at 
+       * info/t/Init-inter.inc (run_ginfo): When setting GINFO_PID,
+       include more commands in subshell.  This means the tests at
        least pass when run in-source.
 
-       * info/t/Init-inter.inc, info/t/Init-test.inc, 
-       info/t/Timeout-test.inc, info/t/Cleanup.inc: Create temporary 
+       * info/t/Init-inter.inc, info/t/Init-test.inc,
+       info/t/Timeout-test.inc, info/t/Cleanup.inc: Create temporary
        files in $builddir.
        * info/Makefile.am: Distribute info/t/node-target.
-       * info/t/infodir/file-menu.info: Specify a target file as a 
-       simple filename, instead of a compound path, to allow 
+       * info/t/infodir/file-menu.info: Specify a target file as a
+       simple filename, instead of a compound path, to allow
        t/file-file-with-dot.sh test to pass out-of-source.
 
 2015-01-14  Karl Berry  <address@hidden>
@@ -2322,7 +2357,7 @@
        * info/Makefile.am,
        * install-info/tests/Makefile.am (EXTRA_DIST): new files needed,
        found by make distcheck.
-       
+
        * tp/MANIFEST: regenerate.
 
 2015-01-14  Arnold D. Robbins <address@hidden>
@@ -2331,11 +2366,11 @@
        * texindex/ti.twjr: Clear the update recipe, don't use a suffix.
        Should let things build in MinGW environment. Thanks to Eli Z
        for pointing out the issue.
-       
+
 2015-01-11  Karl Berry  <address@hidden>
 
        * man/Makefile.am (texindex.1): source file is now texindex/ti.twjr.
-       * README: mention gawk >= 4.0 if modifying ti.twjr.     
+       * README: mention gawk >= 4.0 if modifying ti.twjr.
 
 2015-01-11  Gavin Smith  <address@hidden>
 
@@ -2349,7 +2384,7 @@
 
 2015-01-10  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi (Invoking texi2any) <--split>: Change a "." 
+       * doc/texinfo.texi (Invoking texi2any) <--split>: Change a "."
        to a "@.".
 
 2015-01-07  Karl Berry  <address@hidden>
@@ -2370,26 +2405,26 @@
        the C texindex.
 
        * texindex/ti.twjr: --help formatting.
-       
+
 2015-01-03  Gavin Smith  <address@hidden>
 
-       * info/session.c (point_forward_char, point_backward_char): 
-       Correctly traverse multi-column characters.  (Bug was likely 
+       * info/session.c (point_forward_char, point_backward_char):
+       Correctly traverse multi-column characters.  (Bug was likely
        introduced on 2014-10-09 with change to window_point_to_column.)
 
 2015-01-03  Gavin Smith  <address@hidden>
 
-       * info/window.c (process_node_text, calculate_line_starts): 
+       * info/window.c (process_node_text, calculate_line_starts):
        process_node_text inlined in calculate_line_starts.
 
        (calculate_line_starts): Simplify.
-       (collect_line_starts): Unused arguments removed.  Return value 
+       (collect_line_starts): Unused arguments removed.  Return value
        is void.
 
 2015-01-02  Gavin Smith  <address@hidden>
 
-       * doc/texinfo.texi (Info Format Indirect Table): Value in 
-       indirect table is for first node in file, not start of file 
+       * doc/texinfo.texi (Info Format Indirect Table): Value in
+       indirect table is for first node in file, not start of file
        itself.
 
 2015-01-01  Karl Berry  <address@hidden>
@@ -2401,7 +2436,7 @@
        * info/info-utils.c,
        * info/nodes.c,
        * info/nodes.h: 2015.
-       
+
        * Pod-Simple-Texinfo/pod2texi.pl,
        * doc/refcard/txirefcard.tex,
        * doc/texinfo.texi,
@@ -2415,31 +2450,31 @@
        * tp/texi2any.pl,
        * util/texi-elements-by-size,
        * util/texi2dvi,
-       * util/texindex.c: 2015.        
+       * util/texindex.c: 2015.
 
 2015-01-01  Gavin Smith  <address@hidden>
 
-       * info/nodes.h (TAG): Add 'nodestart_adjusted' field and remove 
+       * info/nodes.h (TAG): Add 'nodestart_adjusted' field and remove
        'orig_nodestart'.
        (NODE): Remove 'nodestart' field.
        * info/nodes.c (info_create_tag): Update.
 
-       * info/nodes.c (adjust_nodestart): Set offset of found node in 
+       * info/nodes.c (adjust_nodestart): Set offset of found node in
        'nodestart_adjusted' field of NODE.
        (set_tag_nodelen, info_node_of_tag): Use 'nodestart_adjusted'
        for actual start of a node.
 
-       * info/info-utils.c (copy_input_to_output): Set adjusted anchors 
+       * info/info-utils.c (copy_input_to_output): Set adjusted anchors
        in 'nodestart_adjusted'.
-       (scan_node_contents): Get 'nodestart' for node from TAG object 
+       (scan_node_contents): Get 'nodestart' for node from TAG object
        instead of from NODE.
 
-       * info/nodes.c (find_node_of_tag): Arguments changed.  If node 
-       not found, call convert_eols to convert file buffer in place, 
-       reset the tag table, look for the node again, and reload any 
+       * info/nodes.c (find_node_of_tag): Arguments changed.  If node
+       not found, call convert_eols to convert file buffer in place,
+       reset the tag table, look for the node again, and reload any
        nodes in the history of a window.
 
-       * info/nodes.c (convert_eols): Set 'filesize' on destination 
+       * info/nodes.c (convert_eols): Set 'filesize' on destination
        FILE_BUFFER.
 
 2014-12-30  Gavin Smith  <address@hidden>
@@ -2447,13 +2482,13 @@
        * info/nodes.h (TAG): Struct type reintroduced (removed on
        2014-04-16).  Use to represent an entry in a file's tag table.
        All uses updated.
-       * info/info-utils.c (scan_node_contents): Prototype changed.  
+       * info/info-utils.c (scan_node_contents): Prototype changed.
        All callers updated.
 
        * info/nodes.c (info_create_tag): New function.
        (info_node_of_tag): Set body_start on returned NODE.
 
-       * info/man.c (manpage_file_buffer, manpage_nodes): Keep list of 
+       * info/man.c (manpage_file_buffer, manpage_nodes): Keep list of
        manpage nodes in a list of pointers.
        (create_manpage_file_buffer): Removed.
 
@@ -2464,50 +2499,50 @@
        * tp/Texinfo/Parser.pm (parser): use Storable::dclone instead
        of evaluating Data::Dumper->Dump result to make a deep copy.
        * tp/Texinfo/Parser.pm (simple_parser), tp/Texinfo/Report.pm (gdt):
-       new parser initialisation function, simple_parser, fit for 
-       strings of Texinfo, not whole documents, targetting speed.  
+       new parser initialisation function, simple_parser, fit for
+       strings of Texinfo, not whole documents, targetting speed.
        Use it in gdt() to try to speed up this function.
 
 2014-12-29  Gavin Smith  <address@hidden>
 
-       * info/filesys.c, info/nodes.c (convert_eols): Function moved 
+       * info/filesys.c, info/nodes.c (convert_eols): Function moved
        between files.  Arguments changed.
-       * info/nodes.c (adjust_nodestart): Take extra argument giving 
+       * info/nodes.c (adjust_nodestart): Take extra argument giving
        the slack to search for a node.
-       (find_node_from_tag): New function, wrapping adjust_nodestart.  
+       (find_node_from_tag): New function, wrapping adjust_nodestart.
        Call convert_eols on file if we don't find a node.
-       (info_node_of_tag): Call find_node_from_tag instead of 
-       adjust_nodestart.  Rearrange logic in function so not to call 
+       (info_node_of_tag): Call find_node_from_tag instead of
+       adjust_nodestart.  Rearrange logic in function so not to call
        itself when handling an anchor.
        * info/nodes.h (N_EOLs_Converted): New flag.
 
 2014-12-27  Gavin Smith  <address@hidden>
 
-       * info/nodes.h (TAGS_TABLE_BEG_LABEL): Define without trailing 
+       * info/nodes.h (TAGS_TABLE_BEG_LABEL): Define without trailing
        '\n'.
-       (INDIRECT_TAGS_TABLE_LABEL, INDIRECT_TABLE_LABEL): Rename and 
+       (INDIRECT_TAGS_TABLE_LABEL, INDIRECT_TABLE_LABEL): Rename and
        remove trailing '\n'.
        (TAGS_TABLE_END_LABEL): Define without leading '\n'.
 
-       * info/search.c (find_node_separator): Search backwards if 
+       * info/search.c (find_node_separator): Search backwards if
        beginning of search is after end of search.
-       (find_tags_table, find_file_section): Function renamed.  Take 
-       extra argument giving first line of section to look for.  Search 
+       (find_tags_table, find_file_section): Function renamed.  Take
+       extra argument giving first line of section to look for.  Search
        backwards if beginning of search is after the end of search.
        * info/search.c (looking_at_line): New function.
 
-       * info/nodes.c (build_tags_and_nodes): Call find_file_section to 
+       * info/nodes.c (build_tags_and_nodes): Call find_file_section to
        find end and start of tags table.
-       (get_nodes_of_tags_table): Assume we are passed the exact offset 
+       (get_nodes_of_tags_table): Assume we are passed the exact offset
        of the separator preceding the tag table.
 
        * info/info.h (whitespace_or_newline): Include '\r'.
-       * info/nodes.c (get_file_character_encoding): Stop reading name 
+       * info/nodes.c (get_file_character_encoding): Stop reading name
        of character encoding at an '\r' if one is seen.
-       * info/info-utils.c (avoid_see_see): Include '\r' as a 
+       * info/info-utils.c (avoid_see_see): Include '\r' as a
        whitespace character.
 
-       All problems with reading files with CR-LF line endings reported 
+       All problems with reading files with CR-LF line endings reported
        by Eli Zaretskii.
 
 2014-12-26  Eli Zaretskii  <address@hidden>
@@ -2545,49 +2580,49 @@
 
 2014-12-25  Gavin Smith  <address@hidden>
 
-       * info/search.c (find_node_separator, skip_node_separator): 
+       * info/search.c (find_node_separator, skip_node_separator):
        Allow optional '\r' before '\n' after Ctrl-_ node separator.
 
        * info/info-utils.c (parse_top_node_line),
        * info/nodes.c (get_nodes_of_info_file),
-       * info/search.c (find_node_in_binding): Include '\r' in list of 
+       * info/search.c (find_node_in_binding): Include '\r' in list of
        terminating characters.
 
 2013-12-25  Eli Zaretskii  <address@hidden>
 
-       * info/man.c (get_manpage_from_formatter) <!PIPE_USE_FORK>: 
+       * info/man.c (get_manpage_from_formatter) <!PIPE_USE_FORK>:
        Check for end of array without using removed variable.
 
 2013-12-25  Eli Zaretskii  <address@hidden>
 
-       * info/pcterm.c (gettextinfo): Pass expected arguments to 
+       * info/pcterm.c (gettextinfo): Pass expected arguments to
        info_error.
 
 2013-12-25  Eli Zaretskii  <address@hidden>
 
-       * info/terminal.c (terminal_initialize_terminal) 
+       * info/terminal.c (terminal_initialize_terminal)
        <terminal_initialize_terminal_hook>: Call initialize_byte_map.
 
 2014-12-25  Gavin Smith  <address@hidden>
 
-       * info/display.c (display_update_window_1): Don't display a line 
-       continuation character on the last line of the display.  Check 
-       was formerly done in process_node_text.  Report from Eli 
+       * info/display.c (display_update_window_1): Don't display a line
+       continuation character on the last line of the display.  Check
+       was formerly done in process_node_text.  Report from Eli
        Zaretskii.
 
 2014-12-19  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Convert/HTML.pm: Set CSS styles for @indentedblock, 
+       * tp/Texinfo/Convert/HTML.pm: Set CSS styles for @indentedblock,
        @smallindentedblock with "blockquote" instead of "div".
 
-       (%indented_block_commmands, %indented_preformatted_commands): 
+       (%indented_block_commmands, %indented_preformatted_commands):
        Renamed.
 
        (_convert_preformatted_or_indented_commands)
-       (_convert_preformatted_command): Renamed.  Don't use this 
+       (_convert_preformatted_command): Renamed.  Don't use this
        function for @indentedblock and @smallindentedblock.
 
-       (_convert_indented_command): New function.  Use "blockquote" tag 
+       (_convert_indented_command): New function.  Use "blockquote" tag
        to indent @indentedblock and @smallindentedblock.
 
 2014-12-18  Karl Berry  <address@hidden>
@@ -2606,10 +2641,10 @@
 
 2014-12-16  Gavin Smith  <address@hidden>
 
-       * info/indices.c (info_indices_of_file_buffer): Case insensitive 
+       * info/indices.c (info_indices_of_file_buffer): Case insensitive
        search for nodes with "index" in their names.
-       
-       * info/session.c (info_menu_ref_item): If multiple references in 
+
+       * info/session.c (info_menu_ref_item): If multiple references in
        a line pick the right one.
 
        * doc/texinfo.texi (@raggedright): Fix typo.
@@ -2625,7 +2660,7 @@
 2014-12-13  Gavin Smith  <address@hidden>
 
        * doc/texinfo.texi (Info Format Regular Nodes)
-       (Info Format Cross Reference): Update format specification 
+       (Info Format Cross Reference): Update format specification
        following feedback from Patrice Dumas 2014-11-22.
 
 2014-12-03  Karl Berry  <address@hidden>
@@ -2639,12 +2674,12 @@
 
 2014-12-03  Gavin Smith  <address@hidden>
 
-       * info/session.c (show_error_node): Call 
-       window_message_in_echo_area to display message so that 
+       * info/session.c (show_error_node): Call
+       window_message_in_echo_area to display message so that
        echo_area_node will be set for free_echo_area.
-       * info/dir.c (dir_entry_of_infodir): Free dir node if no entry 
+       * info/dir.c (dir_entry_of_infodir): Free dir node if no entry
        found.
-       * info/footnotes.c (make_footnotes_node): Supply a terminating 
+       * info/footnotes.c (make_footnotes_node): Supply a terminating
        null instead of relying on there being one in the source node.
 
 2014-12-02  Karl Berry  <address@hidden>
@@ -2658,7 +2693,7 @@
        (HTML Xref Command Expansion),
        (Command Summary): document them.
        (Inserting Math): \mathopsup exception for plain TeX's \sup.
-       
+
        * doc/txirefcard.tex: alphabetize some of the command lists,
        when other orderings aren't preferable.
 
@@ -2672,7 +2707,7 @@
 
 2014-11-22  Patrice Dumas  <address@hidden>
 
-       * Texinfo/Common.pm (%style_commands), 
+       * Texinfo/Common.pm (%style_commands),
        Texinfo/Convert/DocBook.pm (%style_attribute_commands),
        Texinfo/Convert/HTML.pm (%style_attribute_commands),
        Texinfo/Convert/Plaintext.pm (%style_map),
@@ -2681,7 +2716,7 @@
 
 2014-11-21  Gavin Smith  <address@hidden>
 
-       * info/session.c (read_key_sequence): Set info_explicit_arg or 
+       * info/session.c (read_key_sequence): Set info_explicit_arg or
        ea_explicit_arg if argument was given with sequence of C-u's.
        * info/t/c-u-m-x-scroll-forward.sh: New test.
 
@@ -2691,34 +2726,34 @@
 
 2014-11-21  Gavin Smith  <address@hidden>
 
-       * tp/Texinfo/Convert/HTML.pm: Set 
-       $default_commands_conversion{'raggedright'} to reference to 
-       _convert_command_noop so that contents of @raggedright block 
+       * tp/Texinfo/Convert/HTML.pm: Set
+       $default_commands_conversion{'raggedright'} to reference to
+       _convert_command_noop so that contents of @raggedright block
        appear.  Report from Mahlon Smith.
 
 2014-11-19  Gavin Smith  <address@hidden>
 
-       * info/info-utils.c (degrade_utf8): Add some more ASCII 
+       * info/info-utils.c (degrade_utf8): Add some more ASCII
        replacements.
 
 2014-11-19  Gavin Smith  <address@hidden>
 
-       * info/session.c (incremental_search) <backspace>: Remove a 
+       * info/session.c (incremental_search) <backspace>: Remove a
        complete multi-byte character.
 
 2014-11-19  Gavin Smith  <address@hidden>
 
-       * info/info.c (get_initial_file) <inexact dir lookup>: Check if 
+       * info/info.c (get_initial_file) <inexact dir lookup>: Check if
        file referred to exists.
        * info/t/dir-dangling-entry.sh: New test.
 
 2014-11-18  Gavin Smith  <address@hidden>
 
-       * info/session.c (incremental_search): Add at most one node to 
+       * info/session.c (incremental_search): Add at most one node to
        the window history.
-       (info_search_internal): Call free_history_node on nodes where no 
+       (info_search_internal): Call free_history_node on nodes where no
        match was found.
-       (info_search_in_node_internal): Remove unnecessary conditional 
+       (info_search_in_node_internal): Remove unnecessary conditional
        checks.
 
        * info/t/inc-sea-history.sh: New test.
@@ -2725,23 +2760,23 @@
 
 2014-11-17  Gavin Smith  <address@hidden>
 
-       * info/dir.c (dir_entry_of_infodir): Don't free a node too 
+       * info/dir.c (dir_entry_of_infodir): Don't free a node too
        early.
 
 2014-11-17  Gavin Smith  <address@hidden>
 
-       * info/session.c (incremental_search): Look up pressed keys in 
-       info_keymap and echo_area_keymap.  Do not hard-code any keys for 
+       * info/session.c (incremental_search): Look up pressed keys in
+       info_keymap and echo_area_keymap.  Do not hard-code any keys for
        particular commands.
 
 2014-11-16  Gavin Smith  <address@hidden>
 
-       * info/session.c (ask_for_search_string): Return 1 for empty 
+       * info/session.c (ask_for_search_string): Return 1 for empty
        input, and 0 only when it was aborted.
        (info_search_case_sensitively, info_search)
-       (info_search_backward): Set last_search_direction and 
-       last_search_case sensitive in info_search_1.  Call 
-       ask_for_search_string in info_search_1.  Perform search if 
+       (info_search_backward): Set last_search_direction and
+       last_search_case sensitive in info_search_1.  Call
+       ask_for_search_string in info_search_1.  Perform search if
        default search string was accepted.
 
 2014-11-15  Gavin Smith  <address@hidden>
@@ -2765,17 +2800,17 @@
 
 2014-11-14  Gavin Smith  <address@hidden>
 
-       * info/infomap.h (KEYMAP_ENTRY) <function>: Replace with a union 
+       * info/infomap.h (KEYMAP_ENTRY) <function>: Replace with a union
        to avoid casts on accessing it as a Keymap.  All uses updated.
 
 2014-11-13  Gavin Smith  <address@hidden>
 
-       * info/echo-area.c (ea_delete, ea_transpose_chars): Handle 
+       * info/echo-area.c (ea_delete, ea_transpose_chars): Handle
        multi-byte characters.
        (ea_swap_chars, ea_remove_text): New static functions.
 
        (read_and_dispatch_in_echo_area)
-       (echo_area_prep_read): Line invalidating echo area line map 
+       (echo_area_prep_read): Line invalidating echo area line map
        moved between functions.
 
 2014-11-12  Gavin Smith  <address@hidden>
@@ -2800,31 +2835,31 @@
 
 2014-11-09  Gavin Smith  <address@hidden>
 
-       * info/session.c (find_invocation_node_by_nodename): New 
+       * info/session.c (find_invocation_node_by_nodename): New
        function.
-       (info_intuit_options_node): If passed Top node, call it to get a 
-       new node to start at.  Return value to be freed by caller.  All 
+       (info_intuit_options_node): If passed Top node, call it to get a
+       new node to start at.  Return value to be freed by caller.  All
        callers updated.
-       * info/info.c (main, add_initial_nodes) 
-       (invocation_program_name): For --show-options, save last 
+       * info/info.c (main, add_initial_nodes)
+       (invocation_program_name): For --show-options, save last
        non-option argument to use as the name of the program.
 
 2014-11-08  Gavin Smith  <address@hidden>
 
        * info/session.c (menu_digit): Unused argument removed.
-       (read_key_sequence) <ea_possible_completions>: Exit function as 
+       (read_key_sequence) <ea_possible_completions>: Exit function as
        intended.
 
 2014-11-07  Gavin Smith  <address@hidden>
 
-       * info/echo-area.c (ea_forward, ea_backward): Go forward and 
+       * info/echo-area.c (ea_forward, ea_backward): Go forward and
        backward over multi-byte characters correctly.
 
-       * info/filesys.c (convert_eols): Disable with preprocessor to 
+       * info/filesys.c (convert_eols): Disable with preprocessor to
        avoid warning about unused function.
-       * info/pseudotty.c: Avoid compiler warnings about set but unused 
+       * info/pseudotty.c: Avoid compiler warnings about set but unused
        variable and include <error.h> to get prototype of 'error'.
-       
+
        * info/infodoc.c (HELP_NODE_GETS_REGENERATED)
        (internal_info_help_node_contents): Removed.
 
@@ -2833,67 +2868,67 @@
 2014-11-07  Gavin Smith  <address@hidden>
 
        * info/session.c (info_dispatch_on_key, read_key_sequence):
-       Renamed.  Call initialize_keyseq.  Read initial key of key 
-       sequence.  Merge in functionality of info_numeric_arg_digit_loop 
-       - read in keys giving a numeric argument at start of key 
-       sequence.  Call function implementing some commands depending on 
-       arguments.  Allow 8-bit input in echo area if 'ISO-Latin' is 
+       Renamed.  Call initialize_keyseq.  Read initial key of key
+       sequence.  Merge in functionality of info_numeric_arg_digit_loop
+       - read in keys giving a numeric argument at start of key
+       sequence.  Call function implementing some commands depending on
+       arguments.  Allow 8-bit input in echo area if 'ISO-Latin' is
        'On'.
        (display_info_keyseq): Check for empty keyseq.
 
-       * info/terminal.c (initialize_byte_map): 8th bit in an inputted 
+       * info/terminal.c (initialize_byte_map): 8th bit in an inputted
        byte only represents Meta if 'ISO-Latin' is off.
 
-       * info/echo-area.c (ea_insert): Don't declare with 
+       * info/echo-area.c (ea_insert): Don't declare with
        DECLARE_INFO_COMMAND.
        * info/infomap.c (add_function_keyseq),
-       * info/infodoc.c (dump_map_to_text_buffer): Don't check for 
+       * info/infodoc.c (dump_map_to_text_buffer): Don't check for
        ea_insert key bindings.
-       * info/infomap.c (read_init_file): Don't bind printable 
+       * info/infomap.c (read_init_file): Don't bind printable
        characters to ea_insert.
 
        * info/session.c (info_menu_digit): Function body is empty.
        (menu_digit): New function.
 
-       * info/echo-area.c (ea_possible_completions, ea_complete): Don't 
-       check what key launched this command.  Don't insert the key if 
+       * info/echo-area.c (ea_possible_completions, ea_complete): Don't
+       check what key launched this command.  Don't insert the key if
        not completing.
        (echo_area_completion_items): No longer static.
 
        * info/session.c (info_numeric_arg, info_numeric_arg_sign)
        (ea_numeric_arg, ea_numeric_arg_sign): Deleted.
-       (info_initialize_numeric_arg): Don't set info_numeric_arg or 
+       (info_initialize_numeric_arg): Don't set info_numeric_arg or
        other deleted variables.
-       (info_add_digit_to_numeric_arg, info_universal_argument): Bodies 
+       (info_add_digit_to_numeric_arg, info_universal_argument): Bodies
        of functions removed - declare with DECLARE_INFO_COMMAND only.
 
        * info/session.c (mouse_reporting_on, mouse_reporting_off)
        (mouse_reporting): Deleted.
-       (get_input_key): If mouse event detected always return 
+       (get_input_key): If mouse event detected always return
        KEY_MOUSE.
-       * info/infodoc.c (pretty_keyname): More descriptive text for 
+       * info/infodoc.c (pretty_keyname): More descriptive text for
        KEY_MOUSE or unknown key in case they are output by mistake.
 
        * info/session.c (info_read_and_dispatch),
-       * info/echo-area.c (read_and_dispatch_in_echo_area): Calls to 
-       info_dispatch_on_key updated.  Don't call initialize_keyseq or 
-       read first key of key sequence.  Pass count to 
-       command-implementing function.  Clear ea_last_executed_command 
+       * info/echo-area.c (read_and_dispatch_in_echo_area): Calls to
+       info_dispatch_on_key updated.  Don't call initialize_keyseq or
+       read first key of key sequence.  Pass count to
+       command-implementing function.  Clear ea_last_executed_command
        if info_dispatch_on_key could have executed a command itself.
 
        * info/info.h (DECLARE_INFO_COMMAND),
-       * info/makedoc.c (process_one_file): Remove 'key' argument from 
-       declarations of command-implementing functions.  All function 
+       * info/makedoc.c (process_one_file): Remove 'key' argument from
+       declarations of command-implementing functions.  All function
        declarations and calls updated.
-       * info/session.c (info_menu_or_ref_item): Unused argument 
+       * info/session.c (info_menu_or_ref_item): Unused argument
        removed.
 
-       * info/session.c (info_read_and_dispatch): Don't check for ESC 
+       * info/session.c (info_read_and_dispatch): Don't check for ESC
        <key> input.
-       * info/infomap.c (section_to_keymaps): Copy key bindings M-<key> 
+       * info/infomap.c (section_to_keymaps): Copy key bindings M-<key>
        to ESC <key>.
-       (default_emacs_like_info_keys) (default_vi_like_info_keys): 
-       Refer to key sequences ESC <special key> with a sequence 
+       (default_emacs_like_info_keys) (default_vi_like_info_keys):
+       Refer to key sequences ESC <special key> with a sequence
        beginning with ESC instead of using KEYMAP_META.
 
 2014-11-06  Karl Berry  <address@hidden>
@@ -2913,7 +2948,7 @@
        * install-info/install-info.c: new options --defentry and
        --defsection (written for BSD).  Retrieved from
        
http://svnweb.freebsd.org/ports/head/print/texinfo/files/patch-install-info_install-info.c
-       
+
 2014-11-04  Karl Berry  <address@hidden>
 
        * doc/texinfo.texi: no leading @ characters in command index.
@@ -2920,33 +2955,33 @@
 
 2014-11-03  Gavin Smith  <address@hidden>
 
-       * info/man.c (get_manpage_node): Make returned node safely 
+       * info/man.c (get_manpage_node): Make returned node safely
        free-able with free_history_node.
-       (xrefs_of_manpage): Initialize line_number fields of REFERENCE 
+       (xrefs_of_manpage): Initialize line_number fields of REFERENCE
        objects.
 
 2014-11-02  Patrice Dumas  <address@hidden>
 
-       * tp/Texinfo/Convert/Plaintext.pm (_convert), 
+       * tp/Texinfo/Convert/Plaintext.pm (_convert),
        tp/Texinfo/Convert/Text.pm (heading): add an indent length
-       argument to heading() and use it to indent the underlying 
+       argument to heading() and use it to indent the underlying
        symbols.  Report from Mahlon Smith.
 
 2014-11-02  Gavin Smith  <address@hidden>
 
-       * info/indices.c (info_index_apropos): Include line numbers in 
+       * info/indices.c (info_index_apropos): Include line numbers in
        apropos node.
 
 2014-10-31  Gavin Smith  <address@hidden>
 
-       * info/info-utils.c (scan_node_contents): Return a new NODE 
-       object if node was from a file, and don't set reference list of 
+       * info/info-utils.c (scan_node_contents): Return a new NODE
+       object if node was from a file, and don't set reference list of
        passed-in node.
 
-       * info/nodes.c (info_node_of_tag): Always call 
-       scan_node_contents.  Node data like the contents pointer or 
+       * info/nodes.c (info_node_of_tag): Always call
+       scan_node_contents.  Node data like the contents pointer or
        reference list is not saved in the tag table any more.
-       (set_tag_nodelen): Passed in tag points to start of node 
+       (set_tag_nodelen): Passed in tag points to start of node
        separator instead of just after it.
 
        * info/nodes.h (N_Unstored): Symbol deleted.
@@ -2953,12 +2988,12 @@
        * info/footnotes.c (make_footnotes_node),
        * info/indices.c (info_index_apropos, info_virtual_index)
        * info/nodemenu.c (list_visited_nodes),
-       * info/echo-area.c (ea_possible_completions): Mark generated 
+       * info/echo-area.c (ea_possible_completions): Mark generated
        nodes with N_WasRewritten instead of N_Unstored.
 
        * info/nodes.h (NODE): Remove out-of-date comment.
-       * info/info-utils.c (free_history_node): No longer static.  
-       Check if argument is null.  Free node contents if N_WasRewritten 
+       * info/info-utils.c (free_history_node): No longer static.
+       Check if argument is null.  Free node contents if N_WasRewritten
        flag is set.  Free 'next', 'prev' and 'up' fields.
        * info/dir.c (dir_entry_of_infodir),
        * info/session.c (dump_node_to_stream, info_intuit_options_node)
@@ -2965,10 +3000,10 @@
        (info_search_internal),
        * info/info.c (add_initial_nodes, info_follow_menus),
        * info/indices.c (info_indices_of_file_buffer),
-       * info/footnotes.c (make_footnotes_node): Call free_history_node 
+       * info/footnotes.c (make_footnotes_node): Call free_history_node
        on nodes instead of calling 'free'.
 
-       * info/dir.c (build_dir_node): Call to scan_node_contents 
+       * info/dir.c (build_dir_node): Call to scan_node_contents
        updated.
        (get_dir_node): Copy some fields from saved dir node.
        (lookup_dir_entry): Don't call get_dir_node.
@@ -2975,40 +3010,40 @@
 
        * info/session.c (free_node_contents): Function deleted.
        * info/session.c (add_gcable_pointer, gcable_pointers)
-       (gcable_pointers_index, gcable_pointers_slots): Removed.  All 
+       (gcable_pointers_index, gcable_pointers_slots): Removed.  All
        calls to add_gcable_pointer removed.
        (gc_file_buffers_and_nodes): Don't process gcable_pointers.
 
-       * info/session.c (info_split_window): Copy some fields of node 
+       * info/session.c (info_split_window): Copy some fields of node
        object so they can be passed to free_history_node.
 
        * info/nodes.h (N_FromAnchor): Removed.
-       * info/info-utils.c (info_node_of_tag) <anchor>: Don't set 
+       * info/info-utils.c (info_node_of_tag) <anchor>: Don't set
        N_FromAnchor flag.
 
-       * info/info.c (info_find_matching_files): Free return value of 
+       * info/info.c (info_find_matching_files): Free return value of
        info_file_find_next_in_path.
-       (add_initial_nodes) <--node>: Don't duplicate a string which is 
+       (add_initial_nodes) <--node>: Don't duplicate a string which is
        lost.
-       * info/footnotes.c (make_footnotes_node): Copy terminating null 
+       * info/footnotes.c (make_footnotes_node): Copy terminating null
        byte into contents of footnote node.
-       * info/session.c (ask_for_search_string): Free returned string 
+       * info/session.c (ask_for_search_string): Free returned string
        even if it is of length 0.
 
 2014-10-29  Gavin Smith  <address@hidden>
 
        * info/session.c (SEARCH_STATE, push_isearch, pop_isearch)
-       (pop_isearch_prompt, incremental_search): Represent result of 
+       (pop_isearch_prompt, incremental_search): Represent result of
        search with an enum search_result instead of an int.
-       (incremental_search): Don't say an empty search string is 
+       (incremental_search): Don't say an empty search string is
        failing.
 
-       * info/search.c (regexp_search): Don't allocate a match list if 
+       * info/search.c (regexp_search): Don't allocate a match list if
        there aren't any matches.
-       * info/session.c (info_search_internal): Always free return 
+       * info/session.c (info_search_internal): Always free return
        value of info_get_node if it is not saved in the window.
 
-       * info/session.c (gc_file_buffers_and_nodes): Temporarily 
+       * info/session.c (gc_file_buffers_and_nodes): Temporarily
        disable freeing subfiles.
 
 2014-10-29  Karl Berry  <address@hidden>
@@ -3026,14 +3061,14 @@
 
 2014-10-29  Gavin Smith  <address@hidden>
 
-       * info/session.c (gc_file_buffers_and_nodes): Keep on checking 
-       for referenced file buffers after one is found for a node.  
+       * info/session.c (gc_file_buffers_and_nodes): Keep on checking
+       for referenced file buffers after one is found for a node.
        Report from Werner Lemberg.
        * info/t/gc-split.sh: New test.
 
 2014-10-29  Gavin Smith  <address@hidden>
 
-       * info/session.c (info_dispatch_on_key): Don't display a 
+       * info/session.c (info_dispatch_on_key): Don't display a
        completed key sequence when in the echo area.
 
 2014-10-28  Patrice Dumas  <address@hidden>
@@ -3050,9 +3085,9 @@
 
 2014-10-26  Gavin Smith  <address@hidden>
 
-       * info/info-utils.c (scan_reference_marker) Return value says 
+       * info/info-utils.c (scan_reference_marker) Return value says
        whether syntax was valid.
-       <cross-references>: Demand that cross-reference marker is 
+       <cross-references>: Demand that cross-reference marker is
        followed by whitespace.
        (scan_node_contents): Call to scan_reference_marker updated.
        * info/nodes.h (INFO_MENU_REGEXP, INFO_MENU_ENTRY_REGEXP)
@@ -3077,52 +3112,52 @@
 
 2014-10-24  Gavin Smith  <address@hidden>
 
-       * info/filesys.c (filesys_read_info_file): Disable call to 
+       * info/filesys.c (filesys_read_info_file): Disable call to
        convert_eols.
-       * info/info-utils.c (printed_representation): Make '\r' bytes 
+       * info/info-utils.c (printed_representation): Make '\r' bytes
        followed by a '\n' invisible.
        * info/Makefile.am: t/cr-tag-table.sh removed from XFAIL_TESTS.
-       
-       * info/info-utils.c (forward_to_info_syntax): Check for syntax 
+
+       * info/info-utils.c (forward_to_info_syntax): Check for syntax
        case-insensitively.
 
-       * info/indices.c (info_virtual_index): Pass arguments to 
+       * info/indices.c (info_virtual_index): Pass arguments to
        text_buffer_printf as intended.
 
 2014-10-22  Gavin Smith  <address@hidden>
 
        * info/info-utils.c (forward_to_info_syntax): New function.
-       (scan_node_contents): Call it instead of using regexp_search.  
-       This produces a speed improvement, noticable when using M-x 
+       (scan_node_contents): Call it instead of using regexp_search.
+       This produces a speed improvement, noticable when using M-x
        index-apropos or opening a long index node.
-       * info/indices.c (info_indices_of_file_buffer): Call strstr 
+       * info/indices.c (info_indices_of_file_buffer): Call strstr
        instead of string_in_line.
 
-       * info/filesys.c (convert_eols): Don't convert nulls in Info 
+       * info/filesys.c (convert_eols): Don't convert nulls in Info
        tags into spaces any more.
        * info/indices.c (info_index_apropos, info_virtual_index),
-       * info/session.c (allfiles_create_node): Add index tag with 
+       * info/session.c (allfiles_create_node): Add index tag with
        nulls instead of spaces.
 
-       * info/info-utils.c (forward_to_info_syntax, scan_info_tag): 
-       Look for tags starting with nulls instead of spaces.  This is 
-       slightly faster because nodes generally contain many space 
+       * info/info-utils.c (forward_to_info_syntax, scan_info_tag):
+       Look for tags starting with nulls instead of spaces.  This is
+       slightly faster because nodes generally contain many space
        characters.
        (skip_tag_contents): New function.
        (scan_info_tag): Call it.
-       * info/tag.c (tag_expand): Look for tag starting with a null 
-       instead of a space.  Skip past the tag even if no handler for it 
+       * info/tag.c (tag_expand): Look for tag starting with a null
+       instead of a space.  Skip past the tag even if no handler for it
        was found (for example, an index tag).
 
-       * info/info-utils.c (printed_representation): Don't check for an 
+       * info/info-utils.c (printed_representation): Don't check for an
        Info tag, as they should have been removed already.
        * info/window.c (info_tag): Function removed.
 
-       * info/indices.c (info_indices_of_file_buffer): Look for nodes 
+       * info/indices.c (info_indices_of_file_buffer): Look for nodes
        with "index" in the name as well as "Index".
 
-       * info/info-utils.c (forward_to_info_syntax): Don't search for 
-       "\n* Menu:" label separately, as this is comprised under 
+       * info/info-utils.c (forward_to_info_syntax): Don't search for
+       "\n* Menu:" label separately, as this is comprised under
        searching for "\n* ".
        (scan_node_contents): Conditional reordered.
 
@@ -3136,16 +3171,16 @@
 
 2014-10-19  Patrice Dumas  <address@hidden>
 
-       * tp/Texinfo/Parser.pm (_parse_def): on @def* lines, consider 
-       @-commands and text not separated by space to be a single 
+       * tp/Texinfo/Parser.pm (_parse_def): on @def* lines, consider
+       @-commands and text not separated by space to be a single
        word.  From Werner LEMBERG (http://savannah.gnu.org/bugs/?43406).
 
 2014-10-16  Patrice Dumas  <address@hidden>
 
        * tp/Texinfo/Convert/Plaintext.pm (_convert): with @w and @tie,
-       do not set set_space_protection ignore_column argument, such 
+       do not set set_space_protection ignore_column argument, such
        that the whole block goes to the next line.  Report from
-       Werner LEMBERG (http://savannah.gnu.org/bugs/?43407) and Mahlon 
+       Werner LEMBERG (http://savannah.gnu.org/bugs/?43407) and Mahlon
        Smith.
 
 2014-10-15  Gavin Smith  <address@hidden>
@@ -3155,14 +3190,14 @@
 2014-10-15  Gavin Smith  <address@hidden>
 
        * info/info.c (add_initial_nodes): FILE_BUFFER argument removed.
-       <--usage>: Display an error meesage if there is no node to give 
+       <--usage>: Display an error meesage if there is no node to give
        a file to look for an invocation node.
        (initial_fb): Variable removed.
 
        * info/info.c (info_short_help),
-       * doc/info-stnd.texi (Invoking Info): Document "info 
+       * doc/info-stnd.texi (Invoking Info): Document "info
        '(file)node'" invocation.
-       * doc/info-stnd.texi (Invoking Info): Refer to "search path" 
+       * doc/info-stnd.texi (Invoking Info): Refer to "search path"
        instead of "INFOPATH".
        (Node Commands): Add "vi-like operation" for a binding.
 
@@ -3169,29 +3204,29 @@
 2014-10-14  Gavin Smith  <address@hidden>
 
        * info/info.c (get_initial_file) <file name lookup>,
-       (main) <--file>, <'(file)node' as first argument>: Add a node to 
+       (main) <--file>, <'(file)node' as first argument>: Add a node to
        ref_list from the file we found.
-       (add_initial_nodes): Don't fall back to a "Top" node as it 
-       should already be in ref_list.  If any "--node" argument given, 
+       (add_initial_nodes): Don't fall back to a "Top" node as it
+       should already be in ref_list.  If any "--node" argument given,
        discard the first element of ref_list.
 
-       * info/info-utils.c (info_new_reference): Duplicate arguments 
+       * info/info-utils.c (info_new_reference): Duplicate arguments
        into new storage.  All callers updated.
 
 2014-10-13  Gavin Smith  <address@hidden>
 
-       * info/info.c (main) <--all not used>: Check if the first 
-       non-option argument is of the form "(file)node", and if so add 
+       * info/info.c (main) <--all not used>: Check if the first
+       non-option argument is of the form "(file)node", and if so add
        it to the list of nodes to start with.
-       (add_initial_nodes) <user_nodenames>: Duplicate filename string.  
+       (add_initial_nodes) <user_nodenames>: Duplicate filename string.
        Allow nodename to be empty.
-       <following menus>: Use a node from our list of initial nodes to 
+       <following menus>: Use a node from our list of initial nodes to
        start at if initial_file is null.
 
-       * info/t/spec-file-node.sh, info/t/spec-no-node.sh, 
+       * info/t/spec-file-node.sh, info/t/spec-no-node.sh,
        info/t/spec-menu.sh: New tests.
 
-       * info/info.c (get_initial_file): Don't take a user-specified 
+       * info/info.c (get_initial_file): Don't take a user-specified
        filename as an argument.
        <--file>: Moved to main.
 
@@ -3202,27 +3237,27 @@
 
 2014-10-09  Gavin Smith  <address@hidden>
 
-       * info/indices.c (info_index_search): Call 
-       info_indices_of_file_buffer before prompting user.  Display an 
+       * info/indices.c (info_index_search): Call
+       info_indices_of_file_buffer before prompting user.  Display an
        error message if no index is found.
-       (info_virtual_index): Match error message to that used 
+       (info_virtual_index): Match error message to that used
        elsewhere.
        * info/t/no-index.sh, info/t/index-completing.sh: New tests.
 
-       * info/echo-area.c (info_read_and_dispatch_in_echo_area): 
+       * info/echo-area.c (info_read_and_dispatch_in_echo_area):
        Recalculate line map after each user command.
        (input_line, input_line_prompt): Comments added.
-       [FD_SET && hpux, FD_SET && !hpux] (fd_set_cast): Remove unused 
+       [FD_SET && hpux, FD_SET && !hpux] (fd_set_cast): Remove unused
        macro.
-       * info/window.c (window_point_to_column): Return left-most 
+       * info/window.c (window_point_to_column): Return left-most
        column for multi-column characters.
 
 2014-10-08  Gavin Smith  <address@hidden>
 
-       * info/indices.c (info_index_search): Don't duplicate a string 
+       * info/indices.c (info_index_search): Don't duplicate a string
        just to free the original.
        (look_in_indices): Save search string in 'index_search'.
-       (info_index_apropos, info_virtual_index): Prompt with and 
+       (info_index_apropos, info_virtual_index): Prompt with and
        default to the last search string.
 
 2014-10-08  Gavin Smith  <address@hidden>
@@ -3233,29 +3268,29 @@
 
        * info/man.c: Don't include sys/ioctl.h.
 
-       * info/infomap.c (fetch_user_maps): Don't print an error message 
+       * info/infomap.c (fetch_user_maps): Don't print an error message
        if ".infokey" wasn't found.  Report from Karl Berry.
 
-       * info/info.c (main) <--all>: If only one match, don't display a 
+       * info/info.c (main) <--all>: If only one match, don't display a
        menu of matches (this is what happened before).
        * info/t/all-only.sh: New test.
 
-       * info/terminal.c (initialize_byte_map): Add byte sequences 
-       beginning ESC [ and ESC O representing cursor keys.  Previously 
-       these byte sequences were present in 
+       * info/terminal.c (initialize_byte_map): Add byte sequences
+       beginning ESC [ and ESC O representing cursor keys.  Previously
+       these byte sequences were present in
        default_emacs_like_info_keys before changes on 2014-06-28.
 
-       * configure.ac: Remove use of AC_HEADER_TIOCGWINSZ.  Add 
+       * configure.ac: Remove use of AC_HEADER_TIOCGWINSZ.  Add
        "sys/ioctl.h" to argument of AC_CHECK_HEADERS.
-       * info/termdep.h: Make include of sys/ioctl.h conditional on 
-       [HAVE_SYS_IOCTL_H] instead of [GWINSZ_IN_SYS_IOCTL].  This gives 
+       * info/termdep.h: Make include of sys/ioctl.h conditional on
+       [HAVE_SYS_IOCTL_H] instead of [GWINSZ_IN_SYS_IOCTL].  This gives
        the declaration of ioctl for Cygwin.  Report by Ken Brown.
-       * info/session.c: Include of sys/ioctl.h conditional on 
+       * info/session.c: Include of sys/ioctl.h conditional on
        [HAVE_SYS_IOCTL_H] instead of [!__MINGW32__].
 
 2014-10-06  Ken Brown  <address@hidden> (tiny change)
 
-       * system.h [O_BINARY && !__MSDOS__]: Don't redefine setmode if 
+       * system.h [O_BINARY && !__MSDOS__]: Don't redefine setmode if
        it is already defined.
 
 2014-10-03  Gavin Smith  <address@hidden>
@@ -3263,9 +3298,9 @@
        * doc/info-stnd.texi (Invoking Info): Add examples with --node.
        * info/info.c (info_short_help): Help text changed.
 
-       * doc/texinfo.texi (Node Line Requirements): Tweak wording to 
-       avoid implying that a node name with normalized whitespace has 
-       to be used in all circumstances.  Report by Vincent Belaïche 
+       * doc/texinfo.texi (Node Line Requirements): Tweak wording to
+       avoid implying that a node name with normalized whitespace has
+       to be used in all circumstances.  Report by Vincent Belaïche
        2014-08-21 (bug #43042).
 
 2014-10-03  Ken Brown  <address@hidden> (tiny change)
@@ -3278,8 +3313,8 @@
 
 2014-09-30  Gavin Smith  <address@hidden>
 
-       * info/session.c (info_move_to_next_xref) 
-       (info_move_to_prev_xref): If an argument is given with C-u, go 
+       * info/session.c (info_move_to_next_xref)
+       (info_move_to_prev_xref): If an argument is given with C-u, go
        forward or backward that number of references.
        * info/t/tab-argument.sh: New test.
 
@@ -3287,53 +3322,53 @@
 
 2014-09-29  Gavin Smith  <address@hidden>
 
-       * info/indices.c (info_index_search, do_info_index_search): 
+       * info/indices.c (info_index_search, do_info_index_search):
        Getting user input moved from do_info_index_search.
 
-       * info/indices.c (next_index_match, info_next_index_match): 
+       * info/indices.c (next_index_match, info_next_index_match):
        Function split out.
        (look_in_indices): Return value as intended.
 
-       * info/indices.c, info/session.c (allfiles_node) 
+       * info/indices.c, info/session.c (allfiles_node)
        (info_all_files): Moved between files.
-       * info/session.c (move_to_goal_column): Return type declared as 
+       * info/session.c (move_to_goal_column): Return type declared as
        void.
        (info_dispatch_on_key): Return values as intended.
 
-       * info/indices.c (report_index_match): Split out from 
+       * info/indices.c (report_index_match): Split out from
        info_next_index_match.
 
-       * info/indices.c (next_index_match): Don't take index argument; 
-       always operate on index_index.  Take FILE_BUFFER argument.  
-       Update index_offset.  Call to info_indices_of_file_buffer to 
-       update index_index moved from do_info_index_search.  All callers 
+       * info/indices.c (next_index_match): Don't take index argument;
+       always operate on index_index.  Take FILE_BUFFER argument.
+       Update index_offset.  Call to info_indices_of_file_buffer to
+       update index_index moved from do_info_index_search.  All callers
        updated.
-       * info/info.c (main) <--index-search>: Call next_index_match and 
+       * info/info.c (main) <--index-search>: Call next_index_match and
        report_index_match.
 
-       * info/indices.c (do_info_index_search): Merged into 
+       * info/indices.c (do_info_index_search): Merged into
        info_index_search.
        (info_entry_exists): Function removed.
-       (report_index_match): Don't internationalize a string that 
+       (report_index_match): Don't internationalize a string that
        should never be displayed.
 
-       * info/indices.c (info_indices_of_file_buffer): Check if we have 
+       * info/indices.c (info_indices_of_file_buffer): Check if we have
        already built an index moved from next_index_match.
-       (info_index_search) <empty search string>: Call 
-       info_indices_of_file_buffer.  Always exit function. 
+       (info_index_search) <empty search string>: Call
+       info_indices_of_file_buffer.  Always exit function.
 
 2014-09-28  Gavin Smith  <address@hidden>
 
-       * info/indices.c (info_index_apropos): Strip any suffix like 
-       ".info" from uses of filename in generated node contents.  Mark 
-       node contents as an index.  Comment added mentioning problem 
-       with character encodings.  Introductory text changed to be more 
+       * info/indices.c (info_index_apropos): Strip any suffix like
+       ".info" from uses of filename in generated node contents.  Mark
+       node contents as an index.  Comment added mentioning problem
+       with character encodings.  Introductory text changed to be more
        descriptive.
 
        * info/indices.c (look_in_indices): New function, split from:
        * info/info.c (add_initial_nodes) <index search>
        * info/indices.c (info_indices_of_file_buffer): Declared static.
-       Return type is void.  Clear 'index_index' variable if no file 
+       Return type is void.  Clear 'index_index' variable if no file
        buffer.
        (index_nodenames): Comment changed.
 
@@ -3346,23 +3381,23 @@
        minor typos.
 
        * info/session.c (move_to_goal_column): New function, split from
-       info_next_line and info_prev_line.  Interpret -1 as goal column to 
+       info_next_line and info_prev_line.  Interpret -1 as goal column to
        mean the current column.
        (info_show_point): Don't set goal_column.
-       (info_read_and_dispatch): Set goal_column to -1 unless previous 
+       (info_read_and_dispatch): Set goal_column to -1 unless previous
        commmand was next-line or prev-line.
        (info_search_in_node_internal): Don't set goal_column.
        * info/window.c (window_set_node_of_window): Don't set goal_column.
        (window_make_window): Initialize goal_column to -1.
 
-       * info/session.c (info_display_file_info): Display name of subfile if 
+       * info/session.c (info_display_file_info): Display name of subfile if
        in split file.
 
 2014-09-22  Gavin Smith  <address@hidden>
 
-       * info/session.c (info_dispatch_on_key): Don't set 
+       * info/session.c (info_dispatch_on_key): Don't set
        ea_last_executed_command.
-       (info_numeric_arg_digit_loop): Don't declare with 
+       (info_numeric_arg_digit_loop): Don't declare with
        DECLARE_INFO_COMMAND.
        * info/echo-area.c (ea_last_executed_command): Declared static.
        (read_and_dispatch_in_echo_area): Set ea_last_executed_command.
@@ -3369,7 +3404,7 @@
 
 2014-09-21  Gavin Smith  <address@hidden>
 
-       * info/session.c (info_read_dispatch): Return pointer to function 
+       * info/session.c (info_read_dispatch): Return pointer to function
        implementing Info command instead of calling it.  All callers updated.
 
 2014-09-18  Gavin Smith  <address@hidden>
@@ -3482,7 +3517,7 @@
        (terminal_can_scroll_region): New variable.
        (term_cs, term_SF, term_SR): New variables.
        (terminal_initialize_terminal): Set them.
-       
+
        * info/window.c (set_window_pagetop): Pass top and bottom of
        window being scrolled to display_scroll_display.
 
@@ -3755,7 +3790,7 @@
 
 2014-08-23  Karl Berry  <address@hidden>
 
-       * Texinfo/Convert/Plaintext.pm (converter_initialize): put 
+       * Texinfo/Convert/Plaintext.pm (converter_initialize): put
        push_top_formatter after setting 'fillcolumn' such that it is
        taken into account.
 
@@ -3905,7 +3940,7 @@
        * info/t/node-no-file.sh: New test.
 
 2014-08-15  Gavin Smith  <address@hidden>
-       
+
        * info/session.c (match_in_match_list): Arguments changed.
        (info_search_in_node_internal): Function declared static.
        Arguments changed.  Remove node name search.
@@ -3977,7 +4012,7 @@
        info_search_1.
        (incremental_search): Remove check on local variable for non-regexp
        searches.
-       
+
 2014-08-08  Gavin Smith  <address@hidden>
 
        * info/session.c (incremental_search): Code after 'after_search' label
@@ -4223,7 +4258,7 @@
        free it later.
 
        * info/t/relative-reference.sh: New test.
-       * info/t/Init-inter.inc (run_ginfo): Inform about program failure 
+       * info/t/Init-inter.inc (run_ginfo): Inform about program failure
        on pipe.
        * info/t/Timeout-test.inc: Check for failure message.
 
@@ -4329,7 +4364,7 @@
        exit.
 
        * system.h [O_BINARY, !O_BINARY] (HAS_SLASH): New macro.
-       * info/filesys.c (info_find_fullpath) 
+       * info/filesys.c (info_find_fullpath)
        * info/info.c (main)
        * info/nodes.c (info_find_file): Call it.
 
@@ -4347,7 +4382,7 @@
 2014-07-05  Gavin Smith  <address@hidden>
 
        * info/dir.c (dir_entry_of_infodir)
-       * info/footnotes.c (make_footnotes_node) 
+       * info/footnotes.c (make_footnotes_node)
        * info/session.c (info_intuit_options_node): Free return value of
        info_get_node.
 
@@ -4372,7 +4407,7 @@
        * info/nodes.h (NODE): Fields 'parent', 'filename' removed.  Fields
        'fullpath', 'subfile' added.
        (N_Subfile): New symbol.
-       
+
        * info/nodes.c (info_load_file): Arguments changed.  Callers updated.
        Set N_Subfile flag for subfiles.
 
@@ -4734,7 +4769,7 @@
        (read_quoted_string): Set output parameter to null on error.
        (avoid_see_see): Include '(' character when searching backward.
        (scan_reference_target): Call read_bracketed_filename instead of
-       info_parse_node to get filename. 
+       info_parse_node to get filename.
        (scan_node_contents): Check if cross-reference within parentheses was a
        "*note".
        * info/t/file-file-with-dot.sh: New test.
@@ -4860,7 +4895,7 @@
        * info/session.c (info_next_line, info_prev_line): Call point_next_line
        and point_prev_line to handle traversing node hierarchy.
 
-       * info/window.c (window_initialize_windows, window_make_window): 
+       * info/window.c (window_initialize_windows, window_make_window):
        Initialize goal_column fields to 0.
        (window_get_goal_column): Removed.
        * info/session.c (info_read_and_dispatch): Don't reset goal_column.
@@ -4906,7 +4941,7 @@
        stand-alone and Emacs Info both use the mode line.
        Use x instead of weird C-x 0 to get rid of help msg.
        Suggestion from Benno Schulenberg, 07 May 2014 23:06:54.
-       
+
        * doc/info-stnd.texi: "mode line", "screenful".
 
 2014-06-05  Gavin Smith  <address@hidden>
@@ -5162,10 +5197,10 @@
        (point_next_line, point_prev_line, point_forward_char)
        (point_backward_char, point_forward_word, point_backward_word):
        Rely on line map already being calculated for current line.
-       
+
        (point_skip_ws_forward): Merged into point_forward_word.
        (point_skip_ws_backward): Merged into point_backward_word.
-       
+
        (looking_at_alnum): New function.
        (_looking_at_newline, looking_at_newline): Renamed.
        (point_forward_word, point_backward_word): Call looking_at_alnum.
@@ -5210,7 +5245,7 @@
 
        * info/infodoc.c (create_internal_info_help_node): Show program
        version in help window.
-       
+
        * info/session.c (info_info_version): New command to show version
        of program.
        * NEWS,
@@ -5236,7 +5271,7 @@
        (info_menu_digit): Formatting.
 
 2014-05-25  Gavin Smith  <address@hidden>
-       
+
        * info/session.c (info_scroll_forward, info_scroll_backward)
        (info_scroll_forward_set_window, info_scroll_backward_set_window)
        (info_scroll_forward_page_only, info_scroll_backward_page_only)
@@ -5256,7 +5291,7 @@
        to iterate over INFOPATH.  Don't take a path argument.  Callers
        updated.
        (info_file_in_path): Don't take a path argument.  All callers updated.
-       
+
        * info/filesys.c, info/infopath.c (extract_colon_unit): Function
        definition moved.
 
@@ -5454,11 +5489,11 @@
 
 2014-05-18  Patrice Dumas  <address@hidden>
 
-       * tp/Texinfo/Convert/Converter.pm (output): warn about 
+       * tp/Texinfo/Convert/Converter.pm (output): warn about
        incompatibilities between output and split only if split.
        * tp/tests/Makefile.am, tp/tests/reference/, tp/tests/t/: add tests
        for stdout.
-       * install-info/tests/Makefile.am (EXTRA_DIST): use 
+       * install-info/tests/Makefile.am (EXTRA_DIST): use
        the correct file ii-0054-input-info-file.gz.
        * tp/texi2any.pl: put installation directory last in @INC,
        in order to have -I perl arguments take precedence.  Report
@@ -5613,7 +5648,7 @@
        assumed to fail, while there is an unknown output since different
        perl verions treat NEL differently.
        * tp/Texinfo/Common.pm(is_content_empty),
-       tp/t/test_is_content_empty.t: check if a tree item contains non empty 
+       tp/t/test_is_content_empty.t: check if a tree item contains non empty
        content.
 
 2014-05-10  Gavin Smith  <address@hidden>
@@ -5738,7 +5773,7 @@
 
        * info/info-utils.c (scan_node_contents): Pass offset relative to
        start of node contents of "*" starting reference to
-       scan_reference_label.  Report by Benno Schulenberg 8th May, 2014. 
+       scan_reference_label.  Report by Benno Schulenberg 8th May, 2014.
 
 2014-05-08  Gavin Smith  <address@hidden>
 
@@ -5839,8 +5874,8 @@
 
        * tp/Makefile.am (install-exec-hook): use $(transform) for
        --program-suffix.  Report from Glenn Morris.
-       * Pod-Simple-Texinfo/lib/Pod/Simple/Texinfo.pm, 
-       Pod-Simple-Texinfo/pod2texi.pl: add texinfo_sectioning_style 
+       * Pod-Simple-Texinfo/lib/Pod/Simple/Texinfo.pm,
+       Pod-Simple-Texinfo/pod2texi.pl: add texinfo_sectioning_style
        'appendix' and command-line option --appendix-sections.
 
 2014-05-05  Karl Berry  <address@hidden>
@@ -6189,7 +6224,7 @@
        (info_man): Get man page via info_get_node instead of
        info_parse_and_select.
 
-       Note: These changes stop the undocumented and probably 
+       Note: These changes stop the undocumented and probably
        unintended support of invoking the standalone Info program as
        "info '(filename)nodename'", which only worked by accident.
 
@@ -6262,12 +6297,12 @@
        * info/window.c (window_make_modeline): Subtract height of
        window from length of node when calculating percentage
        position in node so that it smoothly scales from 0% to 100%.
-       
+
 2014-04-22  Gavin Smith  <address@hidden>
 
        * info/info-utils.c (info_get_labeled_reference)
        (info_menu_entry_by_label): Renamed.  Only look for menu items.
-       
+
        * info/man.c (manpage_node_of_file_buffer): Set nodelen and nodestart
        field in returned NODE.
        (xrefs_of_manpage): If no references, return array with a single
@@ -6276,7 +6311,7 @@
        set, display less information in status bar.
        * info/nodes.c (get_node_length): Function no longer static.
        Definition moved in file.
-       
+
 2014-04-22  Gavin Smith  <address@hidden>
 
        * info/info-utils.c, info/info-utils.h (info_menu_of_node)
@@ -6295,7 +6330,7 @@
        completion_exclude_func.
        * info/session.c (exclude_cross_references, exclude_menu_items)
        (exclude_nothing): New static functions.
-       
+
        * info/footnotes.c (make_footnotes_node)
        * info/indices.c (info_indices_of_file_buffer, select_visited_node)
        (apropos_in_all_indices)
@@ -6303,7 +6338,7 @@
        * info/session.c (forward_move_node_structure)
        (backward_move_node_structure)
        (info_handle_pointer, select_menu_digit)
-       (info_menu_digit, info_menu_or_ref_item, info_visit_menu) 
+       (info_menu_digit, info_menu_or_ref_item, info_visit_menu)
        (info_follow_menus, entry_in_menu, info_intuit_options_mode)
        (info_select_reference_this_line, info_move_to_xref)
        (dump_node_to_stream): Use node reference list from
@@ -6321,14 +6356,14 @@
        node to footnotes node.  Set filename field from main node.
        * info/info-utils.c (info_copy_references): New function.
        (info_copy_reference): Copy type field.
-       
+
        * info/indices.c (info_index_apropos, create_virtindex_node)
        * info/nodemenu.c (get_visited_nodes): Call scan_node_contents on new
        node.
-       
+
        * info/info-utils.c (internal_info_node_p): Remove code disabled by
        preprocessor.
-       
+
        * info/session.c (forget_window_and_nodes): Call info_free_references.
 
 2014-04-21  Gavin Smith  <address@hidden>
@@ -6340,9 +6375,9 @@
        (output_bytes_difference): New file-level variables.
        [HAVE_ICONV] (file_is_in_utf8, iconv_to_output, iconv_to_utf8):
        New file-level variables.
-       (init_conversion, close_conversion, init_output_stream) 
+       (init_conversion, close_conversion, init_output_stream)
        (copy_direct, copy_converting, degrade_utf8)
-       (copy_input_to_output, skip_input, write_extra_bytes_to_output) 
+       (copy_input_to_output, skip_input, write_extra_bytes_to_output)
        (write_tag_contents, underlining_on, underlining_off)
        (parse_top_node_line, scan_reference_label, scan_reference_target)
        (colon_after_newline, scan_node_contents): New function
@@ -6351,7 +6386,7 @@
 
        * info/info-utils.c (info_parse_node): Return length of parsed
        node label.
-       
+
        * info/info-utils.c (text_buffer_space_left): New function.
        [HAVE_ICONV] (text_buffer_iconv): New function.
 
@@ -6442,10 +6477,10 @@
        nodelen to -1 for all tags.
        (get_tags_of_indirect_tags_table): Set N_TagsIndirect in flags before
        calling get_nodes_of_tags_table so it will be set on tag table entries.
-       
+
        * info/nodes.h: (N_WasRewritten): New preprocessor symbol.
        (NODE.content_cache): Field deleted.
-       
+
        * info/nodes.c (adjust_nodestart): Do not read or write contents field
        of tag.  Alter nodestart field.  Call find_node_in_binding instead
        of find_node_separator.  Arguments changed.
@@ -6456,12 +6491,12 @@
        update contents field of tag and set N_WasRewritten flag.  Set
        body_start on tag table entry instead of returned node.  Acquire node
        by copying from tag table.
-       
+
        * info/search.c (find_node_separator): Allow node separator to start
        anywhere from binding->start inclusive to binding->end exclusive.  Add
        comment to clarify that we won't read past the end of allocated space.
        Reformat logical expression.
-       
+
        * info/session.c (free_node_contents): New function.  Free contents of
        rewritten nodes in tag table.
        (info_delete_window): Call info_gc_file_buffers.
@@ -6606,7 +6641,7 @@
 
        * NEWS,
        * doc/texinfo.texi: mention --plaintext splitting.
-       
+
        * doc/info-stnd.texi: tweak infopath-no-defaults and --init-file
        wording.
        * NEWS: mention these new features.
@@ -6613,17 +6648,17 @@
 
 2014-04-08  Patrice Dumas  <address@hidden>
 
-       * tp/Texinfo/Convert/Converter.pm (_id_to_filename, 
+       * tp/Texinfo/Convert/Converter.pm (_id_to_filename,
        _sectioning_command_normalized_filename, _node_filename,
-       _set_element_file, _top_node_filename, _get_element, 
+       _set_element_file, _top_node_filename, _get_element,
        _set_pages_files, output),
-       * tp/Texinfo/Convert/HTML.pm: move generic functions to Converter.pm 
-       and modify default output() to follow the same rules as HTML.pm 
+       * tp/Texinfo/Convert/HTML.pm: move generic functions to Converter.pm
+       and modify default output() to follow the same rules as HTML.pm
        for splitting.
        * tp/Texinfo/Convert/Plaintext.pm (_convert_node):
        rename function as _convert_element.
        (convert_tree): add to be able to work with Converter.pm output().
-       * tp/Texinfo/Convert/Plaintext.pm, 
+       * tp/Texinfo/Convert/Plaintext.pm,
        tp/Texinfo/Convert/Info.pm, tp/texi2any.pl: use default
        output() from Converter.pm for plaintext.  Share less defaults
        with Info.pm.  Allow splitting plaintext.
@@ -6665,10 +6700,10 @@
        * info/info.c (main): Make --directory options build up infopath
        in the order they were specified.  Call infopath_init after
        options are read instead of before.
-       
+
        * info/infopath.c, info/variables.c (info_variables)
        (infopath_no_defaults_p): New variable for user, info-no-defaults.
-       
+
        * info/infopath.c (infopath_init): Do not include $infodir and
        $datadir/info in search path if info-no-defaults=On.
 
@@ -6753,11 +6788,11 @@
 
 2014-02-15  Patrice Dumas  <address@hidden>
 
-       * Texinfo/Convert/DocBook.pm: do not use lineannotation for 
+       * Texinfo/Convert/DocBook.pm: do not use lineannotation for
        @r, the semantics are not the same.  Report from Aharon Robbins.
 
        * Texinfo/Convert/Plaintext.pm (_printindex_formatted),
-       * Texinfo/Common.pm, 
+       * Texinfo/Common.pm,
        * doc/texinfo.texi: new customization variable
         INDEX_SPECIAL_CHARS_WARNING to warn about invalid index entries in
         Info.  Report from Glenn Morris.
@@ -6861,7 +6896,7 @@
        in case the number of Info files decreases.
 
        * doc/texinfo.tex (\urefbreakfinish): change the default PDF
-       output to show the url even if the second arg is given, like DVI.  
+       output to show the url even if the second arg is given, like DVI.
        Suggestion from Arnold Robbins.
         (\ifurefurlonlylink): new ``secret'' conditional for the previous
         PDF output: only show the second arg, with the url as the link target.
@@ -6927,7 +6962,7 @@
        and has been for a long time.
        (\activetilde, \activehat, \activeless, \activegtr): factor
        out the normal Texinfo definitions, now also used in \texinfochars.
-       
+
        All this due to a bug report from Charlie Zender where ' in the
        @settitle caused failures when a page break occurred inside @tex,
        help-texinfo 08 Sep 2013 16:26:16.
@@ -6943,15 +6978,15 @@
 
        * NEWS,
        * doc/texinfo.texi (Node Line Requirements, Menu Parts,
-       Cross Reference Parts, Other Customization variables): 
+       Cross Reference Parts, Other Customization variables):
        mention Info warnings and INFO_SPECIAL_CHARS_WARNING.
        Other small tweaks.
 
 2013-09-07  Patrice Dumas  <address@hidden>
 
-       * tp/texi2any.pl: handle plaintext as other formats to set 
+       * tp/texi2any.pl: handle plaintext as other formats to set
        expanded formats.
-       * tp/Texinfo/Parser.pm: accept matching braces in ignored 
+       * tp/Texinfo/Parser.pm: accept matching braces in ignored
        @inline* commands.
        * tp/Texinfo/Common.pm(@variable_string_settables),
        tp/Texinfo/Convert/Info.pm(_node), tp/Texinfo/Convert/Plaintext.pm:
@@ -6963,10 +6998,10 @@
 
 2013-09-06  Patrice Dumas  <address@hidden>
 
-       * tp/Texinfo/Parser.pm, 
+       * tp/Texinfo/Parser.pm,
        tp/Texinfo/Convert/HTML.pm(_convert_inline_command),
        tp/Texinfo/Convert/Plaintext.pm, tp/Texinfo/Convert/DocBook.pm,
-       tp/Texinfo/Convert/Text.pm, tp/Texinfo/Common.pm, 
+       tp/Texinfo/Convert/Text.pm, tp/Texinfo/Common.pm,
        tp/Texinfo/Convert/TexinfoXML.pm:
        implement @inlinefmtifelse, @inlineifclear, @inlineifset.
 
@@ -6984,7 +7019,7 @@
 
 2013-08-27  Patrice Dumas  <address@hidden>
 
-       * tp/Texinfo/Parser.pm: add \r to regexps to exclude it when 
+       * tp/Texinfo/Parser.pm: add \r to regexps to exclude it when
        excluding newlines.  Report from Karl.
 
 2013-08-26  Karl Berry  <address@hidden>
@@ -7007,7 +7042,7 @@
 
 2013-08-24  Patrice Dumas  <address@hidden>
 
-       * tp/Texinfo/Convert/Info.pm (output), 
+       * tp/Texinfo/Convert/Info.pm (output),
        tp/Texinfo/Convert/Plaintext.pm: collect text before first node
        and output the same header for every Info output files using that
        text.  Based on a report from Juri Linkov and analysis of Sergey.
@@ -7042,7 +7077,7 @@
        * doc/texinfo.tex (\sectionheading): must do
        \global\let\prevsectiondefs, since we're inside a group.
        Otherwise, \thissection is lost in PDF output if an xref intervenes
-       due to the color \mark.  Report from Thien-Thi Nguyen, 
+       due to the color \mark.  Report from Thien-Thi Nguyen,
        16 Feb 2013 12:06:17.
 
 2013-08-20  Sergey Poznyakoff  <address@hidden>
@@ -7194,7 +7229,7 @@
 
        * doc/texinfo.texi (@settitle): typo (missing "to"), report from
        Alex Sassmannshausen, 26 Apr 2013 14:21:38.
-       
+
        * doc/texinfo.texi (Indicating): rewrite intro to avoid implying
        that users can change at will what Texinfo's commands output.
        (Defining New Texinfo Commands): and avoid implying that macros
@@ -7244,12 +7279,12 @@
        * tp/Texinfo/Convert/HTML.pm(output): sort when processing renamed
        nodes to have a reproducible error output.  Report by Karl.
        * Texinfo/Convert/Converter.pm(_informative_command_value,
-       _informative_command): do not set informative command value if 
+       _informative_command): do not set informative command value if
        value is not defined.
 
 2013-08-10  Patrice Dumas  <address@hidden>
 
-       * tp/Texinfo/Convert/Line.pm, Texinfo/Convert/Paragraph.pm: preserve 
+       * tp/Texinfo/Convert/Line.pm, Texinfo/Convert/Paragraph.pm: preserve
        spaces coming from the document.
        Do not break words at non-breaking spaces.
        * Pod-Simple-Texinfo/t/Pod-Simple-Texinfo.t: correctly close =over
@@ -7257,9 +7292,9 @@
        Mark as TODO the test that changes depending on Pod::Simple version.
        Report by Karl.
        * tp/Texinfo/Parser.pm(_next_text): add a end of line at the end of
-       files when there is one missing.  Found out in 
+       files when there is one missing.  Found out in
        https://bugzilla.redhat.com/show_bug.cgi?id=950644
-       * tp/Makefile.am: reorder alphabetically test input files.  
+       * tp/Makefile.am: reorder alphabetically test input files.
        Distribute missing test files.
        * tp/t/test_utils.pl(test): allow for marking tests as TODO.  Use
        this facility to mark a test of all_spaces that fails on perl 5.10
@@ -7283,9 +7318,9 @@
 
 2013-08-07  Patrice Dumas  <address@hidden>
 
-       * tp/Texinfo/Convert/HTML.pm(_default_protect_text), 
+       * tp/Texinfo/Convert/HTML.pm(_default_protect_text),
        tp/init/html32.pm: protect ^L with an entity.
-       * tp/Texinfo/Convert/Plaintext.pm: output ^L between 
+       * tp/Texinfo/Convert/Plaintext.pm: output ^L between
        paragraphs.
 
 2013-08-06  Patrice Dumas  <address@hidden>
@@ -7298,13 +7333,13 @@
 2013-08-06  Patrice Dumas  <address@hidden>
 
        * Texinfo/Parser.pm: keep form-feed in @set value.
-       * util/texinfo.dtd, util/txixml2texi.pl, 
+       * util/texinfo.dtd, util/txixml2texi.pl,
        tp/Texinfo/Convert/TexinfoXML.pm(_protect_text): output form-feed
-       as entity in XML, when possible.  Handle form-feeds in 
+       as entity in XML, when possible.  Handle form-feeds in
        txixml2texi.pl too.
        * tp/Texinfo/Convert/TexinfoXML.pm(_xml_attributes),
        util/texinfo.dtd, util/txixml2texi.pl: protect form-feed in
-       attributes by using an entity that becomes a literal \f. 
+       attributes by using an entity that becomes a literal \f.
        Double \ in attributes too.
 
 2013-08-06  Karl Berry  <address@hidden>
@@ -7336,7 +7371,7 @@
 
 2013-06-25  Patrice Dumas  <address@hidden>
 
-       * tp/Texinfo/Convert/HTML.pm: use "prev" for rel attribute and not 
+       * tp/Texinfo/Convert/HTML.pm: use "prev" for rel attribute and not
        "previous", as prev is the preferred one.  Report by Tom Tromey.
 
 2013-06-21  Karl Berry  <address@hidden>
@@ -7468,10 +7503,10 @@
        * configure.ac: set DIFF_A_OPTION to -a, and not DIFF_U_OPTION.
        * tp/Texinfo/Convert/Plaintext.pm: do not consider an empty line
        at the end of a preformatted format as counting as an empty line
-       in order to output an empty line following the preformatted format 
+       in order to output an empty line following the preformatted format
        too.  Karl report.
        * tp/Texinfo/Convert/DocBook.pm: add support for special docbook
-       sectioning elements with special node names and @unnumbered. 
+       sectioning elements with special node names and @unnumbered.
        Feature asked for by Aharon Robbins, syntax by Karl.
 
 2013-03-31  Sergey Poznyakoff  <address@hidden>
@@ -7521,7 +7556,7 @@
 
 2013-03-16  Patrice Dumas  <address@hidden>
 
-       * tp/Texinfo/Parser.pm (_parse_texi): accept the same 
+       * tp/Texinfo/Parser.pm (_parse_texi): accept the same
        character in @value as in @set.
 
 2013-03-14  Karl Berry  <address@hidden>
@@ -7586,7 +7621,7 @@
 
 2013-03-02  Patrice Dumas  <address@hidden>
 
-       * tp/Texinfo/Parser.pm: put the first line in 'pending' instead of 
+       * tp/Texinfo/Parser.pm: put the first line in 'pending' instead of
        seeking back in the input stream.
 
 2013-02-28  Patrice Dumas  <address@hidden>
@@ -7595,7 +7630,7 @@
        * tp/Texinfo/Convert/Plaintext.pm, tp/Texinfo/Convert/Info.pm:
        cache get_conf() results.  Convert node names only once.
        * tp/texi2any.pl, doc/texinfo.txi (Customization Variables and Options):
-       two new formats, parse and structure that respectively do the parsing 
+       two new formats, parse and structure that respectively do the parsing
        phase, and the parsing and structuring phase, and no conversion.
 
 2013-02-26  Karl Berry  <address@hidden>
@@ -7605,7 +7640,7 @@
 
 2013-02-25  Patrice Dumas  <address@hidden>
 
-       * tp/Texinfo/Parser.pm: use tell to find the position of the 
+       * tp/Texinfo/Parser.pm: use tell to find the position of the
        beginning of the line.
        Close line @-command with special @-commands if there is no comment
        ending the line.  Report from Eli Zaretskii on bug-texinfo,
@@ -7640,7 +7675,7 @@
        Report in http://savannah.gnu.org/bugs/?38380.
        * tp/Makefile.am, tp/maintain/*: modularize and rename scripts
        associated to standalone modules handling.
-       * tp/Texinfo/Convert/Plaintext.pm: use OPEN_QUOTE_SYMBOL and 
+       * tp/Texinfo/Convert/Plaintext.pm: use OPEN_QUOTE_SYMBOL and
        CLOSE_QUOTE_SYMBOL.
        * tp/Texinfo/Parser.pm: allow more characters in flags.
        do not close a line after a special command @set...
@@ -7651,7 +7686,7 @@
        need not appear at the beginning of a line.
        (@t{@@enumerate}, @t{@@itemize}): clarify that at least
        one @item should be inside @itemize.
-       
+
        * README-hacking: include potential CPAN update in release checks.
 
 2013-02-22  Antonio Diaz Diaz  <address@hidden>  (tiny change)
@@ -7693,10 +7728,10 @@
 
        * Makeinfo.am, texi2html/test/*/Makefile.am, tp/tests/*/Makefile.am,
        tp/maintain/regenerate_file_lists.pl, tp/tests/many_input_files/*.sh,
-       tp/tests/run_parser_all.sh, texi2html/test/run_*.sh, 
+       tp/tests/run_parser_all.sh, texi2html/test/run_*.sh,
        texi2html/test/many_input_files/*.sh: adapt for SVN.
        * tp/MANIFEST: regenerate.
-       * tp/Texinfo/Structuring.pm: lowering a section level is only a 
+       * tp/Texinfo/Structuring.pm: lowering a section level is only a
        warning.
 
 2013-02-18  Karl Berry  <address@hidden>  (tiny change)
@@ -7713,7 +7748,7 @@
 2013-02-16  Karl Berry  <address@hidden>
 
        * Version 5.0.
-       
+
        * doc/texinfo.txi: remove zyx placeholder.
 
 2013-02-13  Sergey Poznyakoff  <address@hidden>
@@ -7738,7 +7773,7 @@
 2013-02-10  Patrice Dumas  <address@hidden>
 
        * autogen.sh, tp/maintain/regenerate_cmd_tests.sh, tp/tests/*:
-       Generate automatically test file scripts for each test in 
+       Generate automatically test file scripts for each test in
        tp/tests/*.
        * tp/Makefile.am: run directly tap tests in Makefile.am.
 
@@ -7799,7 +7834,7 @@
 2013-01-29  Patrice Dumas  <address@hidden>
 
        * po/POTFILES.in, tp/init/latex2html.pm: mark translations
-       for error messages in latex2html.pm, and add file to 
+       for error messages in latex2html.pm, and add file to
        po/POTFILES.in.
 
 2013-01-28  Karl Berry  <address@hidden>
@@ -7861,7 +7896,7 @@
 2013-01-19  Karl Berry  <address@hidden>
 
        * pretest 4.13.94.
-       
+
        * README-hacking: tersely describe release steps.
 
 2013-01-18  Karl Berry  <address@hidden>
@@ -7888,7 +7923,7 @@
 
 2013-01-15  Patrice Dumas  <address@hidden>
 
-       * autogen.sh: adapt to shorter regenerate_docstr.sh 
+       * autogen.sh: adapt to shorter regenerate_docstr.sh
        and Makefile.docstr names.
 
 2013-01-14  Karl Berry  <address@hidden>
@@ -7983,7 +8018,7 @@
 2013-01-03  Thien-Thi Nguyen  <address@hidden>  (tiny change)
 
        * doc/texinfo.txi (Combining Indices):
-       @synindex uses the "roman font for merged-from". 
+       @synindex uses the "roman font for merged-from".
 
 2013-01-03  Karl Berry  <address@hidden>
 
@@ -8044,7 +8079,7 @@
        * util/htmlxref.cnf (gmp): use up-to-date version on gmplib.org.
 
        * util/srclist.txt (missing): sync from $AUTOMAKE.
-       
+
 2012-12-29  gettextize  <address@hidden>
 
        * gnulib/m4/po.m4: Upgrade to gettext-0.18.2.
@@ -8062,7 +8097,7 @@
 
 2012-12-19  Patrice Dumas  <address@hidden>
 
-       * configure.ac, tp/Texinfo/*, tp/t/*: use the correct next version 
+       * configure.ac, tp/Texinfo/*, tp/t/*: use the correct next version
        number for DTD and in other places.
 
 2012-12-17  Karl Berry  <address@hidden>
@@ -8103,7 +8138,7 @@
 
 2012-12-10  Patrice Dumas  <address@hidden>
 
-       * configure.ac, tp/Makefile.am, tp/texi2any.pl, tp/Texinfo/Common.pm, 
+       * configure.ac, tp/Makefile.am, tp/texi2any.pl, tp/Texinfo/Common.pm,
        tp/Texinfo/Convert/XML.pm, tp/maintain/catalog.xml.in,
        tp/t/test_utils.pl,
        doc/texinfo.txi (Other Customization Variables):
@@ -8112,7 +8147,7 @@
 
 2012-12-08  Patrice Dumas  <address@hidden>
 
-       * doc/texinfo.txi (Command Contexts): @verb is not accepted in 
+       * doc/texinfo.txi (Command Contexts): @verb is not accepted in
        simple text commands and sectioning commands.
 
 2012-12-02  Karl Berry  <address@hidden>
@@ -8132,10 +8167,10 @@
 
 2012-12-02  Patrice Dumas  <address@hidden>
 
-       * configure.ac: remove gnulib module regex snippet, it is already in 
+       * configure.ac: remove gnulib module regex snippet, it is already in
        gnulib/m4/gnulib-comp.m4.
        * configure.ac, tp/Texinfo/Convert/Unicode.pm: check that Encode is
-       available, and use perl >= 5.7.3, required for Encode.  Report from 
+       available, and use perl >= 5.7.3, required for Encode.  Report from
        Stefano Lattarini.
 
 2012-12-01  Sergey Poznyakoff  <address@hidden>
@@ -8174,7 +8209,7 @@
 
        * doc/texinfo.txi (Invoking texi2any), tp/texi2any.pl: add -c as an
        alias for --set-customization-variable (Karl idea).
-       * doc/texinfo.txi (Other Customization Variables): explain default 
+       * doc/texinfo.txi (Other Customization Variables): explain default
        values for customization variables.
 
 2012-11-30  Karl Berry  <address@hidden>
@@ -8213,12 +8248,12 @@
 
        * doc/texinfo.txi: consistently use "uppercase" and "lowercase",
        rather than with spaces or dashes.
-       
+
        * system.h (const): do not #undef around gettext.h.
        Suggested by Eli.  We'll see.
 
 2012-11-16  Eli Zaretskii  <address@hidden>
-       
+
        * info/pcterm.c (gettextinfo): exit rather than xexit.
        (tputs, tgoto, tgetent): use const.
        * info/session.c [!FIONREAD]: require F_GETFL and F_SETFL as well
@@ -8242,8 +8277,8 @@
 
 2012-11-20  Patrice Dumas  <address@hidden>
 
-       * Texinfo/Common.pm, Texinfo/Parser.pm, 
-       doc/texinfo.txi (Other Customization Variables): if 
+       * Texinfo/Common.pm, Texinfo/Parser.pm,
+       doc/texinfo.txi (Other Customization Variables): if
        IGNORE_SPACE_AFTER_BRACED_COMMAND_NAME is set (the default case),
        spaces after an @-command name that take braces are ignored.
        Report from John Darrington.
@@ -8252,7 +8287,7 @@
 
        * configure.ac, Pod-Simple-Texinfo/Makefile.am, doc/tp_api/Makefile.am:
        new conditionals, BUILD_PERL_API_TEXI and POD_SIMPLE_TEXINFO_TESTS to
-       avoid rebuilding the texinfo files from pod documentnation if 
+       avoid rebuilding the texinfo files from pod documentnation if
        Pod::Simple::PullParser, and avoid running the Pod-Simple-Texinfo tests
        if Test::More is not present.
 
@@ -8288,7 +8323,7 @@
        and offsets.
        * info/nodes.h (FILE_BUFFER) <filesize>: Change type to size_t.
        * NEWS: Update.
-       
+
 2012-11-16  Eli Zaretskii  <address@hidden>
 
        Support for MS-Windows screen and keyboard in Info.
@@ -8361,7 +8396,7 @@
 2012-11-16  Karl Berry  <address@hidden>
 
        * pretest 4.13.90.
-       
+
        * tp/Makefile.am,
        * tp/maintain/regenerate_document_strings_make_rules.sh,
        * tp/tests/run_parser_all.sh: avoid \+ with sed, not
@@ -8369,13 +8404,13 @@
 
 2012-11-16  Patrice Dumas  <address@hidden>
 
-       * configure.ac, tp/defs.in, tp/maintain/all_tests.sh, 
+       * configure.ac, tp/defs.in, tp/maintain/all_tests.sh,
        tp/tests/run_parser_all.sh, tp/tests/many_input_files/indices.sh,
        tp/tests/many_input_files/tex_l2h.sh, 
tp/tests/many_input_files/tex_t4ht.sh:
        Use PERL from configure, with the value put in tp/defs.in by configure
        instead of tp/tests/path_separator.in.
        * tp/tests/path_separator.in: remove.
-       * tp/tests/nested_formats/Makefile.am: do not distribute 
+       * tp/tests/nested_formats/Makefile.am: do not distribute
        generate_all_texi.pl.
 
 2012-11-13  Karl Berry  <address@hidden>
@@ -8382,7 +8417,7 @@
 
        * configure.ac (PERL): check for it up front.
        Will anyone want to build Texinfo without makeinfo?  We'll see.
-       
+
        * doc/Makefile.am (EXTRA_DIST): missed \ at end of variable list.
        Why wasn't this an error with GNU make?  Didn't investigate.
 
@@ -8392,7 +8427,7 @@
 
        * doc/Makefile.am (wwwdoc-build, wwwdoc-install): new targets
        for updating the manuals on the web.
-       
+
        * doc/texinfo.txi (makeinfo options): lowercase o options
        in compatibility @anchor, since that's what the 4.13 manual had.
 
@@ -8409,7 +8444,7 @@
        not portable.
        * tp/.cvsignore: ignore *.trs and *.log.
        * TODO: update
-       * tp/tests/*/*.sh, tp/tests/run_parser_all.sh: do a chmod on 
+       * tp/tests/*/*.sh, tp/tests/run_parser_all.sh: do a chmod on
        files copied from the source directory, for instance to have
        them removed by clean targets.
 
@@ -8432,7 +8467,7 @@
        * configure.ac: remove MKDIR_P fallback.
        * texi2html/Makefile.am,
        * tp/Makefile.am: consistently use $(mkdir_p) rather than $(MKDIR_P).
-       
+
        * Run gnulib-tool --import, srclist.txi.
 
 2012-11-08  Karl Berry  <address@hidden>
@@ -8448,7 +8483,7 @@
 
 2012-10-27  Karl Berry  <address@hidden>
 
-       * util/gendocs.sh: remove PostScript generation, redundant with 
+       * util/gendocs.sh: remove PostScript generation, redundant with
        (and worse than) pdf, these days.
        * util/gendocs_template,
        * util/gendocs_template_min,
@@ -8482,8 +8517,8 @@
 
 2012-09-15  Patrice Dumas  <address@hidden>
 
-       * doc/texinfo.txi (texi2any Output Customization): remove 
-       anything related to API description, put it in 
+       * doc/texinfo.txi (texi2any Output Customization): remove
+       anything related to API description, put it in
        draft_api.texi, it is not stable enough for now.
 
 2012-09-15  Karl Berry  <address@hidden>
@@ -8510,7 +8545,7 @@
 
 2012-09-13  Patrice Dumas  <address@hidden>
 
-       * doc/refcard/txivarcheck (read_tp): filter out customization 
+       * doc/refcard/txivarcheck (read_tp): filter out customization
        variables that are internal for the Parser and documented
        in the Parser, and variables that may only be set in
        init files as they are arrays or hashes.
@@ -8643,7 +8678,7 @@
 
        * doc/texinfo.tex (\ecfont): test for monospace,
        so we can get a typewriter thorn, etc.
-       
+
 2012-08-13  Karl Berry  <address@hidden>
 
        * doc/texinfo.txi (HTML Xref Command Expansion): U+21A6
@@ -8783,7 +8818,7 @@
 2012-05-22  Karl Berry  <address@hidden>
 
        * README: updates for texi2any.
-       
+
        * INTRODUCTION: remove; seems unnecessary with all else now.
        * Makefile.am (EXTRA_DIST): remove it.
 
@@ -8814,12 +8849,12 @@
 
        * doc/texinfo.txi (Node Line Requirements): don't use the non-word
        "nodename".  Internal whitespace is collapsed.
-       
+
        * doc/texinfo.txi (#line and TeX, Use TeX, Obtaining TeX,
        Preparing for TeX, Debugging with TeX): use @TeX{} in node names
        and thus simplify cross references.  Does not change Info node names,
        hence no need to leave @anchors behind.
-       
+
        * doc/texinfo.txi: update master menu.
 
 2012-04-23  Karl Berry  <address@hidden>
@@ -8837,13 +8872,13 @@
 
        * doc/texinfo.txi (Other Configuration Variables): add
        BASEFILENAME_LENGTH.
-       (HTML Xref Link Basics): explain that file names 
+       (HTML Xref Link Basics): explain that file names
        are truncated.
        * tp/Texinfo/Common.pm, tp/Texinfo/Convert/Converter.pm,
        tp/Texinfo/Convert/HTML.pm (_id_to_filename): add
        IBASEFILENAME_LENGTH and use it to truncate base
        filenames.
-       * tp/Texinfo/Parser.pm tp/t/*: @verb is not accepted in 
+       * tp/Texinfo/Parser.pm tp/t/*: @verb is not accepted in
        simple text commands and sectioning commands.
 
 2012-04-20  Julian Gilbey  <address@hidden>  (tiny change)
@@ -8970,13 +9005,13 @@
 2012-02-26  Patrice Dumas  <address@hidden>
 
        * doc/texinfo.txi (Configuration Variables), tp/Texinfo/Common.pm,
-       tp/texi2any.pl, TODO: new transformations 
+       tp/texi2any.pl, TODO: new transformations
        insert_nodes_for_sectioning_commands, complete_tree_nodes_menus
        and regenerate_master_menu.
 
 2012-02-23  Patrice Dumas  <address@hidden>
 
-       * configure.ac, tp/t/test_utils.pl, tp/README: use Storable::dclone 
+       * configure.ac, tp/t/test_utils.pl, tp/README: use Storable::dclone
        instead of Clone::clone since it is in core perl since 5.007003.
        Also it seemed more faster when I checked.
 
@@ -9012,7 +9047,7 @@
 2012-02-17  Patrice Dumas  <address@hidden>
 
        * doc/texinfo.txi (Configuration Variables): update DEBUG and SHORTEXTN
-       to be in line with current meanings.  Document the 
+       to be in line with current meanings.  Document the
        move_index_entries_after_items transformation.
 
 2012-02-16  Karl Berry  <address@hidden>
@@ -9026,7 +9061,7 @@
 
 2012-02-10  Patrice Dumas  <address@hidden>
 
-       * autogen.sh, tp/.cvsignore, tp/Makefile.am, 
+       * autogen.sh, tp/.cvsignore, tp/Makefile.am,
        maintain/regenerate_document_strings_make_rules.sh,
        maintain/regenerate_file_lists.pl: replace unconditional copy by
        generated make rules.
@@ -9037,7 +9072,7 @@
        tp/Texinfo/Convert/PlainTexinfo.pm, tp/Makefile.am: new converter,
        converting the tree to Texinfo.  Add a FIX_TEXINFO customization
        variable for this converter, set in the default case.
-       * doc/texinfo.txi (Configuration Variables), tp/Texinfo/Common.pm, 
+       * doc/texinfo.txi (Configuration Variables), tp/Texinfo/Common.pm,
        tp/texi2any.pl:
        new customization variable, TREE_TRANSFORMATIONS, to specify
        transformations done to the tree before output.
@@ -9045,8 +9080,8 @@
 2012-02-05  Patrice Dumas  <address@hidden>
 
        * doc/texinfo.txi (Configuration Variables), tp/Texinfo/Common.pm,
-       tp/Texinfo/Convert/HTML.pm(_convert_image_command), 
-       tp/Texinfo/Convert/Converter.pm(%all_converters_defaults): new 
+       tp/Texinfo/Convert/HTML.pm(_convert_image_command),
+       tp/Texinfo/Convert/Converter.pm(%all_converters_defaults): new
        configuration variable to prepend a path to images in HTML,
        IMAGE_LINK_PREFIX.  Report from Vincent Bela\"iche.
 
@@ -9057,18 +9092,18 @@
        Configuration variables for program behavior may also be set normally,
        however they will have an effect only if set on the command line.
        * tp/TODO, tp/texi2any.pl, tp/Texinfo/Common.pm,
-       tp/Texinfo/Convert/HTML.pm (converter_defaults): handle configuration 
+       tp/Texinfo/Convert/HTML.pm (converter_defaults): handle configuration
        variables for program behavior more like other variables and formats.
 
 2012-01-27  Patrice Dumas  <address@hidden>
 
-       * configure.ac (AC_CONFIG_FILES), tp/tests/encodings, 
+       * configure.ac (AC_CONFIG_FILES), tp/tests/encodings,
        tp/tests/formatting/: tests in encodings that have not be moved
        to the main test suite are moved to tp/tests/formatting.
 
 2012-01-25  Patrice Dumas  <address@hidden>
 
-       * util/texi2html: new script to convert Texinfo to HTML, setting the 
+       * util/texi2html: new script to convert Texinfo to HTML, setting the
        default style to be the texi2html style.
 
 2012-01-24  Patrice Dumas  <address@hidden>
@@ -9081,13 +9116,13 @@
 
 2012-01-22  Patrice Dumas  <address@hidden>
 
-       * tp/Texinfo/Convert/HTML.pm (_convert_xref_commands), 
+       * tp/Texinfo/Convert/HTML.pm (_convert_xref_commands),
        tp/Texinfo/Convert/DocBook.pm:
-       implement the new convention for five-arg xref with either 
+       implement the new convention for five-arg xref with either
        just Top or no node name.
        * tp/Texinfo/Convert/HTML.pm, texi2any.pl, tp/Texinfo/Common.pm:
        For HTML, add a customization variable, KEEP_TOP_EXTERNAL_REF.
-       If set the Top node is not ignored for the reference for the 
+       If set the Top node is not ignored for the reference for the
        five-arg xref.
        * doc/texinfo.txi (Other Configuration Variables): document
        KEEP_TOP_EXTERNAL_REF.
@@ -9138,7 +9173,7 @@
        as customization options.
 
        * tp/texi2any.pl, tp/Texinfo/Convert/TextContent.pm,
-       tp/Makefile.am, TODO: 
+       tp/Makefile.am, TODO:
        New converter that strips commands from output.
 
 2012-01-14  Patrice Dumas  <address@hidden>
@@ -9152,7 +9187,7 @@
 2012-01-14  Sergey Poznyakoff  <address@hidden>
 
        Use literal matching when searching for xrefs or menu items.
-       
+
        * info/nodes.c (adjust_nodestart): Reset body_start.
        * info/session.c (info_toggle_regexp): Minor change.
        (info_menu_or_ref_item): Set cursor at the start of
@@ -9165,7 +9200,7 @@
        (info_menu_or_ref_item): Mask out use_regex.
        * info/session.h (info_search_in_node)
        (info_target_search_node): Change prototypes.
-       
+
        * info/indices.c (info_next_index_match): Update.
        * info/footnotes.c (make_footnotes_node): Update.
 
@@ -9246,7 +9281,7 @@
 2011-12-27  Sergey Poznyakoff  <address@hidden>
 
        Bugfixes.
-       
+
        * info/echo-area.c (info_read_completing_internal): Initialize
        window line map before the loop, otherwise the previous contents
        is used to compute cursor position.
@@ -9281,7 +9316,7 @@
        * doc/refcard/txirefcard.tex: document them.
        * doc/texinfo.tex (\inlinefmt, \doinlinefmt,
         \inlineraw, \doinlineraw, \doinlinerawtwo, \outfmtnametex): new macros.
-        
+
         * doc/texinfo.tex (\atchar, \lbracechar, \rbracechar, \backslashchar):
         more new macros for forthcoming new commands.
 
@@ -9288,12 +9323,12 @@
 2011-12-24  Karl Berry  <address@hidden>
 
        * doc/texinfo.tex (\errormsg): \indexnofonts rather than \indexdummies.
-       
+
        * doc/texinfo.tex (\txiescapepdf): new macro, using the pdftex
        primitive \pdfescapestring.
        (\backslashparens, \activebackslashdouble, \HyPsdSubst,
         \HyReturnAfterFi): no longer needed.  change calls.
-        
+
         * doc/texinfo.tex (\dopdfoutline): output (literal) brace chars;
         previous hack had become inoperative.
        (\lbracecharliteral, \rbracecharliteral): new macros.
@@ -9303,7 +9338,7 @@
        * NEWS: new command @errormsg.
        * doc/texinfo.tex (\errormsg): new command.
        (\commondummiesnofonts): add \anchor for the heck of it.
-       * doc/texinfo.txi (@@-Command List): add it.  
+       * doc/texinfo.txi (@@-Command List): add it.
        * doc/refcard/txirefcard.txi (Ending): likewise.
 
        * doc/texinfo.txi (Generic Translator texi2any): rename node.
@@ -9337,7 +9372,7 @@
 2011-11-16  Sergey Poznyakoff  <address@hidden>
 
        Implement info-virtual-index.
-       
+
        * info/indices.c (info_virtual_index): New function.
        * info/info-utils.c (text_buffer_init)
        (text_buffer_free,text_buffer_vprintf)
@@ -9345,7 +9380,7 @@
        (text_buffer_add_char,text_buffer_printf): New functions.
        * info/info-utils.h (text_buffer): New struct.
        (text_buffer_init)
-       (text_buffer_free,text_buffer_vprintf)  
+       (text_buffer_free,text_buffer_vprintf)
        (text_buffer_add_string,text_buffer_fill)
        (text_buffer_add_char,text_buffer_printf): New protos.
        * info/infomap.c (default_emacs_like_info_keys): 'I'
@@ -9357,7 +9392,7 @@
        All uses changed.
 
        * doc/info-stnd.texi: Document virtual-index.
-       
+
 2011-11-07  Karl Berry  <address@hidden>
 
        * doc/texinfo.txi: replace @inforef's to the Info manual
@@ -9486,7 +9521,7 @@
        * info-stnd.texi: change @itemx to a missing @item.
        * po/POTFILES.in, configure.ac, po_document/POTFILES.in: remove 
references
        to makeinfo/ and texi2html/.
-       * doc/Makefile.am (MAKEINFO, man_rule_0): use tp/texi2any.pl or 
+       * doc/Makefile.am (MAKEINFO, man_rule_0): use tp/texi2any.pl or
        tp/makeinfo to regenerate info and man pages.
 
 2011-10-11  Karl Berry  <address@hidden>
@@ -9503,12 +9538,12 @@
 
        * doc/texinfo.txi (Generic Translator texi2any/makeinfo): adapt to
        the new implementation in tp/.
-       * configure.ac, tp/Makefile.am: add an automake conditional to avoid 
+       * configure.ac, tp/Makefile.am: add an automake conditional to avoid
        doing tp tests if dependencies are missing.
 
 2011-09-30  Patrice Dumas  <address@hidden>
 
-       * doc/texinfo.txi (texi2any Output Customization), 
+       * doc/texinfo.txi (texi2any Output Customization),
        doc/texi2oldapi.texi: archive the texi2any Output Customization
        chapter in texi2oldapi.texi.  Reduce the text in texinfo.txi
        to what should be stable.
@@ -9521,7 +9556,7 @@
 
 2011-09-26  Patrice Dumas  <address@hidden>
 
-       * Makefile.am (SUBDIRS, DIST_SUBDIRS), configure.ac, po*/POTFILES.in: 
+       * Makefile.am (SUBDIRS, DIST_SUBDIRS), configure.ac, po*/POTFILES.in:
        build and distribute the Parser in tp.  Don't build texi2html, but
        still distribute it.
 
@@ -9550,7 +9585,7 @@
 
 2011-09-18  Karl Berry  <address@hidden>
 
-       * doc/texinfo.txi (Node Line Requirements): parens are 
+       * doc/texinfo.txi (Node Line Requirements): parens are
        disallowed specifically when confused with external manuals,
        not always.  Discussion in thread of 18 Sep 2011 09:16:27,
        and bug http://savannah.gnu.org/bugs/?33373.
@@ -9602,7 +9637,7 @@
 
        * info/doc.h (key_documentation): Remove prototype.
        * info/filesys.c, info/footnotes.c,
-       info/info-utils.c, info/info.c, 
+       info/info-utils.c, info/info.c,
        info/infomap.c, info/m-x.c, info/nodemenu.c,
        info/search.c, info/variables.c,
        info/window.c: Remove extra arguments from calls to variadic functions.
@@ -9630,7 +9665,7 @@
        * NEWS,
        * doc/refcard/txirefcard.tex,
        * doc/texinfo.txi (Typed Functions),
-       (Object-Oriented Methods): document @deftypefnnewline.  
+       (Object-Oriented Methods): document @deftypefnnewline.
 
 2011-05-23  Jonathan Nieder  <address@hidden>  (tiny change)
 
@@ -9645,7 +9680,7 @@
 
        * doc/texinfo.tex: use single % consistently for comments.
        (\need): remove old definition unused for many years.
-       
+
        * doc/texinfo.tex (\deftypefnnl): new layout command.
         (\ifdoingtypefn, \ifrettypeownline): new conditionals.
         (\deftypefngeneral): set \doingtypefntrue.
@@ -9670,8 +9705,8 @@
 
 2011-04-30  Patrice Dumas  <address@hidden>
 
-       * texi2html/texi2html.pm, texi2html/texi2html.pl, 
-       texi2html/formats/html.pm (HTML_DEFAULT_about_body): new 
+       * texi2html/texi2html.pm, texi2html/texi2html.pl,
+       texi2html/formats/html.pm (HTML_DEFAULT_about_body): new
        configuration variable, DO_ABOUT to disconnect the choice
        to do the About element from HEADER_IN_TABLE.
 
@@ -9681,8 +9716,8 @@
 
 2011-04-09  Patrice Dumas  <address@hidden>
 
-       * */*: rename major .init files as .pm files, especially 
-       those that are processed by xgettext.  Report from Sergey 
+       * */*: rename major .init files as .pm files, especially
+       those that are processed by xgettext.  Report from Sergey
        Poznyakoff.
 
 2011-04-07  Patrice Dumas  <address@hidden>
@@ -9698,15 +9733,15 @@
 2011-04-08  Sergey Poznyakoff  <address@hidden>
 
        Fix make distcheck
-       
+
        * Makefile.am (dist-hook): New rule to distribute tp.
        * texi2html/Makefile.am (DISTCLEANFILES): Add translations.pl and
        translations.pl.old
-       
+
 2011-04-06  Sergey Poznyakoff  <address@hidden>
 
        Use C99 stdarg.
-       
+
        * system.h [HAVE_VPRINTF]: Remove obsolete stuff.  Include
        stdarg.h unconditionally.
        (TEXINFO_PRINTFLIKE): New macro.
@@ -9786,7 +9821,7 @@
 2011-03-18  Karl Berry  <address@hidden>
 
        * doc/info-stnd.texi (Stand-alone Info): bug reporting address.
-       
+
        * doc/texinfo.txi: standalone not stand-alone in this manual.
 
 2011-03-06  Karl Berry  <address@hidden>
@@ -9872,13 +9907,13 @@
 
        * NEWS,
        * doc/texinfo.txi (Command Summary): missed @urefbreakstyle.
-       
+
        * util/texinfo.dtd (sp, printindex): categorize.
 
 2011-02-10  Sergey Poznyakoff  <address@hidden>
 
        Exclude node headers from searches.
-       
+
        * info/nodes.h (NODE): New member body_start.
 
        * info/search.c (regexp_search): Remove length argument.
@@ -9891,11 +9926,11 @@
        info_search_in_node_internal.
        (info_search_internal): Pass 1 as match_nodename after switching
        to the new node.
-       
+
        * info/nodes.c (node_set_body_start): New function.
        (info_get_node_of_file_buffer): Set body_start on the new node.
        (info_node_of_file_buffer_tags): Likewise.
-       
+
 2011-02-09  Karl Berry  <address@hidden>
 
        * doc/texinfo.tex (\urefbreak): revised attempt to allow breaking
@@ -9917,7 +9952,7 @@
 
 2011-02-06  Patrice Dumas  <address@hidden>
 
-       * texi2html/Makefile.am: Add a missing $(srcdir).  Report 
+       * texi2html/Makefile.am: Add a missing $(srcdir).  Report
        from Jerker B\"ack, fix by Karl.
        http://savannah.gnu.org/bugs/?32328
 
@@ -10030,7 +10065,7 @@
 2010-12-01  Patrice Dumas  <address@hidden>
 
        * texi2html/texi2html.pl: don't warn when a user-defined macro
-       without argument is called without braces.  Report from Werner 
+       without argument is called without braces.  Report from Werner
        Lemberg.
 
 2010-11-28  Karl Berry  <address@hidden>
@@ -10156,15 +10191,15 @@
 
        * doc/texinfo.txi (Command List): alphabetization fixes.
        Report from Christophe Jarry, 23 Oct 2010 17:45:54.
-       
+
        (HTML Customization for Anchors, HTML Customization for Images):
        rename+edit.
 
 2010-10-24  Patrice Dumas  <address@hidden>
 
-       * texi2html/texi2html.pl (%index_names): remove the 'prefixes' key, 
+       * texi2html/texi2html.pl (%index_names): remove the 'prefixes' key,
        it isn't useful.
-       * texi2html/formats/info.init (info_default_normal_text): 
+       * texi2html/formats/info.init (info_default_normal_text):
        upper case @var even when producing utf8.  Report from Karl.
 
 2010-10-15  Karl Berry  <address@hidden>
@@ -10228,7 +10263,7 @@
 
        * texi2html/texi2html.pl (enter_index_entry),
        texi2html/texinfo.init (index_entry), formats/info.init (index_entry):
-       Pass the information whether in code or not for index entries, 
+       Pass the information whether in code or not for index entries,
        and use it.  Report from Karl.
 
 2010-09-24  Karl Berry  <address@hidden>
@@ -10271,7 +10306,7 @@
        * texi2html/texi2html.pl (line_warn, line_error, format_line_number):
        Use 'possibly involving' instead of 'via' since it is not certain
        that the macro was the one in the error message as line information
-       is for whole lines, even when more than one macro may be expanded 
+       is for whole lines, even when more than one macro may be expanded
        within the line.
 
 2010-09-14  Karl Berry  <address@hidden>
@@ -10291,7 +10326,7 @@
 
 2010-09-12  Patrice Dumas  <address@hidden>
 
-       * texi2html/texi2html.pl (rearrange_elements), 
+       * texi2html/texi2html.pl (rearrange_elements),
        texi2html/texi2html.init, texi2html/examples/makeinfo.init,
        texi2html/formats/html.init: rename the 'Following' direction
        as 'NodeForward' and add the 'NodeBack' direction.
@@ -10306,8 +10341,8 @@
        * texi2html/texi2html.init (%misc_command, 
t2h_default_preserve_misc_command):
        set args instead of skip when a line is in fact the misc
        @-command argument.
-       * texi2html/texi2html.pl (add_to_texi2dvi_args), 
-       texi2html/texi2html.init: call texi2dvi for pdf, dvi and ps output, 
+       * texi2html/texi2html.pl (add_to_texi2dvi_args),
+       texi2html/texi2html.init: call texi2dvi for pdf, dvi and ps output,
        add command line options for texi2dvi and pass some existing options.
 
 2010-09-10  Karl Berry  <address@hidden>
@@ -10338,7 +10373,7 @@
 
        * doc/texinfo.tex (\lattwochardefs): define \ed and \ee using
        \dotless{i} rather than \i.  Report from Andrei Kholodnyi,
-       3 Sep 2010 20:14:42.    
+       3 Sep 2010 20:14:42.
 
        * doc/texinfo.txi (Internationalization of Strings): edit.
 
@@ -10426,7 +10461,7 @@
        * texi2html/texi2html.pl (close_stack): more precise error
        message when closing @verb.  Karl report.
        * texi2html/texi2html.pl (do_text): disable the warning about
-       unlikely character in @var. It is too expensive (because do_text 
+       unlikely character in @var. It is too expensive (because do_text
        is called often) for a warning which rather questionable anyway.
        * texi2html/texi2html.init (t2h_default_external_href): an
        empty entry in htmlxref causes the corresponding possibility
@@ -10446,12 +10481,12 @@
 
 2010-08-11  Patrice Dumas  <address@hidden>
 
-       * texi2html/texi2html.pl (enter_author_command): format the 
+       * texi2html/texi2html.pl (enter_author_command): format the
        @author text if not already done.  Check if command is @author
        is now done outside of the function.
-       * texi2html/texi2html.pl (scan_line): prepare for detection of 
-       commands that are not at the begining of the line though they 
-       should be.  Mostly not activated, since modifications to the 
+       * texi2html/texi2html.pl (scan_line): prepare for detection of
+       commands that are not at the begining of the line though they
+       should be.  Mostly not activated, since modifications to the
        processed line leads to spurious error messages.
        %begin_line_command hash holds all the commands that should
        be at the begining of the line.
@@ -10476,7 +10511,7 @@
        exact matches. When exact matches are exhausted, look for
        partial matches, starting from the beginning of the index.
        When looking for partial matches, take care not to return
-       previous exact matches. 
+       previous exact matches.
 
 2010-08-08  Patrice Dumas  <address@hidden>
 
@@ -10491,8 +10526,8 @@
        and copy config.rpath.
        * texi2html/texi2html.pl (locate_init_file): explicitly give the
        directories in argument.
-       * texi2html/texi2html.init, texi2html/T2h_l2h.pm: no default 
-       initialization file for latex2html.  Don't use locate_init_file to 
+       * texi2html/texi2html.init, texi2html/T2h_l2h.pm: no default
+       initialization file for latex2html.  Don't use locate_init_file to
        find the initialization file.
        * texi2html/texi2html.pl: search in ./ and ./.program_name for init
        files and htmlxref.cnf files.  Report from Karl.
@@ -10521,7 +10556,7 @@
        * texi2html/texi2html.pl (set_variable),
        (get_conf): accept an undef value as a regular value.
        (unset_variable),
-       (unset_from_document): unset a variable by removing the 
+       (unset_from_document): unset a variable by removing the
        corresponding key from the hash.  Replaces set_variable($var, undef)
        now that undef is a regular value.  Done for a report from Karl.
        * texi2html/texi2html.init (t2h_default_select_substitution):
@@ -10544,7 +10579,7 @@
 2010-07-27  Patrice Dumas  <address@hidden>
 
        * texi2html/texi2html.pl: use the actual values for defaults
-       in texi2html description of command line options.  Report from 
+       in texi2html description of command line options.  Report from
        Karl.
 
 2010-07-26  Karl Berry  <address@hidden>
@@ -10555,7 +10590,7 @@
 2010-07-26  Patrice Dumas  <address@hidden>
 
        * doc/texinfo.txi (makeinfo Configuration Variables)
-       (texi2any output customization): warn that the API and 
+       (texi2any output customization): warn that the API and
        configuration variables may change at any time.
 
 2010-07-25  Karl Berry  <address@hidden>
@@ -10576,7 +10611,7 @@
 
 2010-07-25  Patrice Dumas  <address@hidden>
 
-       * texi2html/doc/texi2html.texi: reduce the texi2html manual 
+       * texi2html/doc/texi2html.texi: reduce the texi2html manual
        to the minimum. Keep history, differences with texi2any and
        the list of incompatibilities with past versions.
 
@@ -10587,7 +10622,7 @@
 
 2010-07-25  Patrice Dumas  <address@hidden>
 
-       * doc/texinfo.txi: update the documentation of texi2any 
+       * doc/texinfo.txi: update the documentation of texi2any
        customization to match the current state of the code.
 
 2010-07-25  Karl Berry  <address@hidden>
@@ -10602,9 +10637,9 @@
 
 2010-07-24  Patrice Dumas  <address@hidden>
 
-       * doc/texinfo.txi (Initialization files basics): merge `Function 
+       * doc/texinfo.txi (Initialization files basics): merge `Function
        prototypes' node.
-       Put 'Initializing and finalizing' below 'Initialization files 
+       Put 'Initializing and finalizing' below 'Initialization files
        basics'.
        Add the information about @-commands formatting.
 
@@ -10636,7 +10671,7 @@
 2010-07-19  Patrice Dumas  <address@hidden>
 
        * texi2html/test/sectionning: rename to sectioning.
-       Also replace sectionning with sectioning in documentation 
+       Also replace sectionning with sectioning in documentation
        files.
 
 2010-07-19  Karl Berry  <address@hidden>
@@ -10648,13 +10683,13 @@
 
        * doc/texinfo.txi (Generic converter texi2any/makeinfo): add a
        chapter for texi2any/makeinfo. Merge Invoking makeinfo and
-       makeinfo options and put it in the chapter as Invoking texi2any, 
-       together with Pointer Validation and the description of 
+       makeinfo options and put it in the chapter as Invoking texi2any,
+       together with Pointer Validation and the description of
        texi2any Configuration variables.
 
 2010-07-18  Karl Berry  <address@hidden>
 
-       * AUTHORS, 
+       * AUTHORS,
        * INSTALL,
        * NEWS,
        * README,
@@ -10665,7 +10700,7 @@
 
        * doc/texinfo.txi (makeinfo options): re-add --commands-in-node-names
        and explain that it is a no-op.
-       * texi2html/texi2html.pl: re-add --commands-in-node-names and 
+       * texi2html/texi2html.pl: re-add --commands-in-node-names and
        --output-indent in the help message, stating that they are no-op.
 
 2010-07-17  Patrice Dumas  <address@hidden>
@@ -10672,7 +10707,7 @@
 
        * doc/texinfo.txi (setfilename): explain how file name is determined
        when there is no @setfilename.
-       (makeinfo options, HTML Translation): document new options and 
+       (makeinfo options, HTML Translation): document new options and
        update according to the changes in behaviour.
        Separate --plaintext from --no-headers.
        (Pointer Validation): @-commands in nodes are now supported.
@@ -10807,7 +10842,7 @@
        * doc/texinfo.txi (part): new description for new command @part.
        * doc/refcard/txirefcard.tex: add it.
        * util/texinfo.dtd (part): new element.
-       
+
        * doc/texinfo.tex (\entry): correct redefinition of @* for toc's.
        (\definetextfontsizexi, \definetextfontsizex): reset \textleading,
        \parskip appropriately, call \textfonts.
@@ -10824,17 +10859,17 @@
        * doc/texinfo.tex (\headingsoff): new macro to turn off all
        headings/footings.
        (\HEADINGSoff, \chapoddpage): use it.
-       
+
        (\part, \partzzz): new command @part, always on an odd page.
        (\numeralbox, \partentry, \shortpartentry): handle parts
         in the tables of contents.
-       
+
         (\entry): locally \let\* = \space, so explicit
        line breaks in titles don't become line breaks in the toc's.
-       
+
        (\flushright): need to \relax after glue assignment, lest
        a following L disappear as part of filll glue.
-       
+
        (\unmlevel): rename to \unnlevel.
 
 2010-03-18  Karl Berry  <address@hidden>
@@ -10927,7 +10962,7 @@
        in chain are redirected, else undefined output from a LaTeX \cite
        shows up even with --quiet.
        From Wybo Dekker, 06 Feb 2010 13:33:48.
-       
+
        * util/texi2dvi: untabify.
 
 2010-01-07  Karl Berry  <address@hidden>
Index: doc/texinfo.texi
===================================================================
--- doc/texinfo.texi    (revision 6531)
+++ doc/texinfo.texi    (working copy)
@@ -17745,6 +17745,79 @@
 Name of the command used to produce PostScript, PDF, and DVI; default
 @samp{texi2dvi}.  @address@hidden Printed Output}.
 
address@hidden TEXI2DVI_BUILD_DIRECTORY
+Default directory used for tidy compilation by the @command{texi2dvi}
+script when option @code{--tidy} is used.
+
address@hidden TEXI2DVI_BUILD_MODE
+Selects the build @var{mode} for the @command{texi2dvi} script. Valid 
@var{mode}s are:
address@hidden @code
address@hidden local
+compile in the current directory, leaving all the auxiliary files
+around.  This is the traditional TeX use.
address@hidden tidy
+compile in a local @file{*.t2d} directory, where the auxiliary files are
+left.  Output files are copied back to the original file.
address@hidden clean
+same as @code{tidy}, but remove the auxiliary directory afterwards.
+Every compilation therefore requires the full cycle.
address@hidden ftable
+
address@hidden TEXI2DVI_USE_RECORDER
+This variable is to fine-tune shell script @command{texi2dvi} for it to
+bypass some preliminary tests. Defaults to @code{yesmaybe} if undefined.
+
+The purpose is to run slightly faster : setting it to @code{yes} will
+provide this benefit provided that your @TeX{} distribution supports the
address@hidden option, which is the case for all modern distributions.
+
+This variable provides to @command{texi2dvi} information about what
+method the site @TeX{} distribution supports for detecting which
+auxiliary files @TeX{} will create during compilation. Such a method is
+needed by @command{texi2dvi} in order to devise whether a subsequent
+compilation is needed. As there are two possible methods and none of
+them is supported by all @TeX{} distributions, when
address@hidden is set to @code{yesmaybe} or
address@hidden, @command{texi2dvi} will do some preliminary test in
+order to detect which method can be used. Instead, when
address@hidden is set to @code{yes} or @code{no},
address@hidden won't do the preliminary testing, and thus processing
+time is saved provided that your @TeX{} supports the configured method.
+
+The two methods to detects created auxiliary files are the following:
address@hidden
address@hidden
+by scanning the @file{.fls} file which @TeX{} creates when passed the
address@hidden option, this method is supported by all modern @TeX{}
+distributions, or
address@hidden
+by scanning the @file{.log} file which @TeX{} creates for each
+compilation to find @code{\openout} traces, this method was used
+traditionally by @command{texi2dvi} as it predates the existence of the
address@hidden option, however it was reported that some @TeX{}
+distributions have deprecated it.
address@hidden itemize
+
+The valid values of @code{TEXI2DVI_USE_RECORDER} are as follows:
+
address@hidden @code
address@hidden yes
+use the @code{-recorder} option and @file{.fls} file, no preliminary
+testing: don't configure this value if your @TeX{} does not support
address@hidden option.
address@hidden no
+scan for @code{\openout} in the @file{.log} file, no preliminary
+testing: don't configure this value if your @TeX{} does not traces
address@hidden in the @file{.log} file.
address@hidden yesmaybe
+preliminary test whether @code{-recorder} option is supported, and if
+yes use it, else check for tracing @code{\openout} in the @file{.log}
+file is supported, and if yes use it, otherwise it is an error.
address@hidden nomaybe
+same as @code{yesmaybe}, except that the @code{\openout} trace in
address@hidden file is checked first.
address@hidden ftable
+
 @item TEXI2HTML
 @cindex compatibility, with @command{texi2html}
 Generate HTML and try to be as compatible as possible with
Index: util/texi2dvi
===================================================================
--- util/texi2dvi       (revision 6531)
+++ util/texi2dvi       (working copy)
@@ -102,7 +102,7 @@
 # Now we define numerous functions, with no other executable code.
 # The main program is at the end of the file.
 
-       
+
 #  Standard help and version functions.
 #
 # usage - display usage and exit successfully.
@@ -166,7 +166,28 @@
   -t, --command=CMD          insert CMD in copy of input file
    or --texinfo=CMD          multiple values accumulate
       --translate-file=FILE  use given charset translation file for TeX
+  -u, --use-recorder=USEREC  override value of TEXI2DVI_USE_RECORDER 
environment
+                             variable
 
+The USEREC defines whether TeX output auxiliary files are detected with the TeX
+\`-recorder' option, or with scanning for \`\\openout' in the log file. Valid 
USEREC are:
+    yes           use the -recorder option, no checks.
+    no            scan for \\openout in the log file, no checks.
+    yesmaybe      check whether -recorder option is supported, and if yes
+                 use it, otherwise check for tracing \\openout in the log file
+                 is supported, and if yes use it, else it is an error.
+    nomaybe       same as \`yesmaybe', except that the \\openout trace in log 
file
+                 is checked first.
+
+If neither TEXI2DVI_USE_RECORDER environment variable is set, nor
+option --use-recorder is passed, defaults to \`yesmaybe'.
+
+The purpose of configuring TEXI2DVI_USE_RECORDER in the system
+environment is to allow the user to make texi2dvi faster by bypassing
+the tests done in the \`yesmaybe' and \`nomaybe' cases: so the user
+would select \`yes' or \`no' into TEXI2DVI_USE_RECORDER, whichever
+applicable to his/her site TeX distribution.
+
 Build modes:
   --build=MODE         specify the treatment of auxiliary files [$build_mode]
       --tidy           same as --build=tidy
@@ -471,7 +492,7 @@
 }
 
 
-#  Language auxiliary functions. 
+#  Language auxiliary functions.
 #
 # out_lang_set LANG - set $out_lang to LANG (dvi, pdf, etc.), or error.
 out_lang_set ()
@@ -598,7 +619,7 @@
       false:*) mtd_destfile=$oname
                mtd_destdir=`dirname "$mtd_destfile"`;;
     esac
- 
+
     # We want to compare the source location and the output location,
     # and if they are different, do the move.  But if they are the
     # same, we must preserve the source.  Since we can't assume
@@ -691,6 +712,31 @@
 }
 
 
+generated_files_raw_get_from_log ()
+{
+  if test -f "$1.log"; then
+    # Usually the output is like: \openout1 = `foobar.tex'.
+    # (including the final period)
+    # but luatex outputs: \openout1 = foobar.tex
+    # (no quotes, no period).
+    # So we have to make the punctuation optional.
+    grep '^\\openout[0-9]' "$1.log" \
+      | $SED -e "s/\\\\openout[^=]*= *[\`']*//" \
+             -e "s/'\.$//"
+  fi
+  echo "$1.log"
+
+}
+
+generated_files_raw_get_from_fls ()
+{
+  if test -f "$1.fls"; then
+    grep '^OUTPUT ' "$1.fls" \
+      | cut -b 8-
+  fi
+  echo "$1.fls"
+}
+
 # generated_files_get FILENAME-NOEXT [PREDICATE-FILTER] - Return the
 # list of files generated by the TeX compilation of FILENAME-NOEXT,
 # filtered by (piped through) PREDICATE-FILTER if specified.
@@ -702,19 +748,7 @@
   fi
 
   # Gather the files created by TeX.
-  (
-    if test -f "$1.log"; then
-      # Usually the output is like: \openout1 = `foobar.tex'.
-      # (including the final period)
-      # but luatex outputs: \openout1 = foobar.tex
-      # (no quotes, no period).
-      # So we have to make the punctuation optional.
-      grep '^\\openout[0-9]' "$1.log" \
-        | $SED -e "s/\\\\openout[^=]*= *[\`']*//" \
-             -e "s/'\.$//"
-    fi
-    echo "$1.log"
-  ) |
+  $generated_files_raw_get $1 |
   # Depending on these files, infer outputs from other tools.
   while read file; do
     echo $file
@@ -814,11 +848,7 @@
   return 1
 }
 
-
-#  Running the TeX suite.
-#
-# run_tex - Run TeX as "$tex $in_input", taking care of errors and logs.
-run_tex ()
+make_tex_cmd ()
 {
   case $in_lang:$latex2html:`out_lang_tex` in
     latex:*:dvi|latex:tex4ht:html)
@@ -876,6 +906,11 @@
     esac
   fi
 
+  # Tell TeX about -recorder option, if specified
+  # recorder_option_maybe is in { " -recorder", "" }
+  tex_cmd="$tex_cmd$recorder_option_maybe"
+
+
   # Tell TeX about TCX file, if specified.
   test -n "$translate_file" \
                        && tex_cmd="$tex_cmd --translate-file=$translate_file"
@@ -914,6 +949,15 @@
   # append the \input command.
   tex_cmd="$tex_cmd '${escape}input'"
 
+}
+
+#  Running the TeX suite.
+#
+# run_tex - Run TeX as "$tex $in_input", taking care of errors and logs.
+run_tex ()
+{
+    make_tex_cmd
+
   # TeX's \input does not (easily or reliably) support whitespace
   # characters or other special characters in file names.  Our intensive
   # use of absolute file names makes this worse: the enclosing directory
@@ -1197,7 +1241,7 @@
     ); then :; else
       report "texinfo.tex appears to be broken.
 This may be due to the environment variable TEX set to something
-other than (plain) tex, a corrupt texinfo.tex file, or 
+other than (plain) tex, a corrupt texinfo.tex file, or
 to tex itself simply not working."
       cat "$version_test_dir/txiversion.out"
       cat "$version_test_dir/txiversion.err" >&2
@@ -1401,7 +1445,121 @@
   run_tex_suite
 }
 
+# Make some test about supported method by tex for getting generated
+# files.
+# +----------+------------+----------+
+# |tested    |$1          |$2        |
+# |method    |            |          |
+# +----------+------------+----------+
+# |          |" -recorder"|fls       |
+# |          |            |          |
+# +----------+------------+----------+
+# |          |""          |log       |
+# +----------+------------+----------+
+make_openout_test ()
+{
+  ensure_dir $workdir/check_recorder
+  save_cur_dir=`pwd`
+  cd $workdir/check_recorder
+  test -f openout.tex || cat > openout.tex <<EOF
+\newwrite\ourwrite
+\immediate\openout\ourwrite dum.dum
+\bye
+EOF
+  recorder_option_maybe="$1"
+  save_catcode_special=$catcode_special
+  catcode_special=false
+  make_tex_cmd
+  catcode_special=$save_catcode_special
+  tex_cmd="$tex_cmd openout.tex"
+  verbose "$0: running $tex_cmd ..."
+  rm -fr "openout.$2"
+  eval "$tex_cmd" > /dev/null 2>&1
+}
 
+# Check whether TeX supports -recorder option
+check_recorder_support ()
+{
+  verbose "Checking TeX recorder support..."
+  make_openout_test " -recorder" fls
+  if test -f openout.fls && grep '^OUTPUT dum.dum$' openout.fls > /dev/null; 
then
+    cd $save_cur_dir
+    verbose "Checking TeX recorder support... yes"
+    return 0
+  else
+    cd $save_cur_dir
+    verbose "Checking TeX recorder support... no"
+    return 1
+  fi
+}
+
+# Check whether TeX supports \openout traces in log
+check_openout_in_log_support ()
+{
+  verbose "Checking TeX \openout in log support..."
+  make_openout_test "" log
+  if test -f openout.log && grep '^\\openout0= *`?dum.dum'"'? *$" openout.log; 
then
+    cd $save_cur_dir
+    verbose "Checking TeX \openout in log support... yes"
+    return 0
+  else
+    cd $save_cur_dir
+    verbose "Checking TeX \openout in log support... no"
+    return 1
+  fi
+}
+
+# set that output auxiliary files are detected with the -recorder option
+set_xref_detection_from_fls ()
+{
+  recorder_option_maybe=" -recorder"
+  generated_files_raw_get=generated_files_raw_get_from_fls
+}
+
+# set that output auxiliary files are detected with greping for \openout in 
the log file
+set_xref_detection_from_log ()
+{
+  recorder_option_maybe=''
+  generated_files_raw_get=generated_files_raw_get_from_log
+}
+
+# Decide whether output auxiliary files are detected with -recorder option, or
+# with greping for \openout in the log file.
+resolve_use_recorder ()
+{
+  # Select output file detection method
+  test -n "$TEXI2DVI_USE_RECORDER" || TEXI2DVI_USE_RECORDER=yesmaybe
+
+  case $TEXI2DVI_USE_RECORDER in
+
+    yes) set_xref_detection_from_fls;;
+
+    no)        set_xref_detection_from_log;;
+
+    yesmaybe)
+      if check_recorder_support; then
+       set_xref_detection_from_fls
+      elif check_openout_in_log_support; then
+       set_xref_detection_from_log
+      else
+       error 1 "TeX does not support -recorder, neither does it output openout 
in log"
+      fi
+      ;;
+
+    nomaybe)
+      if check_openout_in_log_support; then
+       set_xref_detection_from_log
+      elif check_recorder_support; then
+       set_xref_detection_from_fls
+      else
+       error 1 "TeX does not support -recorder, neither does it output openout 
in log"
+      fi
+      ;;
+
+    *) error 1 "Invalid value of TEXI2DVI_USE_RECORDER environment variable : 
$TEXI2DVI_USE_RECORDER.";;
+  esac
+}
+
 # remove FILE...
 remove ()
 {
@@ -1628,12 +1786,13 @@
     -p) out_lang_set pdf;;
     -q | -s | --quiet | --silent) quiet=true; batch=true;;
     --src-specials) src_specials=--src-specials;;
-    --shell-escape) shell_escape=--shell-escape;;  
+    --shell-escape) shell_escape=--shell-escape;;
     --tex4ht) latex2html=tex4ht;;
     -t | --texinfo | --command ) shift; textra="$textra\\
 "`echo "$1" | $SED 's/\\\\/\\\\\\\\/g'`;;
     --translate-file ) shift; translate_file="$1";;
     --tidy) build_mode=tidy;;
+    -u | --use-recorder) shift; TEXI2DVI_USE_RECORDER="$1";;
     -v | --vers*) version;;
     -V | --verb*) verb=true;;
     --) # What remains are not options.
@@ -1733,12 +1892,12 @@
 
 
 # Enable tracing, and auxiliary tools output.
-# 
+#
 # This fd should be used where you'd typically use /dev/null to throw
 # output away.  But sometimes it is convenient to see that output (e.g.,
 # from a grep) to aid debugging.  Especially debugging at distance, via
 # the user.
-# 
+#
 if $debug; then
   exec 6>&1
   set -vx
@@ -1797,6 +1956,10 @@
   # Make those directories.
   ensure_dir "$work_build" "$work_bak"
 
+  # Decide whether output auxiliary files are detected with -recorder option, 
or
+  # with greping for \openout in the log file.
+  resolve_use_recorder
+
   case $action in
     compile)
       # Compile the document.
@@ -1812,3 +1975,7 @@
 
 verbose "done."
 exit 0 # exit successfully, not however we ended the loop.
+# Local Variables:
+# sh-basic-offset: 2
+# sh-indentation: 2
+# End:
#! /bin/sh
# texi2dvi --- produce DVI (or PDF) files from Texinfo (or (La)TeX) sources.
# $Id: texi2dvi 6383 2015-07-03 19:13:34Z gavin $
#
# Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
# 2014, 2015 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License,
# or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
# Originally written by Noah Friedman.
#
# Please send bug reports, etc. to address@hidden
# If possible, please send a copy of the output of the script called with
# the `--debug' option when making a bug report.

test -f /bin/ksh && test -z "$RUNNING_KSH" \
  && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \
  && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; }
unset RUNNING_KSH

# No failure shall remain unpunished.
set -e

# In case the default sed doesn't suffice.
: ${SED=sed}

# This string is expanded automatically when this file is checked out.
rcs_revision='$Revision: 6383 $'
rcs_version=`set - $rcs_revision; echo $2`
program=`echo $0 | $SED -e 's!.*/!!'`

build_mode=${TEXI2DVI_BUILD_MODE:-local}
build_dir=${TEXI2DVI_BUILD_DIRECTORY:-.}

orig_pwd=`pwd`

# Initialize variables for option overriding and otherwise.
# Don't use `unset' since old bourne shells don't have this command.
# Instead, assign them an empty value.
action=compile
batch=false     # interact normally
catcode_special=maybe
debug=false
escape="\\"
expand=false    # true for expansion via makeinfo
includes=
line_error=true # pass --file-line-error to TeX
max_iters=7     # when to quit
oname=          # --output
out_lang=dvi
quiet=false     # let the tools' message be displayed
set_language=
src_specials=
shell_escape=
latex2html=hevea  # or set to tex4ht
textra=         # Extra TeX commands to insert in the input file.
txiprereq=19990129 # minimum texinfo.tex version with macro expansion
verb=false      # true for verbose mode
translate_file= # name of charset translation file

# We have to initialize IFS to space tab newline since we save and
# restore IFS and apparently POSIX allows stupid/broken behavior with
# empty-but-set IFS.
# http://lists.gnu.org/archive/html/automake-patches/2006-05/msg00008.html
# We need space, tab and newline, in precisely that order.  And don't leave
# trailing blanks.
space=' '
tab='   '
newline='
'
IFS="$space$tab$newline"

# In case someone pedantic insists on using grep -E.
: ${EGREP=egrep}

# Systems which define $COMSPEC or $ComSpec use semicolons to separate
# directories in TEXINPUTS -- except for Cygwin et al., where COMSPEC
# might be inherited, but : is used.
if test -n "$COMSPEC$ComSpec" \
   && uname | $EGREP -iv 'cygwin|mingw|djgpp' >/dev/null; then
  path_sep=";"
else
  path_sep=":"
fi

# Pacify verbose cds.
CDPATH=${ZSH_VERSION+.}$path_sep


# Now we define numerous functions, with no other executable code.
# The main program is at the end of the file.


#  Standard help and version functions.
#
# usage - display usage and exit successfully.
usage ()
{
  # We used to simply have `echo "$usage"', but coping with the
  # changing behavior of `echo' is much harder than simply using a
  # here-doc.
  #
  #             echo '\noto'   echo '\\noto'   echo -e '\\noto'
  # bash 3.1      \noto           \\noto          \noto
  # bash 3.2       %oto           \noto           -e \noto
  #
  # where % denotes the eol character.
  cat <<EOF
Usage: $program [OPTION]... FILE...
  or:  texi2pdf [OPTION]... FILE...
  or:  pdftexi2dvi [OPTION]... FILE...

Run each Texinfo or (La)TeX FILE through TeX in turn until all
cross-references are resolved, building all indices.  The directory
containing each FILE is searched for included files.  The suffix of FILE
is used to determine its language ((La)TeX or Texinfo).  To process
(e)plain TeX files, set the environment variable LATEX=tex.

In order to make texi2dvi a drop-in replacement of TeX/LaTeX in AUC-TeX,
the FILE may also be composed of the following simple TeX commands.
  \`\\input{FILE}'     the actual file to compile
  \`\\nonstopmode'     same as --batch

When invoked as \`texi2pdf' or \`pdftexi2dvi', or given the option --pdf
or --dvipdf, generate PDF output.  Otherwise, generate DVI.

General options:
  -b, --batch         no interaction
  -D, --debug         turn on shell debugging (set -x)
  -h, --help          display this help and exit successfully
  -o, --output=OFILE  leave output in OFILE; only one input FILE is allowed
  -q, --quiet         no output unless errors (implies --batch)
  -s, --silent        same as --quiet
  -v, --version       display version information and exit successfully
  -V, --verbose       report on what is done

Output format:
      --dvi     output a DVI file [default]
      --dvipdf  output a PDF file via DVI (using a dvi-to-pdf program)
      --html    output an HTML file from LaTeX, using HeVeA
      --info    output an Info file from LaTeX, using HeVeA
  -p, --pdf     use pdftex or pdflatex for processing
      --ps      output a PostScript file via DVI (using dvips)
      --text    output a plain text file from LaTeX, using HeVeA

TeX tuning:
  -@                         use @input instead of \input for preloaded Texinfo
  -e, -E, --expand           force macro expansion using makeinfo
  -I DIR                     search DIR for Texinfo files
  -l, --language=LANG        specify LANG for FILE, either latex or texinfo
      --no-line-error        do not pass --file-line-error to TeX
      --shell-escape         pass --shell-escape to TeX
      --src-specials         pass --src-specials to TeX
  -t, --command=CMD          insert CMD in copy of input file
   or --texinfo=CMD          multiple values accumulate
      --translate-file=FILE  use given charset translation file for TeX
  -u, --use-recorder=USEREC  override value of TEXI2DVI_USE_RECORDER environment
                             variable

The USEREC defines whether TeX output auxiliary files are detected with the TeX
\`-recorder' option, or with scanning for \`\\openout' in the log file. Valid 
USEREC are:
    yes           use the -recorder option, no checks.
    no            scan for \\openout in the log file, no checks.
    yesmaybe      check whether -recorder option is supported, and if yes
                 use it, otherwise check for tracing \\openout in the log file
                 is supported, and if yes use it, else it is an error.
    nomaybe       same as \`yesmaybe', except that the \\openout trace in log 
file
                 is checked first.

If neither TEXI2DVI_USE_RECORDER environment variable is set, nor
option --use-recorder is passed, defaults to \`yesmaybe'.

The purpose of configuring TEXI2DVI_USE_RECORDER in the system
environment is to allow the user to make texi2dvi faster by bypassing
the tests done in the \`yesmaybe' and \`nomaybe' cases: so the user
would select \`yes' or \`no' into TEXI2DVI_USE_RECORDER, whichever
applicable to his/her site TeX distribution.

Build modes:
  --build=MODE         specify the treatment of auxiliary files [$build_mode]
      --tidy           same as --build=tidy
  -c, --clean          same as --build=clean
      --build-dir=DIR  specify where the tidy compilation is performed;
                         implies --tidy;
                         defaults to TEXI2DVI_BUILD_DIRECTORY [$build_dir]
  --mostly-clean       remove the auxiliary files and directories
                         but not the output
  --max-iterations=N   don't process files more than N times [$max_iters]

The MODE specifies where the TeX compilation takes place, and, as a
consequence, how auxiliary files are treated.  The build mode
can also be set using the environment variable TEXI2DVI_BUILD_MODE.

Valid MODEs are:
  \`local'      compile in the current directory, leaving all the auxiliary
               files around.  This is the traditional TeX use.
  \`tidy'       compile in a local *.t2d directory, where the auxiliary files
               are left.  Output files are copied back to the original file.
  \`clean'      same as \`tidy', but remove the auxiliary directory afterwards.
               Every compilation therefore requires the full cycle.

Using the \`tidy' mode brings several advantages:
  - the current directory is not cluttered with plethora of temporary files.
  - clutter can be even further reduced using --build-dir=dir: all the *.t2d
    directories are stored there.
  - clutter can be reduced to zero using, e.g., --build-dir=/tmp/\$USER.t2d
    or --build-dir=\$HOME/.t2d.
  - the output file is updated after every successful TeX run, for
    sake of concurrent visualization of the output.  In a \`local' build
    the viewer stops during the whole TeX run.
  - if the compilation fails, the previous state of the output file
    is preserved.
  - PDF and DVI compilation are kept in separate subdirectories
    preventing any possibility of auxiliary file incompatibility.

On the other hand, because \`tidy' compilation takes place in another
directory, occasionally TeX won't be able to find some files (e.g., when
using \\graphicspath): in that case, use -I to specify the additional
directories to consider.

The values of these environment variables are used to run the
corresponding commands, if they are set:

  BIBER BIBTEX DVIPDF DVIPS EGREP HEVEA LATEX MAKEINDEX MAKEINFO
  PDFLATEX PDFTEX SED T4HT TEX TEX4HT TEXINDEX TEXINDY THUMBPDF_CMD

Regarding --dvipdf, if DVIPDF is not set in the environment, the
following programs are looked for (in this order): dvipdfmx dvipdfm
dvipdf dvi2pdf dvitopdf.

Any CMD strings are added after @setfilename for Texinfo input, or in
the first line for LaTeX input.

Report bugs to address@hidden,
general questions and discussion to address@hidden
GNU Texinfo home page: <http://www.gnu.org/software/texinfo/>
General help using GNU software: <http://www.gnu.org/gethelp/>
EOF
  exit 0
}


# version - Display version info and exit successfully.
version ()
{
  cat <<EOF
texi2dvi (GNU Texinfo 6.0+dev) $rcs_version

Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
EOF
  exit 0
}


#  Generic auxiliary functions.

# cd_orig - Return to the original directory.
cd_orig ()
{
  # In case $orig_pwd is on a different drive (for DOS).
  cd /

  # Return to the original directory so that
  # - the next file is processed in correct conditions
  # - the temporary file can be removed
  cd "$orig_pwd" || exit 1
}


# func_dirname FILE - Return the directory part of FILE.
func_dirname ()
{
  dirname "$1" 2>/dev/null \
  || { echo "$1" | $SED 's!/[^/]*$!!;s!^$!.!'; }
}


# noext FILE - Return FILE with one extension removed:
#   foo.bar.baz -> foo.bar
noext ()
{
  echo "$1" | $SED -e 's/\.[^/.][^/.]*$//'
}


# absolute NAME - Return an absolute path to NAME.
absolute ()
{
  case $1 in
   [\\/]* | ?:[\\/]*)
      # Absolute paths don't need to be expanded.
      echo "$1"
      ;;
   *) absolute_slashes=`echo "$1" | $SED -n 's,.*[^/]\(/*\)$,\1,p'`
      absolute_rel=$orig_pwd/`func_dirname "$1"`
      if test -d "$absolute_rel"; then
        (cd "$absolute_rel" 2>/dev/null \
         && absolute_name=`pwd`/`basename "$1"`"$absolute_slashes"
         echo "$absolute_name")
      else
        error 1 "not a directory: $absolute_rel"
      fi
      ;;
  esac
}


# ensure_dir DIR1 DIR2... - Make sure given directories exist.
ensure_dir ()
{
  for dir
  do
    # Beware that in parallel builds we may have several concurrent
    # attempts to create the directory.  So fail only if "mkdir"
    # failed *and* the directory still does not exist.
    test -d "$dir" \
      || mkdir "$dir" \
      || test -d "$dir" \
      || error 1 "cannot create directory: $dir"
  done
}


# error EXIT_STATUS LINE1 LINE2... - Report an error and exit with
#   failure if EXIT_STATUS is non-null.
error ()
{
  error_status="$1"
  shift
  report "$@"
  if test "$error_status" != 0; then
    exit $error_status
  fi
}


# findprog PROG - Return true if PROG is somewhere in PATH, else false.
findprog ()
{
  saveIFS="$IFS"
  IFS=$path_sep  # break path components at the path separator
  for dir in $PATH; do
    IFS=$saveIFS
    # The basic test for an executable is `test -f $f && test -x $f'.
    # (`test -x' is not enough, because it can also be true for directories.)
    # We have to try this both for $1 and $1.exe.
    #
    # Note: On Cygwin and DJGPP, `test -x' also looks for .exe.  On Cygwin,
    # also `test -f' has this enhancement, but not on DJGPP.  (Both are
    # design decisions, so there is little chance to make them consistent.)
    # Thusly, it seems to be difficult to make use of these enhancements.
    #
    if   { test -f "$dir/$1"     && test -x "$dir/$1"; } \
      || { test -f "$dir/$1.exe" && test -x "$dir/$1.exe"; }; then
      return 0
    fi
  done
  return 1
}

# report LINE1 LINE2... - Echo each argument to stderr.
report ()
{
  for i in "$@"
  do
    echo >&2 "$0: $i"
  done
}


# run COMMAND-LINE - Run COMMAND-LINE verbosely, catching errors as failures.
run ()
{
  verbose "Running $@"
  "$@" 2>&5 1>&2 \
  || error 1 "$1 failed"
}


# verbose WORD1 WORD2... - Echo concatenated WORDs to stderr, if $verb.
verbose ()
{
  if $verb; then
    echo >&2 "$0: $@"
  fi
}


#  Handling lists.
#
# list_append LIST-NAME ELEM - Append ELEM to (the contents of) LIST-NAME.
list_append ()
{
  list_name="$1"
  shift
  eval set X \$$list_name "$@"
  shift
  eval $list_name=\""$@"\"
}


# list_concat_dirs LIST-NAME DIR-LIST - Append to LIST-NAME all the
# components (including empty ones) from the $path_sep-separated list
# DIR-LIST.  Make the paths absolute.
list_concat_dirs ()
{
  lcd_list="$1"
  # Empty path components are meaningful to tex.  We rewrite them as
  # `EMPTY' so they don't get lost when we split on $path_sep.
  # Hopefully no one will have an actual directory named EMPTY.
  lcd_replace_EMPTY="-e 's/^$path_sep/EMPTY$path_sep/g' \
                     -e 's/$path_sep\$/${path_sep}EMPTY/g' \
                     -e 's/$path_sep$path_sep/${path_sep}EMPTY:/g'"
  save_IFS=$IFS
  IFS=$path_sep
  set x `echo "$2" | eval $SED $lcd_replace_EMPTY`; shift
  IFS=$save_IFS
  for lcd_dir
  do
    case $lcd_dir in
      EMPTY)
       list_append $lcd_list ""
       ;;
      *)
       if test -d $lcd_dir; then
          dir=`absolute "$lcd_dir"`
         list_append $lcd_list "$lcd_dir"
       fi
       ;;
    esac
  done
}


# list_prefix LIST-NAME SEP -> STRING - Return string with each element
# of LIST-NAME preceded by SEP.
list_prefix ()
{
  lp_separator="$2"
  eval set X \$$1
  shift
  lp_result=''
  for i
  do
    lp_result="$lp_result \"$lp_separator\" \"$i\""
  done
  echo "$lp_result"
}

# list_infix LIST-NAME SEP -> STRING - Same as list_prefix, but a separator.
list_infix ()
{
  eval set X \$$1
  shift
  save_IFS="$IFS"
  IFS=$path_sep
  echo "$*"
  IFS=$save_IFS
}

# list_dir_to_abs LIST-NAME - Convert list to using only absolute dir names.
# Currently unused, but should replace absolute_filenames some day.
list_dir_to_abs ()
{
  ldta_list="$1"
  eval set X \$$ldta_list
  shift
  ldta_result=''
  for dir
  do
    dir=`absolute "$dir"`
    test -d "$dir" || continue
    ldta_result="$ldata_result \"$dir\""
  done
  set X $ldta_result; shift
  eval $ldta_list=\"address@hidden"
}


#  Language auxiliary functions.
#
# out_lang_set LANG - set $out_lang to LANG (dvi, pdf, etc.), or error.
out_lang_set ()
{
  case $1 in
    dvi|dvipdf|html|info|pdf|ps|text) out_lang=$1;;
    *) error 1 "invalid output format: $1";;
  esac
}

# out_lang_tex - Return the tex output language (DVI or PDF) for $out_lang.
out_lang_tex ()
{
  case $out_lang in
    dvi | ps | dvipdf ) echo dvi;;
    pdf ) echo $out_lang;;
    html | info | text ) echo $out_lang;;
    *)    error 1 "invalid out_lang: $1";;
  esac
}

# out_lang_ext - Return the extension for $out_lang (pdf, dvi, etc.).
out_lang_ext ()
{
  case $out_lang in
    dvipdf ) echo pdf;;
    dvi | html | info | pdf | ps | text ) echo $out_lang;;
    *)    error 1 "invalid out_lang: $1";;
  esac
}


#  TeX file auxiliary functions.
#
# absolute_filenames TEX-PATH -> TEX-PATH - Convert relative paths to
# absolute, so we can run in another directory (e.g., in tidy build
# mode, or during the macro-support detection).  Prepend ".$path_sep".
absolute_filenames ()
{
  # Empty path components are meaningful to tex.  We rewrite them as
  # `EMPTY' so they don't get lost when we split on $path_sep.
  # Hopefully no one will have an actual directory named EMPTY.
  af_replace_empty="-e 's/^$path_sep/EMPTY$path_sep/g' \
                    -e 's/$path_sep\$/${path_sep}EMPTY/g' \
                    -e 's/$path_sep$path_sep/${path_sep}EMPTY:/g'"
  af_result=`echo "$1" | eval $SED $af_replace_empty`
  save_IFS=$IFS
  IFS=$path_sep
  set x $af_result; shift
  af_result=.
  for dir
  do
    case $dir in
      EMPTY)
        af_result=$af_result$path_sep
        ;;
      *)
        if test -d "$dir"; then
          af_result=$af_result$path_sep`absolute "$dir"`
        else
          # Even if $dir is not a directory, preserve it in the path.
          # It might contain metacharacters that TeX will expand in
          # turn, e.g., /some/path/{a,b,c}.  This will not get the
          # implicit absolutification of the path, but we can't help that.
          af_result=$af_result$path_sep$dir
        fi
        ;;
    esac
  done
  echo "$af_result"
}


# output_base_name FILE - Return the name of FILE, possibly renamed to
# satisfy --output.  FILE is local, i.e., without any directory part.
output_base_name ()
{
  case $oname in
    '') echo "$1";;
     *) obn_out_noext=`noext "$oname"`
        obn_file_ext=`echo "$1" | $SED 's/^.*\.//'`
        echo "$obn_out_noext.$obn_file_ext"
      ;;
  esac
}


# destdir - Return the directory where the output is expected.
destdir ()
{
  case $oname in
    '')  echo "$orig_pwd";;
    *)   dirname "$oname";;
  esac
}


# move_to_dest FILE... - Move FILE(s) to the place where the user expects.
# Truly move it, that is, it must not remain in its build location
# unless that is also the output location.  (Otherwise it might appear
# as an extra file in make distcheck.)
#
# FILE can be the principal output (in which case -o directly applies),
# or an auxiliary file with the same base name.
move_to_dest ()
{
#  echo "move_to_dest $*, tidy=$tidy, oname=$oname"

  # If we built in place and have no output name, there is nothing to
  # do, so just return.
  case $tidy:$oname in
    false:) return;;
  esac

  for file
  do
    test -f "$file" \
    || error 1 "no such file or directory: $file"
    case $tidy:$oname in
      true:)  mtd_destdir=$orig_pwd
              mtd_destfile=$mtd_destdir/$file;;
      true:*) mtd_destfile=`output_base_name "$file"`
              mtd_destdir=`dirname "$mtd_destfile"`;;
      false:*) mtd_destfile=$oname
               mtd_destdir=`dirname "$mtd_destfile"`;;
    esac

    # We want to compare the source location and the output location,
    # and if they are different, do the move.  But if they are the
    # same, we must preserve the source.  Since we can't assume
    # stat(1) or test -ef is available, resort to comparing the
    # directory names, canonicalized with pwd.  We can't use cmp -s
    # since the output file might not actually change from run to run;
    # e.g., TeX DVI output is timestamped to only the nearest minute.
    mtd_destdir=`cd "$mtd_destdir" && pwd`
    mtd_destbase=`basename "$mtd_destfile"`

    mtd_sourcedir=`dirname "$file"`
    mtd_sourcedir=`cd "$mtd_sourcedir" && pwd`
    mtd_sourcebase=`basename "$file"`

    if test "$mtd_sourcedir/$mtd_sourcebase" != "$mtd_destdir/$mtd_destbase"
    then
      verbose "Moving $file to $mtd_destfile"
      rm -f "$mtd_destfile"
      mv "$file" "$mtd_destfile"
    fi
  done
}


#  Managing xref files.
#
# aux_file_p FILE - Return success if FILE is an aux file.
aux_file_p ()
{
  test -f "$1" || return 1
  case $1 in
    *.aux) return 0;;
    *)     return 1;;
  esac
}

# bibaux_file_p FILE - Return success if FILE contains citation requests.
bibaux_file_p ()
{
  test -s "$1" || return 1
  if (grep '^\\bibstyle[{]' "$1"   \
      && grep '^\\bibdata[{]' "$1" \
      ## The following line is suspicious: fails when there
      ## are citations in sub aux files.  We need to be
      ## smarter in this case.
      ## && grep '^\\citation[{]' "$f"
      ) >&6 2>&1;
  then
    return 0
  fi
  return 1
}

# index_file_p FILE - Return success if FILE is an index file.
index_file_p ()
{
  test -f "$1" || return 1
  case $in_lang:$latex2html:`out_lang_tex`:`$SED '1q' "$1"` in
    # When working with TeX4HT, *.idx are created by LaTeX.  They must
    # be processed to produce *.4ix, *.4dx files.  The *.4dx file is
    # passed to makeindex to produce the *.ind file.  This sequence is
    # handled by run_index, so we are only interested in the *.idx
    # files, which have each "\indexentry" preceded by a
    # "\beforeentry".
    latex:tex4ht:html:"\\beforeentry {"*) return 0;;

    # When index.sty is used, there is a space before the brace.
    latex:*:*:"\\indexentry{"*|latex:*:*:"\\indexentry {"*) return 0;;

    texinfo:*:*:"\\entry{"*) return 0;;

    *) return 1;;
  esac
}

# xref_file_p FILE - Return success if FILE is an xref file (indexes,
# tables and lists).
xref_file_p ()
{
  test -f "$1" || return 1
  # If the file is not suitable to be an index or xref file, don't
  # process it.  It's suitable if the first character is a
  # backslash or right quote or at, as long as the first line isn't
  # \input texinfo.
  case `$SED '1q' "$1"` in
    "\\input texinfo"*) return 1;;
    [\\''@]*)           return 0;;
           *)           return 1;;
  esac
}


generated_files_raw_get_from_log ()
{
  if test -f "$1.log"; then
    # Usually the output is like: \openout1 = `foobar.tex'.
    # (including the final period)
    # but luatex outputs: \openout1 = foobar.tex
    # (no quotes, no period).
    # So we have to make the punctuation optional.
    grep '^\\openout[0-9]' "$1.log" \
      | $SED -e "s/\\\\openout[^=]*= *[\`']*//" \
             -e "s/'\.$//"
  fi
  echo "$1.log"

}

generated_files_raw_get_from_fls ()
{
  if test -f "$1.fls"; then
    grep '^OUTPUT ' "$1.fls" \
      | cut -b 8-
  fi
  echo "$1.fls"
}

# generated_files_get FILENAME-NOEXT [PREDICATE-FILTER] - Return the
# list of files generated by the TeX compilation of FILENAME-NOEXT,
# filtered by (piped through) PREDICATE-FILTER if specified.
generated_files_get ()
{
  gfg_filter=true
  if test -n "$2"; then
    gfg_filter=$2
  fi

  # Gather the files created by TeX.
  $generated_files_raw_get $1 |
  # Depending on these files, infer outputs from other tools.
  while read file; do
    echo $file
    case $in_lang in
      texinfo)
        # texindex: texinfo.cp -> texinfo.cps
       if index_file_p $file; then
         echo ${file}s
       fi
       ;;
      latex)
        if aux_file_p $file; then
          # bibtex: *.aux -> *.bbl and *.blg.
          echo $file | $SED 's/^\(.*\)\.aux$/\1.bbl/'
          echo $file | $SED 's/^\(.*\)\.aux$/\1.blg/'
          # -recorder: .fls
          echo $file | $SED 's/^\(.*\)\.aux$/\1.fls/'
       fi
       ;;
    esac
  done |
  # Filter existing files matching the criterion.
  #
  # With an input file name containing a space, this produces a
  # "command not found" message (and filtering is ineffective).
  # The situation with a newline is presumably even worse.
  while read file; do
    if $gfg_filter "$file"; then
      echo $file
    fi
  done |
  sort |
  # Some files are opened several times, e.g., listings.sty's *.vrb.
  uniq
}


# xref_files_save - Save xref files in $work_bak with tar.
xref_files_save ()
{
  # Save copies of auxiliary files for later comparison.
  xref_files_orig=`generated_files_get "$in_noext" xref_file_p`
  if test -n "$xref_files_orig"; then
    verbose "Backing up xref files: $xref_files_orig"
    # The following line improves `cp $xref_files_orig "$work_bak"'
    # by preserving the directory parts.  Think of
    # cp chap1/main.aux chap2/main.aux $work_bak.
    #
    # Users may have, e.g., --keep-old-files.  Don't let this interfere.
    # (Don't use unset for the sake of ancient shells.)
    TAR_OPTIONS=; export TAR_OPTIONS
    tar cf - $xref_files_orig | (cd "$work_bak" && tar xf -)
  fi
}


# xref_files_changed - Return success if  the xref files have changed
# since the previous run.
xref_files_changed ()
{
  # LaTeX (and the package changebar) report in the LOG file if it
  # should be rerun.  This is needed for files included from
  # subdirs, since texi2dvi does not try to compare xref files in
  # subdirs.  Performing xref files test is still good since LaTeX
  # does not report changes in xref files.
  if grep "Rerun to get" "$in_noext.log" >&6 2>&1; then
    return 0
  fi
  # Similarly, check for biblatex report of whether rerunning is needed.
  if grep "biblatex.*(re)run" "$in_noext.log" >&6 2>&1; then
    return 0
  fi

  # If old and new lists don't have the same file list,
  # then something has definitely changed.
  xref_files_new=`generated_files_get "$in_noext" xref_file_p`
  verbose "Original xref files = $xref_files_orig"
  verbose "New xref files      = $xref_files_new"
  if test "x$xref_files_orig" != "x$xref_files_new"; then
    return 0
  fi

  # Compare each file until we find a difference.
  for this_file in $xref_files_new; do
    verbose "Comparing xref file `echo $this_file | $SED 's|\./||g'` ..."
    # cmp -s returns nonzero exit status if files differ.
    if cmp -s "$this_file" "$work_bak/$this_file"; then :; else
      verbose "xref file `echo $this_file | $SED 's|\./||g'` differed ..."
      if $debug; then
        diff -u "$work_bak/$this_file" "$this_file"
      fi
      return 0
    fi
  done

  # No change.
  return 1
}

make_tex_cmd ()
{
  case $in_lang:$latex2html:`out_lang_tex` in
    latex:*:dvi|latex:tex4ht:html)
        tex=${LATEX:-latex};;
    latex:*:pdf)
        tex=${PDFLATEX:-pdflatex};;
    texinfo:*:dvi)
        # MetaPost also uses the TEX environment variable.  If the user
        # has set TEX=latex for that reason, don't bomb out.
        case $TEX in
          *latex) tex=tex;; # don't bother trying to find etex
               *) tex=$TEX
        esac;;
    texinfo:*:pdf) tex=$PDFTEX;;
    *) error 1 "$out_lang not supported for $in_lang";;
  esac

  # do the special catcode trick for ~ in filenames only for Texinfo,
  # not LaTeX.
  if test x"$in_lang" = xtexinfo && test $catcode_special = maybe; then
    catcode_special=true
  else
    catcode_special=false
  fi

  # Beware of aux files in subdirectories that require the
  # subdirectory to exist.
  case $in_lang:$tidy in
    latex:true)
       $SED -n 's|^[ ]*\\include{\(.*\)/.*}.*|\1|p' "$in_input" |
       sort -u |
       while read d
       do
         ensure_dir "$work_build/$d"
       done
       ;;
  esac

  # Note that this will be used via an eval: quote properly.
  tex_cmd="$tex"

  # If possible, make TeX report error locations in GNU format.
  if $line_error; then
    if test "${tex_help:+set}" != set; then
      # Go to a temporary directory to try --help, since old versions that
      # don't accept --help will generate a texput.log.
      tex_help_dir=$t2ddir/tex_help
      ensure_dir "$tex_help_dir"
      tex_help=`cd "$tex_help_dir" >&6 && $tex --help </dev/null 2>&1 || true`
    fi
    # The mk program and perhaps others want to parse TeX's
    # original error messages.
    case $tex_help in
      *file-line-error*) tex_cmd="$tex_cmd --file-line-error";;
    esac
  fi

  # Tell TeX about -recorder option, if specified
  # recorder_option_maybe is in { " -recorder", "" }
  tex_cmd="$tex_cmd$recorder_option_maybe"


  # Tell TeX about TCX file, if specified.
  test -n "$translate_file" \
                       && tex_cmd="$tex_cmd --translate-file=$translate_file"

  # Tell TeX to make source specials (for backtracking from output to
  # source, given a sufficiently smart editor), if specified.
  test -n "$src_specials" && tex_cmd="$tex_cmd $src_specials"

  # Tell TeX to allow running external executables
  test -n "$shell_escape" && tex_cmd="$tex_cmd $shell_escape"

  # Tell TeX to be batch if requested.
  if $batch; then
    # \batchmode does not show terminal output at all, so we don't
    # want that.  And even in batch mode, TeX insists on having input
    # from the user.  Close its stdin to make it impossible.
    tex_cmd="$tex_cmd </dev/null '${escape}nonstopmode'"
  fi

  # we'd like to handle arbitrary input file names, especially
  # foo~bar/a~b.tex, since Debian likes ~ characters.
  if $catcode_special; then
    # $normaltilde is just to reduce line length in this source file.
    # The idea is to define \normaltilde as a catcode other ~ character,
    # then make the active ~ be equivalent to that, instead of the plain
    # TeX tie.  Then when the active ~ appears in the filename, it will
    # be expanded to itself, as far as \input will see.  (This is the
    # same thing that texinfo.tex does in general, BTW.)
    normaltilde="${escape}catcode126=12 ${escape}def${escape}normaltilde{~}"
    tex_cmd="$tex_cmd '$normaltilde${escape}catcode126=13 
${escape}let~\normaltilde '"
  fi
  # Other special (non-active) characters could be supported by
  # resetting their catcodes to other on the command line and changing
  # texinfo.tex to initialize everything to plain catcodes.  Maybe someday.

  # append the \input command.
  tex_cmd="$tex_cmd '${escape}input'"

}

#  Running the TeX suite.
#
# run_tex - Run TeX as "$tex $in_input", taking care of errors and logs.
run_tex ()
{
    make_tex_cmd

  # TeX's \input does not (easily or reliably) support whitespace
  # characters or other special characters in file names.  Our intensive
  # use of absolute file names makes this worse: the enclosing directory
  # names may include white spaces.  Improve the situation using a
  # symbolic link to the filename in the current directory, in tidy mode
  # only.  Do not alter in_input.
  #
  # The filename is almost always tokenized using plain TeX conventions
  # (the exception would be if the user made a texinfo.fmt file).  Not
  # all the plain TeX special characters cause trouble, but there's no
  # harm in making the link.
  #
  case $tidy:`func_dirname "$in_input"` in
    true:*["$space$tab$newline\"#\$%\\^_{}~"]*)
      _run_tex_file_name=`basename "$in_input"`
      if test ! -f "$_run_tex_file_name"; then
        # It might not be a file, clear it.
        run rm -f "$_run_tex_file_name"
        run ln -s "$in_input"
      fi
      tex_cmd="$tex_cmd '$_run_tex_file_name'"
      ;;

    *)
      tex_cmd="$tex_cmd '$in_input'"
      ;;
  esac

  verbose "$0: Running $tex_cmd ..."
  if eval "$tex_cmd" >&5; then
    case $out_lang in
      dvi | pdf ) move_to_dest "$in_noext.$out_lang";;
    esac
  else
    error 1 "$tex exited with bad status, quitting."
  fi
}


# run_bibtex - Run bibtex (or biber) on current file
# - if its input (AUX) exists,
# - or if some citations are missing (LOG contains `Citation'),
# - or if the LOG complains of a missing .bbl.
#
# Don't try to be too smart:
# 1. Running bibtex only if the bbl file exists and is older than
# the LaTeX file is wrong, since the document might include files
# that have changed.
#
# 2. Because there can be several AUX (if there are \include's),
# but a single LOG, looking for missing citations in LOG is
# easier, though we take the risk of matching false messages.
run_bibtex ()
{
  case $in_lang in
    latex)   bibtex=${BIBTEX:-bibtex};;
    texinfo) return;;
  esac

  # "Citation undefined" is for LaTeX, "Undefined citation" for btxmac.tex.
  # The no .aux && \bibdata test is also for btxmac, in case it was the
  # first run of a bibtex-using document.  Otherwise, it's possible that
  # bibtex would never be run.
  if test -r "$in_noext.aux" \
     && test -r "$in_noext.log" \
     && ( (grep 'Warning:.*Citation.*undefined' "$in_noext.log" \
          || grep '.*Undefined citation' "$in_noext.log" \
          || grep 'No file .*\.bbl\.' "$in_noext.log") \
          || (grep 'No \.aux file' "$in_noext.log" \
              && grep '^\\bibdata' "$in_noext.aux") ) \
        >&6 2>&1; \
  then
    bibtex_aux=`generated_files_get "$in_noext" bibaux_file_p`
    for f in $bibtex_aux; do
      run $bibtex "$f"
    done
  fi

  # biber(+biblatex) check.
  if test -r "$in_noext.bcf" \
     && grep '</bcf:controlfile>' "$in_noext.bcf" >/dev/null; then
    run ${BIBER:-biber} "$in_noext"
  fi
}


# run_index - Run texindex (or makeindex or texindy) on current index
# files.  If they already exist, and after running TeX a first time the
# index files don't change, then there's no reason to run TeX again.
# But we won't know that if the index files are out of date or nonexistent.
run_index ()
{
  index_files=`generated_files_get $in_noext index_file_p`
  test -n "$index_files" \
  || return 0

  : ${MAKEINDEX:=makeindex}
  : ${TEXINDEX:=texindex}
  : ${TEXINDY:=texindy}

  case $in_lang:$latex2html:`out_lang_tex` in
    latex:tex4ht:html)
      for index_file in $index_files
      do
        index_noext=`noext "$index_file"`
        run tex \
            '\def\filename{{'"$index_noext"'}{idx}{4dx}{ind}}
             \input idxmake.4ht'
        run $MAKEINDEX -o $index_noext.ind $index_noext.4dx
      done
      ;;

    latex:*)
      if $TEXINDY --version >&6 2>&1; then
        run $TEXINDY $index_files
      else
        run $MAKEINDEX $index_files
      fi
      ;;

    texinfo:*)
      run $TEXINDEX $index_files
      ;;
  esac
}


# run_tex4ht - Run the last two phases of TeX4HT: tex4ht extracts the
# HTML from the instrumented DVI file, and t4ht converts the figures and
# installs the files when given -d.
#
# Because knowing exactly which files are created is complex (in
# addition the names are not simple to compute), which makes it
# difficult to install the output files in a second step, we
# tell t4ht to install the output files.
run_tex4ht ()
{
  case $in_lang:$latex2html:`out_lang_tex` in
    latex:tex4ht:html)
      : ${TEX4HT:=tex4ht} ${T4HT:=t4ht}
      run "$TEX4HT" "-f/$in_noext"
      # Do not remove the / after the destdir.
      run "$T4HT" "-d`destdir`/" "-f/$in_noext"
      ;;
  esac
}


# run_thumbpdf - Run thumbpdf.
run_thumbpdf ()
{
  if test `out_lang_tex` = pdf \
     && test -r "$in_noext.log" \
     && grep 'thumbpdf\.sty'  "$in_noext.log" >&6 2>&1; \
  then
    thumbpdf=${THUMBPDF_CMD:-thumbpdf}
    thumbcmd="$thumbpdf $in_dir/$in_noext"
    verbose "Running $thumbcmd ..."
    if $thumbcmd >&5; then
      run_tex
    else
      report "$thumbpdf exited with bad status." \
             "Ignoring its output."
    fi
  fi
}


# run_dvipdf FILE.dvi - Convert FILE.dvi to FILE.pdf.
run_dvipdf ()
{
  # Find which dvi->pdf program is available.
  if test -n "$DVIPDF"; then
    dvipdf=$DVIPDF  # user envvar, use it without checking

  elif test -z "$dvipdf"; then
    for i in dvipdfmx dvipdfm dvipdf dvi2pdf dvitopdf; do
      if findprog $i; then
        dvipdf=$i
      fi
    done
  fi
  # These tools have varying interfaces, some 'input output', others
  # 'input -o output'.  They all seem to accept 'input' only,
  # outputting using the expected file name.
  run $dvipdf "$1"
  if test ! -f `echo "$1" | $SED -e 's/\.dvi$/.pdf/'`; then
    error 1 "cannot find output file"
  fi
}

# run_tex_suite - Run the TeX tools until a stable point is reached.
run_tex_suite ()
{
  # Move to the working directory.
  if $tidy; then
    verbose "cd $work_build"
    cd "$work_build" || exit 1
  fi

  # Count the number of cycles.
  suite_cycle=0

  while :; do
    # check for (probably) LaTeX loop (e.g. varioref)
    if test $suite_cycle -eq "$max_iters"; then
      error 0 "Maximum of $max_iters cycles exceeded"
      break
    fi

    # report progress
    suite_cycle=`expr $suite_cycle + 1`
    verbose "Cycle $suite_cycle for $command_line_filename"

    xref_files_save

    # We run bibtex first, because it's more likely for the indexes
    # to change after bibtex is run than the reverse, though either
    # would be rare.
    run_bibtex
    run_index
    run_core_conversion

    xref_files_changed || break
  done

  # If we were using thumbpdf and producing PDF, then run thumbpdf
  # and TeX one last time.
  run_thumbpdf

  # If we are using tex4ht, call it.
  run_tex4ht

  # Install the result if we didn't already (i.e., if the output is
  # dvipdf or ps).
  case $latex2html:$out_lang in
    *:dvipdf)
      run_dvipdf "$in_noext.`out_lang_tex`"
      move_to_dest "$in_noext.`out_lang_ext`"
      ;;
    *:ps)
      : ${DVIPS:=dvips}
      run $DVIPS -o "$in_noext.`out_lang_ext`" "$in_noext.`out_lang_tex`"
      move_to_dest "$in_noext.`out_lang_ext`"
      ;;
  esac

  cd_orig
}


#  TeX processing auxiliary tools.
#
# run_makeinfo - Expand macro commands in the original source file using
# Makeinfo.  Always use `end' footnote style, since the `separate' style
# generates different output (arguably this is a bug in -E).  Discard
# main info output, the user asked to run TeX, not makeinfo.
run_makeinfo ()
{
  test $in_lang = texinfo \
    || return 0

  # Unless required by the user, makeinfo expansion is wanted only
  # if texinfo.tex is too old.
  if $expand; then
    makeinfo=${MAKEINFO:-makeinfo}
  else
    # Check if texinfo.tex performs macro expansion by looking for
    # its version.  The version is a date of the form YEAR-MO-DA.
    # We don't need to use [0-9] to match the digits since anyway
    # the comparison with $txiprereq, a number, will fail with non-digits.
    # Run in a temporary directory to avoid leaving files.
    version_test_dir=$t2ddir/version_test
    ensure_dir "$version_test_dir"
    if (
       cd "$version_test_dir"
       echo '\input texinfo.tex @bye' >txiversion.tex
       # Be sure that if tex wants to fail, it is not interactive:
       # close stdin.
       $TEX txiversion.tex </dev/null >txiversion.out 2>txiversion.err
    ); then :; else
      report "texinfo.tex appears to be broken.
This may be due to the environment variable TEX set to something
other than (plain) tex, a corrupt texinfo.tex file, or
to tex itself simply not working."
      cat "$version_test_dir/txiversion.out"
      cat "$version_test_dir/txiversion.err" >&2
      error 1 "quitting."
    fi
    eval `$SED -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 
txiversion="\2\3\4"/p' "$version_test_dir/txiversion.out"`
    verbose "texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' 
..."
    if test "$txiprereq" -le "$txiversion" >&6 2>&1; then
      makeinfo=
    else
      makeinfo=${MAKEINFO:-makeinfo}
    fi
    # If TeX is preloaded, offer the user this convenience:
    if test "$txiformat" = Texinfo; then
      escape=@
    fi
  fi

  if test -n "$makeinfo"; then
    # in_src: the file with macros expanded.
    # Use the same basename to generate the same aux file names.
    work_src=$workdir/src
    ensure_dir "$work_src"
    in_src=$work_src/$in_base
    run_mi_includes=`list_prefix includes -I`
    verbose "Macro-expanding $command_line_filename to $in_src ..."
    # eval $makeinfo because it might be defined as something complex
    # (running missing) and then we end up with things like '"-I"',
    # and "-I" (including the quotes) is not an option name.  This
    # happens with gettext 0.14.5, at least.
    $SED "$comment_iftex" "$command_line_filename" \
      | eval $makeinfo --footnote-style=end -I "$in_dir" $run_mi_includes \
        -o /dev/null --macro-expand=- \
      | $SED "$uncomment_iftex" >"$in_src"
    # Continue only if everything succeeded.
    if test $? -ne 0 \
       || test ! -r "$in_src"; then
      verbose "Expansion failed, ignored...";
    else
      in_input=$in_src
    fi
  fi
}

# insert_commands - Insert $textra commands after @setfilename (Texinfo)
# or at the beginning of the file (LaTeX).  Recommended to be used for
# @finalout, @smallbook, etc.
insert_commands ()
{
  if test -n "$textra"; then
    # _xtr.  The file with the user's extra commands.
    work_xtr=$workdir/xtr
    in_xtr=$work_xtr/$in_base
    ensure_dir "$work_xtr"
    verbose "Inserting extra commands: $textra"
    case $in_lang in
      latex)   textra_cmd=1i;;
      texinfo) textra_cmd='/address@hidden/a';;
      *)       error 1 "internal error, unknown language: $in_lang";;
    esac
    $SED "$textra_cmd\\
$textra" "$in_input" >"$in_xtr"
    in_input=$in_xtr
  fi

  case $in_lang:$latex2html:`out_lang_tex` in
    latex:tex4ht:html)
      # _tex4ht.  The file with the added \usepackage{tex4ht}.
      work_tex4ht=$workdir/tex4ht
      in_tex4ht=$work_tex4ht/$in_base
      ensure_dir "$work_tex4ht"
      verbose "Inserting \\usepackage{tex4ht}"
      perl -pe 's<\\documentclass(?:\[.*\])?{.*}>
                 <$&\\usepackage[xhtml]{tex4ht}>' \
        "$in_input" >"$in_tex4ht"
      in_input=$in_tex4ht
      ;;
  esac
}


# compute_language FILENAME - Return the short string for the language
# in which FILENAME is written: `texinfo' or `latex'.
compute_language ()
{
  # If the user explicitly specified the language, use that.
  # Otherwise, if the first line is \input texinfo, assume it's texinfo.
  # Otherwise, guess from the file extension.
  if test -n "$set_language"; then
    echo $set_language
  elif $SED 1q "$1" | grep 'input texinfo' >&6; then
    echo texinfo
  else
    # Get the type of the file (latex or texinfo) from the given language
    # we just guessed, or from the file extension if not set yet.
    case $1 in
      *.ltx | *.tex | *.drv | *.dtx) echo latex;;
      *)                             echo texinfo;;
    esac
  fi
}


# run_hevea (MODE) - Convert to HTML/INFO/TEXT.
#
# Don't pass `-noiso' to hevea: it's useless in HTML since anyway the
# charset is set to latin1, and troublesome in other modes since
# accented characters loose their accents.
#
# Don't pass `-o DEST' to hevea because in that case it leaves all its
# auxiliary files there too...  Too bad, because it means we will need
# to handle images some day.
run_hevea ()
{
  run_hevea_name="${HEVEA:-hevea}"
  run_hevea_cmd="$run_hevea_name"

  case $1 in
    html) ;;
    text|info) run_hevea_cmd="$run_hevea_cmd -$1";;
    *) error 1 "run_hevea_cmd: invalid argument: $1";;
  esac

  # Compiling to the tmp directory enables to preserve a previous
  # successful compilation.
  run_hevea_cmd="$run_hevea_cmd -fix -O -o '$out_base'"
  run_hevea_cmd="$run_hevea_cmd `list_prefix includes -I` -I '$orig_pwd' "
  run_hevea_cmd="$run_hevea_cmd '$in_input'"

  if $debug; then
    run_hevea_cmd="$run_hevea_cmd -v -v"
  fi

  verbose "running $run_hevea_cmd"
  if eval "$run_hevea_cmd" >&5; then
    # hevea leaves trailing white spaces, this is annoying.
    case $1 in text|info)
      perl -pi -e 's/[ \t]+$//g' "$out_base"*;;
    esac
    case $1 in
    html|text) move_to_dest "$out_base";;
    info) # There can be foo.info-1, foo.info-2 etc.
               move_to_dest "$out_base"*;;
    esac
  else
    error 1 "$run_hevea_name exited with bad status, quitting."
  fi
}


# run_core_conversion - Run TeX (or HeVeA).
run_core_conversion ()
{
  case $in_lang:$latex2html:`out_lang_tex` in
    *:dvi|*:pdf|latex:tex4ht:html)
        run_tex;;
    latex:*:html|latex:*:text|latex:*:info)
        run_hevea $out_lang;;
    *)
        error 1 "invalid input/output combination: $in_lang/$out_lang";;
  esac
}


# compile - Run the full compilation chain, from pre-processing to
# installation of the output at its expected location.
compile ()
{
  # Source file might include additional sources.
  # We want `.:$orig_pwd' before anything else.  (We'll add `.:' later
  # after all other directories have been turned into absolute paths.)
  # `.' goes first to ensure that any old .aux, .cps,
  # etc. files in ${directory} don't get used in preference to fresher
  # files in `.'.  Include orig_pwd in case we are in clean build mode, where
  # we have cd'd to a temp directory.
  common="$orig_pwd$path_sep$in_dir$path_sep"
  #
  # If we have any includes, put those at the end.
  # Keep a final path_sep to get the default (system) TeX directories included.
  txincludes=`list_infix includes $path_sep`
  test -n "$txincludes" && common="$common$txincludes$path_sep"
  #
  for var in $tex_envvars; do
    eval val="\$common\$${var}_orig"
    # Convert relative paths to absolute paths, so we can run in another
    # directory (e.g., in clean build mode, or during the macro-support
    # detection). ".:" is added here.
    val=`absolute_filenames "$val"`
    eval $var="\"$val\""
    export $var
    eval verbose \"$var=\'\$${var}\'\"
  done

  # --expand
  run_makeinfo

  # --command, --texinfo
  insert_commands

  # Run until a fix point is reached.
  run_tex_suite
}

# Make some test about supported method by tex for getting generated
# files.
# +----------+------------+----------+
# |tested    |$1          |$2        |
# |method    |            |          |
# +----------+------------+----------+
# |          |" -recorder"|fls       |
# |          |            |          |
# +----------+------------+----------+
# |          |""          |log       |
# +----------+------------+----------+
make_openout_test ()
{
  ensure_dir $workdir/check_recorder
  save_cur_dir=`pwd`
  cd $workdir/check_recorder
  test -f openout.tex || cat > openout.tex <<EOF
\newwrite\ourwrite
\immediate\openout\ourwrite dum.dum
\bye
EOF
  recorder_option_maybe="$1"
  save_catcode_special=$catcode_special
  catcode_special=false
  make_tex_cmd
  catcode_special=$save_catcode_special
  tex_cmd="$tex_cmd openout.tex"
  verbose "$0: running $tex_cmd ..."
  rm -fr "openout.$2"
  eval "$tex_cmd" > /dev/null 2>&1
}

# Check whether TeX supports -recorder option
check_recorder_support ()
{
  verbose "Checking TeX recorder support..."
  make_openout_test " -recorder" fls
  if test -f openout.fls && grep '^OUTPUT dum.dum$' openout.fls > /dev/null; 
then
    cd $save_cur_dir
    verbose "Checking TeX recorder support... yes"
    return 0
  else
    cd $save_cur_dir
    verbose "Checking TeX recorder support... no"
    return 1
  fi
}

# Check whether TeX supports \openout traces in log
check_openout_in_log_support ()
{
  verbose "Checking TeX \openout in log support..."
  make_openout_test "" log
  if test -f openout.log && grep '^\\openout0= *`?dum.dum'"'? *$" openout.log; 
then
    cd $save_cur_dir
    verbose "Checking TeX \openout in log support... yes"
    return 0
  else
    cd $save_cur_dir
    verbose "Checking TeX \openout in log support... no"
    return 1
  fi
}

# set that output auxiliary files are detected with the -recorder option
set_xref_detection_from_fls ()
{
  recorder_option_maybe=" -recorder"
  generated_files_raw_get=generated_files_raw_get_from_fls
}

# set that output auxiliary files are detected with greping for \openout in the 
log file
set_xref_detection_from_log ()
{
  recorder_option_maybe=''
  generated_files_raw_get=generated_files_raw_get_from_log
}

# Decide whether output auxiliary files are detected with -recorder option, or
# with greping for \openout in the log file.
resolve_use_recorder ()
{
  # Select output file detection method
  test -n "$TEXI2DVI_USE_RECORDER" || TEXI2DVI_USE_RECORDER=yesmaybe

  case $TEXI2DVI_USE_RECORDER in

    yes) set_xref_detection_from_fls;;

    no) set_xref_detection_from_log;;

    yesmaybe)
      if check_recorder_support; then
        set_xref_detection_from_fls
      elif check_openout_in_log_support; then
        set_xref_detection_from_log
      else
        error 1 "TeX does not support -recorder, neither does it output openout 
in log"
      fi
      ;;

    nomaybe)
      if check_openout_in_log_support; then
        set_xref_detection_from_log
      elif check_recorder_support; then
        set_xref_detection_from_fls
      else
        error 1 "TeX does not support -recorder, neither does it output openout 
in log"
      fi
      ;;

    *) error 1 "Invalid value of TEXI2DVI_USE_RECORDER environment variable : 
$TEXI2DVI_USE_RECORDER.";;
  esac
}

# remove FILE...
remove ()
{
  verbose "Removing" "$@"
  rm -rf "$@"
}


# mostly_clean - Remove auxiliary files and directories.  Changes back
# the original directory.
mostly_clean ()
{
  cd_orig
  set X "$t2ddir"
  shift
  $tidy || {
    mc_log="$work_build/$in_noext.log"
    set X ${1+"$@"} "$mc_log" `generated_files_get "$work_build/$in_noext"`
    shift
  }
  remove ${1+"$@"}
}


# cleanup - Remove what should be removed according to options.
# Called at the end of each compilation cycle, and at the end of
# the script.  Changes the current directory.
cleanup ()
{
  case $build_mode in
    local) cd_orig; remove "$t2ddir";;
    clean) mostly_clean;;
    tidy)  ;;
  esac
}


#  input_file_name_decode - Decode COMMAND_LINE_FILENAME, and compute:
# - COMMAND_LINE_FILENAME clean of TeX commands
# - IN_DIR
#   The directory to the input file, possibly absolute if needed.
# - IN_DIR_ABS
#   The absolute directory of the input file.
# - IN_BASE
#   The input file base name (no directory part).
# - IN_NOEXT
#   The input file name without extensions (nor directory part).
# - IN_INPUT
#   Defaults to COMMAND_LINE_FILENAME, but might change if the
#   input is preprocessed.  With directory, possibly absolute.
input_file_name_decode ()
{
  # See if we are run from within AUC-Tex, in which case we are
  # passed `\input{FOO.tex}' or even `\nonstopmode\input{FOO.tex}'.
  case $command_line_filename in
    *\\nonstopmode*)
      batch=true;;
  esac
  case $command_line_filename in
    *\\input{*}*)
      # Let AUC-TeX error parser deal with line numbers.
      line_error=false
      command_line_filename=`\
        expr X"$command_line_filename" : X'.*input{\([^}]*\)}'`
      ;;
  esac

  # If the COMMAND_LINE_FILENAME is not absolute (e.g., --debug.tex),
  # prepend `./' in order to avoid that the tools take it as an option.
  echo "$command_line_filename" | LC_ALL=C $EGREP '^(/|[A-Za-z]:/)' >&6 \
  || command_line_filename="./$command_line_filename"

  # See if the file exists.  If it doesn't we're in trouble since, even
  # though the user may be able to reenter a valid filename at the tex
  # prompt (assuming they're attending the terminal), this script won't
  # be able to find the right xref files and so forth.
  test -r "$command_line_filename" \
  || error 1 "cannot read $command_line_filename, skipping."

  # Get the name of the current directory.
  in_dir=`func_dirname "$command_line_filename"`
  in_dir_abs=`absolute "$in_dir"`
  # In a clean build, we `cd', so get an absolute file name.
  if $tidy; then
    in_dir=$in_dir_abs
  fi

  # Strip directory part but leave extension.
  in_base=`basename "$command_line_filename"`
  # Strip extension.
  in_noext=`noext "$in_base"`

  # The normalized file name to compile.  Must always point to the
  # file to actually compile (in case of recoding, macro-expansion etc.).
  in_input=$in_dir/$in_base


  # Compute the output file name.
  if test x"$oname" != x; then
    out_name=$oname
  else
    out_name=$in_noext.`out_lang_ext`
  fi
  out_dir=`func_dirname "$out_name"`
  out_dir_abs=`absolute "$out_dir"`
  out_base=`basename "$out_name"`
  out_noext=`noext "$out_base"`
}


#  Main program starts - initialize more variables.
#
# Save TEXINPUTS so we can construct a new TEXINPUTS path for each file.
# Likewise for bibtex and makeindex.
tex_envvars="BIBINPUTS BSTINPUTS DVIPSHEADERS INDEXSTYLE MFINPUTS MPINPUTS \
TEXINPUTS TFMFONTS"
for var in $tex_envvars; do
  eval ${var}_orig=\$$var
  export $var
done

# Unfortunately, makeinfo --iftex --no-ifinfo doesn't work well enough
# in versions before 5.0, as makeinfo can't parse the TeX commands
# inside @tex blocks, so work around with sed.
#
# This sed script preprocesses Texinfo sources in order to keep the
# iftex sections only.  We want to remove non-TeX sections, and comment
# (with address@hidden _texi2dvi') TeX sections so that makeinfo does not try to
# parse them.  Nevertheless, while commenting TeX sections, don't
# comment @macro/@end macro so that makeinfo does propagate them.
# Similarly, preserve the @top node to avoid makeinfo complaining about
# it being missed.  Comment it out after preprocessing, so that it does
# not appear in the generated document.
#
# We assume that address@hidden _texi2dvi' or address@hidden (_texi2dvi)' 
starting a line is
# not present in the document.  Additionally, conditionally defined
# macros inside the @top node may end up with the wrong value, although
# this is unlikely in practice.
#
comment_iftex=\
'/address@hidden/,/address@hidden tex/{
  s/^/@c _texi2dvi/
}
/address@hidden/,/address@hidden iftex/{
  s/^/@c _texi2dvi/
  /address@hidden address@hidden/,/address@hidden address@hidden macro/{
    s/address@hidden _texi2dvi//
  }
}
/address@hidden/,/address@hidden ifnottex/{
  s/^/@c (_texi2dvi)/
  /address@hidden (_texi2dvi)@node Top/,/address@hidden (_texi2dvi)@end 
ifnottex/ {
    /address@hidden (_texi2dvi)@end ifnottex/b
    s/address@hidden (_texi2dvi)//
  }
}
/address@hidden/,/address@hidden ifinfo/{
  /address@hidden/p
  /address@hidden/,/address@hidden menu/p
  t
  s/^/@c (_texi2dvi)/
}
s/address@hidden/@c address@hidden/
s/address@hidden ifnotinfo/@c address@hidden ifnotinfo/'

# Uncomment @iftex blocks by removing any leading address@hidden texi2dvi' 
(repeated
# copies can sneak in via macro invocations).  Likewise, comment out
# the @top node inside a @ifnottex block.
uncomment_iftex=\
's/address@hidden _texi2dvi\(@c _texi2dvi\)*//
/address@hidden (_texi2dvi)@ifnottex/,/address@hidden (_texi2dvi)@end ifnottex/{
  s/^/@c (_texi2dvi)/
}'

#  Main program continues - command line parsing.
#
# Push a token among the arguments that will be used to notice when we
# ended options/arguments parsing.
# Use "set dummy ...; shift" rather than 'set - ..." because on
# Solaris set - turns off set -x (but keeps set -e).
# Use ${1+"$@"} rather than "$@" because Digital Unix and Ultrix 4.3
# still expand "$@" to a single argument (the empty string) rather
# than nothing at all.
arg_sep="$$--$$"
set dummy ${1+"$@"} "$arg_sep"; shift

while test x"$1" != x"$arg_sep"; do
  # Handle --option=value by splitting apart and putting back on argv.
  case "$1" in
    --*=*)
      opt=`echo "$1" | $SED -e 's/=.*//'`
      val=`echo "$1" | $SED -e 's/[^=]*=//'`
      shift
      set dummy "$opt" "$val" ${1+"$@"}; shift
      ;;
  esac

  case "$1" in
    -@ ) escape=@;;
    -~ ) catcode_special=false;;
    # Silently and without documentation accept -b and --b[atch] as synonyms.
    -b | --batch) batch=true;;
         --build)      shift; build_mode=$1;;
         --build-dir)  shift; build_dir=$1; build_mode=tidy;;
    -c | --clean) build_mode=clean;;
    -D | --debug) debug=true;;
    -e | -E | --expand) expand=true;;
    -h | --help) usage;;
    -I)   shift; list_concat_dirs includes "$1";;
    -l | --lang | --language) shift; set_language=$1;;
    --mostly-clean) action=mostly-clean;;
    --no-line-error) line_error=false;;
    --max-iterations) shift; max_iters=$1;;
    -o | --out  | --output)
      shift
      # Make it absolute, just in case we also have --clean, or whatever.
      oname=`absolute "$1"`;;

    # Output formats.
    -O|--output-format) shift; out_lang_set "$1";;
       --dvi|--dvipdf|--html|--info|--pdf|--ps|--text)
       out_lang_set `echo "x$1" | $SED 's/^x--//'`;;

    -p) out_lang_set pdf;;
    -q | -s | --quiet | --silent) quiet=true; batch=true;;
    --src-specials) src_specials=--src-specials;;
    --shell-escape) shell_escape=--shell-escape;;
    --tex4ht) latex2html=tex4ht;;
    -t | --texinfo | --command ) shift; textra="$textra\\
"`echo "$1" | $SED 's/\\\\/\\\\\\\\/g'`;;
    --translate-file ) shift; translate_file="$1";;
    --tidy) build_mode=tidy;;
    -u | --use-recorder) shift; TEXI2DVI_USE_RECORDER="$1";;
    -v | --vers*) version;;
    -V | --verb*) verb=true;;
    --) # What remains are not options.
      shift
      while test x"$1" != x"$arg_sep"; do
        set dummy ${1+"$@"} "$1"; shift
        shift
      done
      break;;
    -*)
      error 1 "Unknown or ambiguous option \`$1'." \
              "Try \`--help' for more information."
      ;;
    *) set dummy ${1+"$@"} "$1"; shift;;
   esac
   shift
done
# Pop the token
shift

# $tidy:  compile in a t2d directory.
# $clean: remove all the aux files.
case $build_mode in
  local) clean=false; tidy=false;;
  tidy)  clean=false; tidy=true;;
  clean) clean=true;  tidy=true;;
      *) error 1 "invalid build mode: $build_mode";;
esac

# Interpret remaining command line args as filenames.
case $# in
 0)
  error 2 "Missing file arguments." "Try \`--help' for more information."
  ;;
 1) ;;
 *)
  if test -n "$oname"; then
    error 2 "Can't use option \`--output' with more than one argument."
  fi
  ;;
esac


# We can't do much without tex.
# End up with the TEX and PDFTEX variables set to what we are going to use.
#
# If $TEX is set to a directory, don't use it.
test -n "$TEX" && test -d "$TEX" && unset TEX

# But otherwise, use $TEX if it is set.
if test -z "$TEX"; then
  if findprog tex; then :; else cat <<EOM >&2
You don't have a working TeX binary (tex) installed anywhere in
your PATH, and texi2dvi cannot proceed without one.  If you want to use
this script, you'll need to install TeX (if you don't have it) or change
your PATH or TEX environment variable (if you do).  See the --help
output for more details.

For information about obtaining TeX, please see http://tug.org/texlive,
or do a web search for TeX and your operating system or distro.
EOM
    exit 1
  fi

  # We want to use etex (or pdftex) if they are available, and the user
  # didn't explicitly specify.  We don't check for elatex and pdfelatex
  # because (as of 2003), the LaTeX team has asked that new distributions
  # use etex by default anyway.
  #
  if findprog etex; then TEX=etex; else TEX=tex; fi
fi

# For many years, the pdftex binary has included the e-tex extensions,
# but for those people with ancient TeX distributions ...
if test -z "$PDFTEX"; then
  if findprog pdfetex; then PDFTEX=pdfetex; else PDFTEX=pdftex; fi
fi


# File descriptor usage:
# 0 standard input
# 1 standard output (--verbose messages)
# 2 standard error
# 3 some systems may open it to /dev/tty
# 4 used on the Kubota Titan
# 5 tools output (turned off by --quiet)
# 6 tracing/debugging (set -x output, etc.)

# Main tools' output (TeX, etc.) that TeX users are used to seeing.
#
# If quiet, discard, else redirect to the message flow.
if $quiet; then
  exec 5>/dev/null
else
  exec 5>&1
fi


# Enable tracing, and auxiliary tools output.
#
# This fd should be used where you'd typically use /dev/null to throw
# output away.  But sometimes it is convenient to see that output (e.g.,
# from a grep) to aid debugging.  Especially debugging at distance, via
# the user.
#
if $debug; then
  exec 6>&1
  set -vx
else
  exec 6>/dev/null
fi


#  Main program main loop - TeXify each file in turn.
for command_line_filename
do
  verbose "Processing $command_line_filename ..."

  input_file_name_decode

  # `texinfo' or `latex'?
  in_lang=`compute_language "$command_line_filename"`

  # An auxiliary directory used for all the auxiliary tasks involved
  # in compiling this document.
  case $build_dir in
      '' | . ) t2ddir=$out_noext.t2d ;;
      *) # Avoid collisions between multiple occurrences of the same
         # file, so depend on the output path.  Remove leading `./',
         # at least to avoid creating a file starting with `.!', i.e.,
         # an invisible file. The sed expression is fragile if the cwd
         # has active characters.  Transform / into ! so that we don't
         # need `mkdir -p'.  It might be something to reconsider.
         t2ddir=$build_dir/`echo "$out_dir_abs/$out_noext.t2d" |
             $SED "s,^$orig_pwd/,,;s,^\./,,;s,/,!,g"`
  esac
  # Remove it at exit if clean mode.
  trap "cleanup" 0 1 2 15

  ensure_dir "$build_dir" "$t2ddir"

  # We will change directory, better work with an absolute path...
  t2ddir=`absolute "$t2ddir"`
  # Sometimes there are incompatibilities between auxiliary files for
  # DVI and PDF.  The contents can also change whether we work on PDF
  # and/or DVI.  So keep separate spaces for each.
  workdir=$t2ddir/`out_lang_tex`
  ensure_dir "$workdir"

  # _build.  In a tidy build, where the auxiliary files are output.
  if $tidy; then
    work_build=$workdir/build
  else
    work_build=.
  fi

  # _bak.  Copies of the previous auxiliary files (another round is
  # run if they differ from the new ones).
  work_bak=$workdir/bak

  # Make those directories.
  ensure_dir "$work_build" "$work_bak"

  # Decide whether output auxiliary files are detected with -recorder option, or
  # with greping for \openout in the log file.
  resolve_use_recorder

  case $action in
    compile)
      # Compile the document.
      compile
      cleanup
      ;;

    mostly-clean)
      mostly_clean
      ;;
  esac
done

verbose "done."
exit 0 # exit successfully, not however we ended the loop.
# Local Variables:
# sh-basic-offset: 2
# sh-indentation: 2
# End:

reply via email to

[Prev in Thread] Current Thread [Next in Thread]