Import of stripped down GNU texinfo 4.6
This commit is contained in:
parent
13885d9a55
commit
c332585b53
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor/texinfo/dist/; revision=116525
@ -1,12 +1,26 @@
|
||||
$Id: AUTHORS,v 1.4 2002/10/09 22:23:44 karl Exp $
|
||||
$Id: AUTHORS,v 1.5 2003/05/08 00:51:55 karl Exp $
|
||||
Texinfo authors.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved.
|
||||
|
||||
Richard Stallman, Brian Fox, Bob Chassell, Noah Friedman, Paul Rubin,
|
||||
Karl Berry, Eli Zaretskii, Philippe Martin, and many others.
|
||||
Akim Demaille texi2dvi.
|
||||
Andreas Schwab texinfo.tex, configure.ac, most makeinfo files.
|
||||
Bob Chassell texinfo.tex, original texinfo.txi.
|
||||
Brian Fox all makeinfo/* and info/* files, info-stnd.texi.
|
||||
Dave Love original makeinfo/html.[ch].
|
||||
Eli Zaretskii all files.
|
||||
Karl Berry all files.
|
||||
Noah Friedman original texi2dvi.
|
||||
Paul Rubin original makeinfo/multi.c.
|
||||
Philippe Martin original makeinfo xml/docbook output.
|
||||
Richard Stallman original texinfo.tex, install-info.c,
|
||||
texindex.c, texinfo.txi.
|
||||
Zack Weinberg texinfo.tex (@macro implementation).
|
||||
|
||||
Please see http://www.iro.umontreal.ca/contrib/po/HTML/team-LL.html for
|
||||
the translation teams for a given language LL.
|
||||
See http://www.iro.umontreal.ca/contrib/po/HTML/team-LL.html for the
|
||||
translation teams for a given language LL.
|
||||
|
||||
Many files included in Texinfo distribution are copied from other
|
||||
locations. See util/srclist*.
|
||||
|
@ -1,11 +1,340 @@
|
||||
The files in here are all Copyright (C) Free Software Foundation, and
|
||||
are under three different licenses:
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
* GPL - (text in doc/COPYING)
|
||||
* LGPL - (text in doc/COPYING.LIB)
|
||||
* FDL - (text in doc/COPYING.DOC and doc/fdl.texi)
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
The source files are grouped by license into their respective
|
||||
directories. All documents in doc/ contain the relevant licensing
|
||||
information.
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
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 2 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, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
||||
|
@ -1,3 +1,553 @@
|
||||
2003-06-10 <karl@gnu.org>
|
||||
|
||||
* version 4.6.
|
||||
|
||||
2003-06-04 <karl@gnu.org>
|
||||
|
||||
* config.sub: update from gnulib.
|
||||
|
||||
2003-06-03 <karl@gnu.org>
|
||||
|
||||
* mkinstalldirs: update from gnulib.
|
||||
|
||||
2003-06-02 Akim Demaille <akim@epita.fr>
|
||||
|
||||
* util/texi2dvi (tex_envvars): New.
|
||||
Use it to forward -I directories to BIBINPUTS and BSTINPUTS, in
|
||||
addition of INDEXSTYLE and TEXINPUTS.
|
||||
|
||||
2003-06-02 <karl@gnu.org>
|
||||
|
||||
* makeinfo/html.c (html_output_head): don't output the <link>, to
|
||||
avoid having mozilla put up a document navigation bar when
|
||||
we don't have anything else to support it yet. Report from:
|
||||
Per Bothner.
|
||||
* makeinfo/makeinfo.c: no need to declare add_link or
|
||||
add_escaped_anchor_name, since they are not used.
|
||||
|
||||
* doc/texinfo.txi (Contents): recommend @contents at the beginning
|
||||
more strongly. Suggestions from Kevin Ryde.
|
||||
|
||||
2003-06-01 <karl@gnu.org>
|
||||
|
||||
* makeinfo/macro.c (apply): make \\ expand to \ even if the macro
|
||||
has no arguments. Report from: Jesper Harder <harder@ifa.au.dk>,
|
||||
31 May 2003 02:56:20 +0200.
|
||||
|
||||
2003-05-31 <karl@gnu.org>
|
||||
|
||||
* util/dir-example (C++ libraries): new category, suggested by Bruno.
|
||||
|
||||
2003-05-29 <karl@gnu.org>
|
||||
|
||||
* configure.ac: pretest version 4.5.93.
|
||||
|
||||
2003-05-29 gettextize <bug-gnu-gettext@gnu.org>
|
||||
|
||||
* configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.12.1.
|
||||
|
||||
2003-05-26 <karl@gnu.org>
|
||||
|
||||
* util/texi2dvi: spurious \ in tex_args assignment.
|
||||
|
||||
* doc/texinfo.txi (Contents): trim excess words.
|
||||
|
||||
2003-05-25 <karl@gnu.org>
|
||||
|
||||
* util/texi2dvi: extra quotes for the tex_args assignment in
|
||||
--batch mode.
|
||||
|
||||
2003-05-19 <karl@gnu.org>
|
||||
|
||||
* lib/xexit.c: translate fflush error messages, add newlines
|
||||
(report from Jim Meyering).
|
||||
* util/{texindex.c,install-info.c},
|
||||
* makeinfo/makeinfo.c,
|
||||
* info/info.c: use xexit again, with redundant return to avoid
|
||||
warnings.
|
||||
|
||||
2003-05-18 <karl@gnu.org>
|
||||
|
||||
* lib/xexit.c (xexit): fputs not fprintf, so we get newline;
|
||||
translate the messages, too. Report from Jim Meyering.
|
||||
|
||||
* util/dir-example: move gcc/automake entries.
|
||||
|
||||
* pretest version 4.5.92.
|
||||
|
||||
* update to automake 1.7.5.
|
||||
|
||||
* makeinfo/html.c (append_char): forgot to increment length, duh.
|
||||
Report from: "Torsten Bronger" <bronger@physik.rwth-aachen.de>,
|
||||
18 May 2003 14:36:23 +0200.
|
||||
|
||||
2003-05-17 <karl@gnu.org>
|
||||
|
||||
* makeinfo/makeinfo.c (defining_copying): new fn.
|
||||
(add_char): call it, when testing if we should
|
||||
call html_output_head.
|
||||
Report from: Torsten Bronger <bronger@physik.rwth-aachen.de>,
|
||||
17 May 2003 22:10:42 +0200.
|
||||
|
||||
* configure.ac: pretest version 4.5.91.
|
||||
|
||||
2003-05-16 <karl@gnu.org>
|
||||
|
||||
* makeinfo/index.c (sort_index): don't deref NULL. Report from Jan.
|
||||
|
||||
2003-05-13 <karl@gnu.org>
|
||||
|
||||
* makeinfo/html.c (append_char): appease sgi compiler.
|
||||
* makeinfo/html.c (insert_html_tag): remove spurious arg to pop_tag,
|
||||
From: ezra peisach <epeisach@med-xtal.bu.edu>, 13
|
||||
May 2003 12:13:40 -0400.
|
||||
|
||||
Fix a few GCC warnings, reported by Jim Meyering:
|
||||
|
||||
* info/nodes.c: parenthesize assignment used as truth value.
|
||||
* info/nodemenu.c (format_node_info): strcpy instead of sprintf,
|
||||
since there's no format.
|
||||
* makeinfo/makeinfo.c (isolate_nodename): remove spurious decl.
|
||||
* makeinfo/xml.c (xml_insert_indexterm): declare as void.
|
||||
* info/key.c: initialize with 0,0 at end.
|
||||
* info/infokey.c (main): return instead of xexit, and remove
|
||||
unused variable.
|
||||
* makeinfo/html.c (init_buffer): forgot to return buf.
|
||||
* info/info.c (remember_info_program_name): remove spurious
|
||||
declaration.
|
||||
|
||||
* makeinfo/sectioning.c,
|
||||
* info/infomap.c: remove unused variables.
|
||||
|
||||
* makeinfo/makeinfo.c (insert_toplevel_subdirectory),
|
||||
* info/man.c,
|
||||
* info/infodoc.c (info_find_or_create_help_window): parenthesize
|
||||
&& within ||.
|
||||
* info/display.c (display_update_one_window): initialize rep to
|
||||
NULL, parenthesize && within ||.
|
||||
|
||||
* util/install-info.c,
|
||||
* info/info.c (main),
|
||||
* info/makedoc.c (main): return instead of xexit.
|
||||
|
||||
2003-05-13 Akim Demaille <akim@epita.fr>
|
||||
|
||||
* util/texi2dvi (get_xref_files): Pass --file-line-error-style
|
||||
to TeX when supported.
|
||||
|
||||
2003-05-12 <karl@gnu.org>
|
||||
|
||||
* configure.ac: pretest version 4.5.90.
|
||||
|
||||
* Makefile.am (EXTRA_DIST): add onceonly.m4.
|
||||
|
||||
* makeinfo/tests/accentenc: must discard stderr since we expect
|
||||
two errors in this case.
|
||||
|
||||
* makeinfo/makeinfo.c (main): new option --css-include.
|
||||
(usage): add to --help message.
|
||||
* makeinfo/makeinfo.h (css_include): new global.
|
||||
* makeinfo/html.c (append_char, process_css_file): new fns
|
||||
implementing it.
|
||||
(html_output_head): call it.
|
||||
* doc/texinfo.txi (HTML CSS): new node describing it.
|
||||
Also split up the Generating HTML node into subnodes.
|
||||
|
||||
* config.{guess,sub}: update from gnulib.
|
||||
|
||||
2003-05-10 <karl@gnu.org>
|
||||
|
||||
* makeinfo/index.c (sort_index): allocate the sorted index in new
|
||||
memory, and set the original index to that, to avoid problems with
|
||||
@printindex being called twice on the same index.
|
||||
(cm_printindex): do not free the returned index.
|
||||
Report from: Dumas Patrice <dumas@centre-cired.fr>, 9 May 2003
|
||||
15:12:21 +0200.
|
||||
|
||||
2003-05-09 <karl@gnu.org>
|
||||
|
||||
* makeinfo/defun.c (cm_defun): issue error message without extra
|
||||
x's. Report from: Dumas Patrice <dumas@centre-cired.fr>, 9 May
|
||||
2003 17:24:25 +0200.
|
||||
|
||||
2003-05-07 Akim Demaille <akim@epita.fr>
|
||||
|
||||
* util/texi2dvi (textra_cmd): New.
|
||||
(textra): Escape escapes from sed's evaluation.
|
||||
Use them to support additional TeX/LaTeX commands.
|
||||
Support --command as a synonym for --texinfo.
|
||||
|
||||
2003-05-06 <karl@gnu.org>
|
||||
|
||||
* util/dir-example: finish getting rid of GNU packages.
|
||||
|
||||
2003-05-04 <karl@gnu.org>
|
||||
|
||||
* doc/texinfo.tex (\itemizey): if no arg to @itemize, default to
|
||||
@bullet. Fix from: Stepan Kasal <kasal@math.cas.cz> 2 May 2003
|
||||
09:32:11 +0200, report from: Jesper Harder <harder@ifa.au.dk>.
|
||||
|
||||
2003-04-30 <karl@gnu.org>
|
||||
|
||||
* makeinfo/.gdbinit: no colon on local variables.
|
||||
|
||||
* doc/texinfo.txi (documentencoding): Document new Info output feature.
|
||||
makeinfo/lang.h (encoding_type): rename `ecname' member to `encname'.
|
||||
makeinfo/html.c, lang.c: change usage.
|
||||
makeinfo/lang.c (cm_documentencoding): fix typo in warning.
|
||||
makeinfo/makeinfo.h (SPLIT_SIZE_THRESHOLD): remove.
|
||||
(info_trailer): declare.
|
||||
makeinfo/makeinfo.c (info_trailer): new fn to generate Local
|
||||
Variables: section if --enable-encoding and
|
||||
@documentencoding are given.
|
||||
(convert_from_loaded_file): call it.
|
||||
* makeinfo/node.c (split_file): write trailer into each split
|
||||
file. Also, simply split files if file size is less than
|
||||
--split-size, removing SPLIT_SIZE_THRESHOLD.
|
||||
|
||||
* doc/texinfo.tex: remove trailing whitespace.
|
||||
|
||||
2003-04-29 <karl@gnu.org>
|
||||
|
||||
* makeinfo/node.c (cm_anchor): normalize_node_name so that an
|
||||
anchor named "TOP" or "top" or whatever is not allowed. Report
|
||||
from: Dumas Patrice <dumas@centre-cired.fr>, 29 Apr 2003 18:56:51
|
||||
+0200.
|
||||
|
||||
2003-04-28 <karl@gnu.org>
|
||||
|
||||
* makeinfo/makeinfo.c: whitespace cleanup.
|
||||
|
||||
* doc/texinfo.tex (\doprintindex): don't \kern-\parindent, it makes
|
||||
the first index entry stick out to the left.
|
||||
Report from: Jesper Harder <harder@ifa.au.dk>,
|
||||
28 Apr 2003 03:10:36 +0200.
|
||||
|
||||
From Akim Demaille <akim@epita.fr>:
|
||||
* makeinfo/makeinfo.c (cm_value): Warn for undefined flags.
|
||||
|
||||
2003-04-27 <karl@gnu.org>
|
||||
|
||||
* doc/texinfo.tex (\footnote, \smartitalicx): use \ptexslash
|
||||
for italic correction instead of \/, since we've redefined \/ now.
|
||||
Report from: Jesper Harder <harder@ifa.au.dk>, 27 Apr 2003
|
||||
23:30:29 +0200.
|
||||
|
||||
* util/dir-example (mailutils): more from Wojciech Polak.
|
||||
(autoconf): align/edit/sort entries.
|
||||
|
||||
2003-04-26 <karl@gnu.org>
|
||||
|
||||
* doc/texinfo.txi (Image Syntax): second and following @image args
|
||||
optional. Report from: Max Techter <mtechter@gmx.de>, 26 Apr 2003
|
||||
15:50:02 +0200.
|
||||
|
||||
* util/dir-example (anubis): request from Wojciech Polak.
|
||||
|
||||
2003-04-25 <karl@gnu.org>
|
||||
|
||||
* makeinfo/defun.c (defun_internal): whitespace needed in docbook
|
||||
output for deftype*. From: José Fonseca
|
||||
<j_r_fonseca@yahoo.co.uk>, 25 Apr 2003 13:07:13 +0100.
|
||||
|
||||
2003-04-21 <karl@gnu.org>
|
||||
|
||||
* doc/texinfo.tex (\dofirstparagraphindent): forgot to rename the
|
||||
\...word's.
|
||||
(\suppressfirstparagraphindent): forgot to rename
|
||||
to \dosuppress... Reported by Simon.
|
||||
|
||||
2003-04-20 <karl@gnu.org>
|
||||
|
||||
* Installed changes from Simon for suppressing indentation on the
|
||||
first paragraph after section headings, and for new @indent command:
|
||||
|
||||
2003-04-12 Simon Law <sfllaw@engmail.uwaterloo.ca>
|
||||
* doc/texinfo.tex (\firstparagraphindent): implement suppression
|
||||
of the indentation of the first paragraph.
|
||||
(\dofirstparagraphindent): for parsing arguments.
|
||||
(\suppressfirstparagraphindent): suppress, or don't suppress.
|
||||
(\dosuppressfirstparagraphindent): the actual gobbling of indentation.
|
||||
(\footnote): Compensate for the hanging-indent side-effect.
|
||||
(\numhead, \apphead, \unnmhead): call \dosuppress...
|
||||
* makeinfo/cmds.c (command_table): add "firstparagraphindent"
|
||||
(as cm_firstparagraphindent)
|
||||
(set_firstparagraphindent, cm_firstparagraphindent): implement
|
||||
@firstparagraphindent parsing of options.
|
||||
* makeinfo/makeinfo.h: declare "do_first_par_indent".
|
||||
* makeinfo/sectioning.c (sectioning_underscore): suppress
|
||||
indentation if requested.
|
||||
* doc/texinfo.txi: document it.
|
||||
|
||||
* doc/texinfo.tex (\indent): override \indent primitive to
|
||||
clear \everypar.
|
||||
(\ptexindent): for saving/restoring \indent in @tex.
|
||||
(\footnote): Neutralise the effect of @indent
|
||||
within a footnote.
|
||||
* makeinfo/cmds.c (command_table): add "indent" (as cm_indent).
|
||||
(cm_indent): un-inhibit_paragraph_indentation.
|
||||
* doc/texinfo.txi: document it.
|
||||
|
||||
* doc/texinfo.txi (Conventions): remove spurious extra vertical space
|
||||
from bulleted itemize which starts with a quote.
|
||||
|
||||
* makeinfo/cmds.c (command_table): fix @novalidate definition.
|
||||
|
||||
|
||||
* Installed changes from Jan for @image support in Info format:
|
||||
|
||||
2003-04-14 Jan Nieuwenhuizen <janneke@gnu.org>
|
||||
* info/display.c (display_update_one_window): Skip new style
|
||||
image tag/cookie.
|
||||
|
||||
2003-04-09 Jan Nieuwenhuizen <janneke@gnu.org>
|
||||
* makeinfo/makeinfo.c (cm_image): Write ^@^H[image ...^@^H] tag.
|
||||
|
||||
|
||||
* makeinfo/html.c (html_output_head): use <style> to get the
|
||||
regular roman font instead of typewriter for @format and @display;
|
||||
likewise to reduce the font size for @small*. Suggestion from:
|
||||
"Torsten Bronger" <bronger@physik.rwth-aachen.de>, 20 Apr 2003
|
||||
11:03:59 +0200.
|
||||
|
||||
2003-04-18 <karl@gnu.org>
|
||||
|
||||
* configure.ac (ncurses/termcap.h): move test to after termlib's
|
||||
definition, of course. Reported by Norton Allen
|
||||
<allen@huarp.harvard.edu>, 18 Apr 2003 13:31:35 -0400.
|
||||
|
||||
* configure.ac: remove comma from comment in AC_TRY_LINK program,
|
||||
to avoid spurious misinterpretation as an argument delimiter.
|
||||
|
||||
2003-04-08 <karl@gnu.org>
|
||||
|
||||
* makeinfo/makeinfo.c (usage): avoid double blank line.
|
||||
|
||||
2003-04-05 <karl@gnu.org>
|
||||
|
||||
* Makefile.am (all of them): use $(VAR) instead of @VAR@, since
|
||||
automake now emits definitions for all substituted variables.
|
||||
|
||||
* makeinfo/makeinfo.h (DEFAULT_SPLIT_SIZE): increase to 300,000.
|
||||
(SPLIT_SIZE_THRESHOLD): increase to 500,000.
|
||||
Implicit suggestion via Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>.
|
||||
|
||||
2003-04-04 <karl@gnu.org>
|
||||
|
||||
* util/texi2dvi (replace_empty): new variable to do the empty path
|
||||
element detection; don't hardwire path separator as :.
|
||||
|
||||
2003-04-02 <karl@gnu.org>
|
||||
|
||||
* doc/txi-pl.tex: new file, from polak@gnu.org.
|
||||
* doc/Makefile.am (TXI_XLATE): add it.
|
||||
|
||||
2003-04-01 <karl@gnu.org>
|
||||
|
||||
* makeinfo/makeinfo.c (main): correct wording of html/no-headers/split
|
||||
error message, and don't complain if output is to stdout.
|
||||
|
||||
* makeinfo/insertion.c (end_insertion): for @end menu html output,
|
||||
don't output </ul> if no_headers. Report from: Jesper
|
||||
Harder <harder@ifa.au.dk>, 01 Apr 2003 00:00:37 +0200.
|
||||
|
||||
* info/infomap.c (fetch_user_maps): don't complain if .info
|
||||
doesn't exist.
|
||||
|
||||
2003-03-31 <karl@gnu.org>
|
||||
|
||||
* makeinfo/lang.c (iso8859_2_map): new encoding map.
|
||||
(encoding_table): enable it.
|
||||
|
||||
* info/pcterm.c (pc_up_line): use MAX instead of max (no longer
|
||||
defined). Reported by Richard Dawes.
|
||||
|
||||
* doc/texinfo.txi (documentencoding): mention that all processors
|
||||
recognize the command.
|
||||
|
||||
2003-03-30 <karl@gnu.org>
|
||||
|
||||
* makeinfo/lang.c (cm_special_character): incorrectly added html
|
||||
sequences for @oe and @OE even in info output.
|
||||
|
||||
2003-03-25 <karl@gnu.org>
|
||||
|
||||
* util/srclist.txt (COPYING): get from gnulib/doc, not gnulib.
|
||||
|
||||
2003-03-24 <karl@gnu.org>
|
||||
|
||||
* TODO: need to write real definition of Info format.
|
||||
|
||||
* makeinfo/node.c (cm_node): use instead of ` ', to avoid
|
||||
line breaks.
|
||||
|
||||
2003-03-22 <karl@gnu.org>
|
||||
|
||||
* makeinfo/node.c (cm_node): output a space after the Node: and
|
||||
similar headers, since Bob wants one.
|
||||
|
||||
* info/pcterm.c (MIN,MAX): moved to system.h.
|
||||
* info/session.c (MIN): moved to system.h.
|
||||
* makeinfo/sectioning.c (MIN): move to system.h.
|
||||
* lib/system.h (MIN,MAX): define here.
|
||||
|
||||
* makeinfo/sectioning.c (sectioning_html): don't go smaller than <h3>.
|
||||
Reported by Bob.
|
||||
(MIN): new macro.
|
||||
|
||||
* info/session.c (MIN) [MIN]: #undef first if already #define'd.
|
||||
|
||||
* doc/texinfo.tex (\nodexxx): use a control sequence instead of
|
||||
brackets to parse the parts of @node. Otherwise node names with
|
||||
brackets cause spurious output. Reported by Bob.
|
||||
(\xrefprintnodename): separate this out from
|
||||
\xrefX, for easier redefining by Bob.
|
||||
|
||||
2003-03-18 <karl@gnu.org>
|
||||
|
||||
* makeinfo/insertion.c (cm_item): ensure we don't go off the end
|
||||
of the string when using strncmp. From: Peter N Lewis
|
||||
<peter@stairways.com.au>, 13 Mar 2003 16:08:27 +0800.
|
||||
|
||||
* doc/texinfo.txi (Raw Formatter Commands): mention using \gdef
|
||||
within @tex, not \def.
|
||||
|
||||
2003-03-12 <karl@gnu.org>
|
||||
|
||||
* doc/texinfo.txi (Preparing for TeX): mention extra colons.
|
||||
|
||||
2003-03-07 <karl@gnu.org>
|
||||
|
||||
* doc/texinfo.tex (\/): new command to allow a line break.
|
||||
(\ptexslash): for saving/restoring primitive \/ in @tex.
|
||||
* makeinfo/cmds.c (command_table): add "/" (as cm_no_op).
|
||||
* makeinfo/makeinfo.c (self_delimiting): add /.
|
||||
* doc/texinfo.txi (Line Breaks, Command Summary): document it.
|
||||
Suggestion from wl.
|
||||
|
||||
* doc/texinfo.tex (\hyphenation): time-stamp.
|
||||
|
||||
2003-03-06 <karl@gnu.org>
|
||||
|
||||
* info/session.c (nearest_xref): new fn.
|
||||
(info_menu_or_ref_item): call it when we are
|
||||
searching for xrefs, instead of just looking on
|
||||
the current line.
|
||||
* info/info-utils.c (info_copy_reference): new fn.
|
||||
* info/info-utils.h (info_copy_reference): declare.
|
||||
Bug report from: rich@phekda.freeserve.co.uk,
|
||||
04 Mar 2003 17:51:47 +0000.
|
||||
|
||||
* */.gdbinit: set env MALLOC_CHECK_.
|
||||
|
||||
2003-03-06 Ralph Schleicher <rs@nunatak.allgaeu.org>
|
||||
* makeinfo/files.h (get_file_info_in_path): Declare function.
|
||||
* makeinfo/files.c (get_file_info_in_path): Remove static keyword.
|
||||
* makeinfo/makeinfo.c (cm_image): Lookup image file name in the
|
||||
search path for include files.
|
||||
|
||||
2003-03-05 <karl@gnu.org>
|
||||
|
||||
* makeinfo/makeinfo.c (insert_toplevel_subdirectory): always make
|
||||
subdirectory for html. Before, if the current directory happened
|
||||
to be named `foo' and the @setfilename was foo.info, we would
|
||||
write the split html files into the current directory. Reported
|
||||
by rich@phekda.freeserve.co.uk, 01 Mar 2003 12:03:13 +0000.
|
||||
|
||||
* makeinfo/files.c (filename_part): simplify assignment.
|
||||
|
||||
2003-02-24 <karl@gnu.org>
|
||||
|
||||
* makeinfo/insertion.c (get_item_function): check for @item in
|
||||
argument to @itemize. Report from: Dumas Patrice
|
||||
<dumas@centre-cired.fr>, 24 Feb 2003 13:13:52 +0100.
|
||||
|
||||
* makeinfo/makeinfo.c (remember_brace): say `braces' instead of
|
||||
`{...}', since often we don't actually expect text inside the
|
||||
braces.
|
||||
|
||||
2003-02-21 <karl@gnu.org>
|
||||
|
||||
* aclocal.m4: automake 1.7.3.
|
||||
|
||||
2003-02-19 <karl@gnu.org>
|
||||
|
||||
* doc/info-stnd.texi: omit all node pointers.
|
||||
|
||||
2003-02-18 <karl@gnu.org>
|
||||
|
||||
* util/texindex.c (maketempname): use already-set `tempdir' instead
|
||||
of half-redoing the logic.
|
||||
(concat): only need two args, not three; change callers.
|
||||
(perror_with_name): really call perror, putting
|
||||
the name first a la gcc.
|
||||
(pfatal_with_name): call perror_with_name.
|
||||
|
||||
* util/texi2dvi (get_xref_files): a file whose first line is
|
||||
\input texinfo is not an index file. Report from: Anton Ertl
|
||||
<anton@a0.complang.tuwien.ac.at>, 18 Feb 2003 14:41:47 +0100.
|
||||
|
||||
2003-02-16 <karl@gnu.org>
|
||||
|
||||
* makeinfo/index.c (init_indices): don't try to free indexes that
|
||||
undefindex already freed. Report from: Arkadiusz
|
||||
Miskiewicz <misiek@pld.ORG.PL>,
|
||||
15 Feb 2003 13:22:49 +0100.
|
||||
|
||||
* configure.ac (curses): forgot to quote arg to AC_TRY_LINK.
|
||||
From vojta and te, 16 Feb 2003 01:37:09 +0100.
|
||||
|
||||
2003-02-13 <karl@gnu.org>
|
||||
|
||||
* makeinfo/insertion.c (begin_insertion): for html cartouche
|
||||
output, add class="cartouche". Suggestion from Stephen.
|
||||
|
||||
2003-02-11 <karl@gnu.org>
|
||||
|
||||
* Installed patch:
|
||||
2003-02-10 Peter Breitenlohner <peb@mppmu.mpg.de>
|
||||
* info/indices.c, info/info.c, info/info.h, info/nodemenu.c,
|
||||
info/session.c, info/window.c, makeinfo/defun.c, makeinfo/html.c,
|
||||
makeinfo/index.c, makeinfo/insertion.c, makeinfo/makeinfo.c,
|
||||
makeinfo/makeinfo.h, makeinfo/node.c: declare all constant
|
||||
strings as such in order to avoid lots of gcc warnings (for
|
||||
--disable-nls and maybe without that as well).
|
||||
|
||||
* doc/texinfo.tex (\registeredsymbol): new command for Arnold.
|
||||
|
||||
* util/dir-example: dc to basics.
|
||||
|
||||
* doc/texinfo.txi (Defining Macros): document new requirements on
|
||||
macro names. Report from: Alper Ersoy
|
||||
<dirt@gtk.org>, 11 Feb 2003 05:11:35 +0200.
|
||||
|
||||
2003-02-07 <karl@gnu.org>
|
||||
|
||||
* makeinfo/insertion.c (begin_insertion): output a table with a border
|
||||
for @cartouche.
|
||||
(end_insertion): end the table.
|
||||
From: Joshua N Pritikin <vishnu@pobox.com>,
|
||||
7 Feb 2003 21:59:49 +0530.
|
||||
|
||||
2003-02-05 <karl@gnu.org>
|
||||
|
||||
* info/info.c (short_options): add h.
|
||||
(main): treat -h same as --help.
|
||||
From: rwhron@earthlink.net, 31 Aug 2002 19:56:57 -0400.
|
||||
|
||||
* info/session.c (show_isearch_prompt): compute length of
|
||||
translated "Failing ", don't assume 20 is enough.
|
||||
(It's 21 bytes in UTF-8 Russian.)
|
||||
Report from: varg@thsun1.jinr.ru,
|
||||
25 Jul 2002 15:26:42 +0400.
|
||||
|
||||
* info/display.c (display_update_one_window): don't derefence null
|
||||
`entry' (if the screen is very small).
|
||||
From: Danny Yoo <dyoo@hkn.eecs.berkeley.edu>,
|
||||
8 Jul 2002 15:21:14 -0700.
|
||||
|
||||
* doc/.cvsignore: ignore *.info and texput.log.
|
||||
|
||||
2003-02-04 <karl@gnu.org>
|
||||
|
||||
* Version 4.5 (that info bug was a killer).
|
||||
@ -113,7 +663,7 @@
|
||||
(info_signal_proc): reread window size in case it has changed
|
||||
while we were suspended.
|
||||
|
||||
Mon Jan 27 08:09:07 CET 2003 Stepan Kasal <kasal@math.cas.cz>
|
||||
Mon Jan 27 08:09:07 CET 2003 Stepan Kasal <kasal@math.cas.cz>
|
||||
* doc/texinfo.tex (\acuteaccent): the workaround is no longer needed.
|
||||
(\xrefX): \normalturnoffactive changed to \turnoffactive, since
|
||||
we \otherbackslash right afterwards anyway.
|
||||
@ -319,7 +869,7 @@ Wed Jan 22 14:25:39 CET 2003 Stepan Kasal <kasal@math.cas.cz>
|
||||
Fri Jan 10 07:12:23 CET 2003 Stepan Kasal <kasal@math.cas.cz>
|
||||
* texinfo.tex (\writetocentry): The
|
||||
common work on building the line for \write\tocfile was
|
||||
moved into the macro itself and thus all callers has been changed.
|
||||
moved into the macro itself and thus all callers has been changed.
|
||||
|
||||
2003-01-09 <karl@gnu.org>
|
||||
|
||||
@ -487,7 +1037,7 @@ Wed Jan 22 14:25:39 CET 2003 Stepan Kasal <kasal@math.cas.cz>
|
||||
verbatim line.
|
||||
Report from: Torsten Bronger <bronger@physik.rwth-aachen.de>
|
||||
25 Nov 2002 18:26:12 +0100.
|
||||
|
||||
|
||||
(\doverbatim): ignore everything up to the first
|
||||
^^M, to avoid an extra blank line in the output.
|
||||
|
||||
@ -683,7 +1233,7 @@ Wed Jan 22 14:25:39 CET 2003 Stepan Kasal <kasal@math.cas.cz>
|
||||
2002-11-04 <karl@gnu.org>
|
||||
|
||||
* doc/texinfo.txi (File End): grammar.
|
||||
|
||||
|
||||
These changes from gildea:
|
||||
* makeinfo/cmds.c (cm_titlepage): new fn, and use it for @titlepage.
|
||||
|
||||
@ -754,7 +1304,7 @@ Wed Jan 22 14:25:39 CET 2003 Stepan Kasal <kasal@math.cas.cz>
|
||||
regular line spacing a long time ago to not be double-spaced.
|
||||
In @smallbook mode, it ironically caused excessive line spacing.
|
||||
(\nonfillstart, \quotation): don't call it.
|
||||
|
||||
|
||||
* doc/texinfo.tex (\smartslanted, \smartitalic): use \ttsl if in
|
||||
typewriter.
|
||||
From: Bob Wilson <bwilson@tensilica.com>.
|
||||
@ -11949,6 +12499,11 @@ Mon Aug 15 14:33:51 1988 Robert J. Chassell (bob at spiff)
|
||||
Month Day, Year format to a Day Month Year format. Left old
|
||||
version commented out.
|
||||
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved.
|
||||
|
||||
|
||||
Local Variables:
|
||||
mode: indented-text
|
||||
|
@ -1,7 +1,7 @@
|
||||
$Id: NEWS,v 1.34 2003/02/05 00:54:07 karl Exp $
|
||||
$Id: NEWS,v 1.57 2003/06/10 20:50:03 karl Exp $
|
||||
This file records noteworthy changes.
|
||||
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2003,
|
||||
2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
@ -22,6 +22,45 @@ convenience, here's a url to one of the relevant sections:
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
4.6 (10 June 2003)
|
||||
* Language:
|
||||
. new command @/ specifies an allowable breakpoint within a line.
|
||||
. new command @dofirstparagraphindent to control whether the first
|
||||
paragraph following a section heading is indented. Default is to
|
||||
omit this indentation, unlike the output up to now.
|
||||
. new command @indent for explicitly indenting a paragraph.
|
||||
. makeinfo writes a new construct for @image in Info output, so that
|
||||
graphical Info browsers (such as Emacs Info under X) can display an
|
||||
actual image. (Standalone Info ignores this, since it runs in a tty.)
|
||||
* makeinfo:
|
||||
. Common:
|
||||
- search for image files in the include file search path.
|
||||
- warns if @value is used on an undefined variable.
|
||||
. Info output:
|
||||
- default --split-size now 300,000 bytes, up from 50,000.
|
||||
- with --enable-encoding and a given @documentencoding,
|
||||
output a Local Variables section specifying that encoding, for use
|
||||
with Emacs.
|
||||
. HTML output:
|
||||
- uses <h3> at the smallest.
|
||||
- a few css <style> definitions are included to better
|
||||
implement @format, @display, @small..., etc.
|
||||
- new option --css-include=FILE includes FILE in the <style>.
|
||||
- @cartouche now outputs a <table> with a border.
|
||||
* texinfo.tex:
|
||||
. new Polish translation txi-pl.tex.
|
||||
* texi2dvi:
|
||||
. --command=CMD replaces --texinfo=CMD; it inserts CMD at the first
|
||||
line of LaTeX files now, or after the @setfilename for Texinfo files.
|
||||
* info:
|
||||
. RET now goes to the nearest xref (rather like Emacs Info),
|
||||
instead of the next xref starting on the current line.
|
||||
* Distribution:
|
||||
. new Romanian (ro) translation.
|
||||
. variables now declared const where appropriate.
|
||||
. gettext 0.12.1, automake 1.7.5.
|
||||
|
||||
|
||||
4.5 (4 February 2003)
|
||||
* info:
|
||||
. a bug in 4.4 prevented compressed info files from being found.
|
||||
@ -38,6 +77,7 @@ convenience, here's a url to one of the relevant sections:
|
||||
. @value constructs are now expanded in the filename arguments to
|
||||
@include and @verbatiminclude.
|
||||
* makeinfo:
|
||||
. @macro names may no longer include ^ or _, for the sake of math mode.
|
||||
. bug fix: @copying text is now reflected in tag table positions;
|
||||
before, nodes may not have been found with a long-enough @copying.
|
||||
. bug fix: html @verb arg is quoted properly, and does not imply
|
||||
@ -61,7 +101,7 @@ convenience, here's a url to one of the relevant sections:
|
||||
. getopt and other common library files updated from gnulib
|
||||
(http://savannah.gnu.org/projects/gnulib/).
|
||||
. autoconf 2.57, automake 1.7.2.
|
||||
|
||||
|
||||
|
||||
4.3 (14 November 2002)
|
||||
* Language:
|
||||
@ -122,11 +162,13 @@ convenience, here's a url to one of the relevant sections:
|
||||
. supports xml and docbook output.
|
||||
. supports HTML splitting by node, which is now the default.
|
||||
. new option --split-size to control maximum size of split info files.
|
||||
. new option --enable-encoding to enable
|
||||
* info:
|
||||
. user-specified key bindings supported.
|
||||
. ANSI escape sequences (as produced by groff) removed from man output
|
||||
by default; use --raw-escapes to let them through if your terminal
|
||||
supports them.
|
||||
. RET terminates incremental search normally.
|
||||
* texinfo.tex:
|
||||
. @math implies @tex, so all the usual plain TeX math is supported.
|
||||
. smaller fonts for @smallexample, in all page sizes.
|
||||
|
@ -1,4 +1,4 @@
|
||||
$Id: TODO,v 1.6 2003/01/27 13:05:44 karl Exp $
|
||||
$Id: TODO,v 1.8 2003/04/27 13:12:24 karl Exp $
|
||||
This is the todo list for GNU Texinfo.
|
||||
If you are interested in working on any of these, email bug-texinfo@gnu.org.
|
||||
|
||||
@ -104,6 +104,7 @@ If you are interested in working on any of these, email bug-texinfo@gnu.org.
|
||||
- Incorporate an X-based viewer, perhaps tkinfo
|
||||
http://www.math.ucsb.edu/~boldt/tkinfo/
|
||||
or saxinfo.
|
||||
- Write technical definition of Info format.
|
||||
|
||||
* PDF:
|
||||
- make each letter of the index (A, B, ...) a section in the TOC.
|
||||
@ -113,6 +114,11 @@ If you are interested in working on any of these, email bug-texinfo@gnu.org.
|
||||
- be able to copy the info file to compile-time $(infodir), to
|
||||
simplify by-hand installation.
|
||||
|
||||
* texindex:
|
||||
- read source file (specified by new option) for @documentlanguage
|
||||
and/or @documentencoding, and change the sorting appropriately.
|
||||
From: Wojciech Polak <polak@gnu.org>, 26 Apr 2003 11:30:59 +0200.
|
||||
|
||||
|
||||
Ideas that will not be implemented:
|
||||
- Process Texinfo files directly instead of converting to Info:
|
||||
|
@ -279,6 +279,9 @@
|
||||
/* Define to 1 if you have the `__argz_stringify' function. */
|
||||
#undef HAVE___ARGZ_STRINGIFY
|
||||
|
||||
/* Define to 1 if you have the `__fsetlocking' function. */
|
||||
#undef HAVE___FSETLOCKING
|
||||
|
||||
/* Define to 1 if you have the `__secure_getenv' function. */
|
||||
#undef HAVE___SECURE_GETENV
|
||||
|
||||
|
@ -344,7 +344,7 @@ and independent documents or works, in or on a volume of a storage or
|
||||
distribution medium, is called an ``aggregate'' if the copyright
|
||||
resulting from the compilation is not used to limit the legal rights
|
||||
of the compilation's users beyond what the individual works permit.
|
||||
When the Document is included an aggregate, this License does not
|
||||
When the Document is included in an aggregate, this License does not
|
||||
apply to the other works in the aggregate which are not themselves
|
||||
derivative works of the Document.
|
||||
|
||||
@ -366,7 +366,7 @@ permission from their copyright holders, but you may include
|
||||
translations of some or all Invariant Sections in addition to the
|
||||
original versions of these Invariant Sections. You may include a
|
||||
translation of this License, and all the license notices in the
|
||||
Document, and any Warrany Disclaimers, provided that you also include
|
||||
Document, and any Warranty Disclaimers, provided that you also include
|
||||
the original English version of this License and the original versions
|
||||
of those notices and disclaimers. In case of a disagreement between
|
||||
the translation and the original version of this License or a notice
|
||||
@ -421,8 +421,8 @@ license notices just after the title page:
|
||||
under the terms of the GNU Free Documentation License, Version 1.2
|
||||
or any later version published by the Free Software Foundation;
|
||||
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
|
||||
Texts. A copy of the license is included in the section entitled
|
||||
``GNU Free Documentation License''.
|
||||
Texts. A copy of the license is included in the section entitled ``GNU
|
||||
Free Documentation License''.
|
||||
@end group
|
||||
@end smallexample
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
\input texinfo @c -*-texinfo-*-
|
||||
@comment $Id: info-stnd.texi,v 1.4 2002/11/06 00:42:29 karl Exp $
|
||||
@comment $Id: info-stnd.texi,v 1.5 2003/02/19 13:32:54 karl Exp $
|
||||
@comment %**start of header
|
||||
@setfilename info-stnd.info
|
||||
@include version-stnd.texi
|
||||
@ -14,7 +14,7 @@ This manual is for GNU Info (version @value{VERSION}, @value{UPDATED}),
|
||||
a program for viewing documents in Info format (usually created from
|
||||
Texinfo source files).
|
||||
|
||||
Copyright @copyright{} 1992, 1993, 1996, 1997, 1998, 1999, 2001, 2002
|
||||
Copyright @copyright{} 1992, 1993, 1996, 1997, 1998, 1999, 2001, 2002, 2003
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
@quotation
|
||||
@ -1047,7 +1047,7 @@ different node, perhaps in another Info file. Such pointers are called
|
||||
* Selecting Xrefs:: Commands for selecting menu or note items.
|
||||
@end menu
|
||||
|
||||
@node Parts of an Xref, Selecting Xrefs, , Xref Commands
|
||||
@node Parts of an Xref
|
||||
@section Parts of an Xref
|
||||
|
||||
Cross references have two major parts: the first part is called the
|
||||
@ -1095,7 +1095,7 @@ documentation: @xref{xref, , Writing an Xref, texinfo, the Texinfo
|
||||
Manual}, for more information on creating your own texinfo cross
|
||||
references.
|
||||
|
||||
@node Selecting Xrefs, , Parts of an Xref, Xref Commands
|
||||
@node Selecting Xrefs
|
||||
@section Selecting Xrefs
|
||||
|
||||
The following table lists the Info commands which operate on menu items.
|
||||
@ -1206,7 +1206,7 @@ windows.
|
||||
* The Echo Area:: Used for displaying errors and reading input.
|
||||
@end menu
|
||||
|
||||
@node The Mode Line, Basic Windows, , Window Commands
|
||||
@node The Mode Line
|
||||
@section The Mode Line
|
||||
|
||||
A @dfn{mode line} is a line of inverse video which appears at the bottom
|
||||
@ -1256,7 +1256,7 @@ showing possible completions:
|
||||
-----Info: *Completions*, 7 lines --All---------------------------------
|
||||
@end example
|
||||
|
||||
@node Basic Windows, The Echo Area, The Mode Line, Window Commands
|
||||
@node Basic Windows
|
||||
@section Window Commands
|
||||
|
||||
It can be convenient to view more than one node at a time. To allow
|
||||
@ -1331,7 +1331,7 @@ its contents. The variable @code{automatic-tiling} can cause
|
||||
@xref{Variables, , @code{automatic-tiling}}.
|
||||
@end table
|
||||
|
||||
@node The Echo Area, , Basic Windows, Window Commands
|
||||
@node The Echo Area
|
||||
@section The Echo Area
|
||||
@cindex echo area
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.29.
|
||||
.TH INFO "1" "February 2003" "info 4.4" "User Commands"
|
||||
.TH INFO "1" "June 2003" "info 4.6" "User Commands"
|
||||
.SH NAME
|
||||
info \- read Info documents
|
||||
.SH SYNOPSIS
|
||||
|
@ -1,5 +1,5 @@
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.29.
|
||||
.TH INSTALL-INFO "1" "February 2003" "install-info 4.4" "User Commands"
|
||||
.TH INSTALL-INFO "1" "June 2003" "install-info 4.6" "User Commands"
|
||||
.SH NAME
|
||||
install-info \- update info/dir entries
|
||||
.SH SYNOPSIS
|
||||
|
@ -1,5 +1,5 @@
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.29.
|
||||
.TH MAKEINFO "1" "February 2003" "makeinfo 4.4" "User Commands"
|
||||
.TH MAKEINFO "1" "June 2003" "makeinfo 4.6" "User Commands"
|
||||
.SH NAME
|
||||
makeinfo \- translate Texinfo documents
|
||||
.SH SYNOPSIS
|
||||
@ -86,7 +86,12 @@ If VAL is `none', do not indent; if VAL is
|
||||
`asis', preserve existing indentation.
|
||||
.TP
|
||||
\fB\-\-split\-size\fR=\fINUM\fR
|
||||
split Info files at size NUM (default 50000).
|
||||
split Info files at size NUM (default 300000).
|
||||
.SS "Options for HTML:"
|
||||
.TP
|
||||
\fB\-\-css\-include\fR=\fIFILE\fR
|
||||
include FILE in HTML <style> output;
|
||||
read stdin if FILE is -.
|
||||
.SS "Input file options:"
|
||||
.TP
|
||||
\fB\-\-commands\-in\-node\-names\fR
|
||||
@ -139,6 +144,7 @@ The defaults for the @if... conditionals depend on the output format:
|
||||
if generating HTML, \fB\-\-ifhtml\fR is on and the others are off;
|
||||
if generating Info, \fB\-\-ifinfo\fR is on and the others are off;
|
||||
if generating plain text, \fB\-\-ifplaintext\fR is on and the others are off;
|
||||
if generating XML, \fB\-\-ifxml\fR is on and the others are off.
|
||||
.SH EXAMPLES
|
||||
.TP
|
||||
makeinfo foo.texi
|
||||
|
@ -1,5 +1,5 @@
|
||||
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.29.
|
||||
.TH TEXINDEX "1" "February 2003" "texindex 4.4" "User Commands"
|
||||
.TH TEXINDEX "1" "June 2003" "texindex 4.6" "User Commands"
|
||||
.SH NAME
|
||||
texindex \- sort Texinfo index files
|
||||
.SH SYNOPSIS
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
||||
@set UPDATED 5 November 2002
|
||||
@set UPDATED-MONTH November 2002
|
||||
@set EDITION 4.5
|
||||
@set VERSION 4.5
|
||||
@set UPDATED 19 February 2003
|
||||
@set UPDATED-MONTH February 2003
|
||||
@set EDITION 4.6
|
||||
@set VERSION 4.6
|
||||
|
@ -1,4 +1,4 @@
|
||||
@set UPDATED 4 February 2003
|
||||
@set UPDATED-MONTH February 2003
|
||||
@set EDITION 4.5
|
||||
@set VERSION 4.5
|
||||
@set UPDATED 2 June 2003
|
||||
@set UPDATED-MONTH June 2003
|
||||
@set EDITION 4.6
|
||||
@set VERSION 4.6
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* display.c -- How to display Info windows.
|
||||
$Id: display.c,v 1.1 2002/08/25 23:38:38 karl Exp $
|
||||
$Id: display.c,v 1.4 2003/05/13 16:20:44 karl Exp $
|
||||
|
||||
Copyright (C) 1993, 97 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1997, 2003 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
|
||||
@ -136,7 +136,7 @@ display_update_one_window (win)
|
||||
|
||||
for (; nodetext < last_node_char; nodetext++)
|
||||
{
|
||||
char *rep, *rep_carried_over, rep_temp[2];
|
||||
char *rep = NULL, *rep_carried_over, rep_temp[2];
|
||||
int replen;
|
||||
|
||||
if (isprint (*nodetext))
|
||||
@ -152,6 +152,15 @@ display_update_one_window (win)
|
||||
{
|
||||
replen = win->width - pl_index + pl_ignore;
|
||||
}
|
||||
else if (*nodetext == '\0'
|
||||
&& (nodetext + 1) < last_node_char
|
||||
&& *(nodetext + 1) == '\b')
|
||||
{
|
||||
/* Found new style image tag/cookie \0\b[ or \0\b]
|
||||
Just skip for now. */
|
||||
nodetext++;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
rep = printed_representation (*nodetext, pl_index);
|
||||
@ -211,7 +220,7 @@ display_update_one_window (win)
|
||||
to the next line. */
|
||||
for (i = 0; pl_index < (win->width + pl_ignore - 1);)
|
||||
printed_line[pl_index++] = rep[i++];
|
||||
|
||||
|
||||
rep_carried_over = rep + i;
|
||||
|
||||
/* If printing the last character in this window couldn't
|
||||
@ -233,8 +242,10 @@ display_update_one_window (win)
|
||||
entry = display[line_index + win->first_row];
|
||||
|
||||
/* If the screen line is inversed, then we have to clear
|
||||
the line from the screen first. Why, I don't know. */
|
||||
if (entry->inverse
|
||||
the line from the screen first. Why, I don't know.
|
||||
(But don't do this if we have no visible entries, as can
|
||||
happen if the window is shrunk very small.) */
|
||||
if ((entry && entry->inverse)
|
||||
/* Need to erase the line if it has escape sequences. */
|
||||
|| (raw_escapes_p && strchr (entry->text, '\033') != 0))
|
||||
{
|
||||
@ -322,7 +333,7 @@ display_update_one_window (win)
|
||||
printed_line[0] = '\0';
|
||||
|
||||
begin = nodetext;
|
||||
|
||||
|
||||
while ((nodetext < last_node_char) && (*nodetext != '\n'))
|
||||
nodetext++;
|
||||
}
|
||||
|
@ -1,7 +1,8 @@
|
||||
/* indices.c -- deal with an Info file index.
|
||||
$Id: indices.c,v 1.1 2002/08/25 23:38:38 karl Exp $
|
||||
$Id: indices.c,v 1.2 2003/02/11 16:39:06 karl Exp $
|
||||
|
||||
Copyright (C) 1993, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1997, 1998, 1999, 2002, 2003 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
|
||||
@ -390,7 +391,7 @@ DECLARE_INFO_COMMAND (info_next_index_match,
|
||||
/* Report to the user on what we have found. */
|
||||
{
|
||||
register int j;
|
||||
char *name = _("CAN'T SEE THIS");
|
||||
const char *name = _("CAN'T SEE THIS");
|
||||
char *match;
|
||||
|
||||
for (j = 0; index_nodenames[j]; j++)
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* info-utils.c -- miscellanous.
|
||||
$Id: info-utils.c,v 1.1 2002/08/25 23:38:38 karl Exp $
|
||||
$Id: info-utils.c,v 1.2 2003/03/06 23:22:23 karl Exp $
|
||||
|
||||
Copyright (C) 1993, 98 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1998, 2003 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
|
||||
@ -355,6 +355,27 @@ info_concatenate_references (ref1, ref2)
|
||||
return (result);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Copy a reference structure. Since we tend to free everything at
|
||||
every opportunity, we don't share any points, but copy everything into
|
||||
new memory. */
|
||||
REFERENCE *
|
||||
info_copy_reference (src)
|
||||
REFERENCE *src;
|
||||
{
|
||||
REFERENCE *dest = xmalloc (sizeof (REFERENCE));
|
||||
dest->label = src->label ? xstrdup (src->label) : NULL;
|
||||
dest->filename = src->filename ? xstrdup (src->filename) : NULL;
|
||||
dest->nodename = src->nodename ? xstrdup (src->nodename) : NULL;
|
||||
dest->start = src->start;
|
||||
dest->end = src->end;
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Free the data associated with REFERENCES. */
|
||||
void
|
||||
info_free_references (references)
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* info-utils.h -- Exported functions and variables from info-utils.c.
|
||||
$Id: info-utils.h,v 1.1 2002/08/25 23:38:38 karl Exp $
|
||||
$Id: info-utils.h,v 1.2 2003/03/06 23:21:48 karl Exp $
|
||||
|
||||
Copyright (C) 1993, 1996, 1998, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1996, 1998, 2002, 2003 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
|
||||
@ -83,6 +83,9 @@ extern REFERENCE **info_menu_items ();
|
||||
and REF2 arrays are freed, but their contents are not. */
|
||||
REFERENCE **info_concatenate_references ();
|
||||
|
||||
/* Copy an existing reference into new memory. */
|
||||
extern REFERENCE *info_copy_reference ();
|
||||
|
||||
/* Free the data associated with REFERENCES. */
|
||||
extern void info_free_references ();
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* info.c -- Display nodes of Info files in multiple windows.
|
||||
$Id: info.c,v 1.2 2003/01/19 18:45:59 karl Exp $
|
||||
$Id: info.c,v 1.7 2003/05/19 13:10:59 karl Exp $
|
||||
|
||||
Copyright (C) 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||
Free Software Foundation, Inc.
|
||||
@ -120,16 +120,16 @@ static struct option long_options[] = {
|
||||
|
||||
/* String describing the shorthand versions of the long options found above. */
|
||||
#ifdef __MSDOS__
|
||||
static char *short_options = "d:n:f:o:ORsb";
|
||||
static char *short_options = "d:n:f:ho:ORsb";
|
||||
#else
|
||||
static char *short_options = "d:n:f:o:ORs";
|
||||
static char *short_options = "d:n:f:ho:ORs";
|
||||
#endif
|
||||
|
||||
/* When non-zero, the Info window system has been initialized. */
|
||||
int info_windows_initialized_p = 0;
|
||||
|
||||
/* Some "forward" declarations. */
|
||||
static void info_short_help (), remember_info_program_name ();
|
||||
static void info_short_help ();
|
||||
static void init_messages ();
|
||||
extern void add_file_directory_to_path ();
|
||||
|
||||
@ -158,7 +158,7 @@ main (argc, argv)
|
||||
textdomain (PACKAGE);
|
||||
|
||||
init_messages ();
|
||||
|
||||
|
||||
while (1)
|
||||
{
|
||||
int option_character;
|
||||
@ -166,7 +166,7 @@ main (argc, argv)
|
||||
option_character = getopt_long
|
||||
(argc, argv, short_options, long_options, &getopt_long_index);
|
||||
|
||||
/* getopt_long () returns EOF when there are no more long options. */
|
||||
/* getopt_long returns EOF when there are no more long options. */
|
||||
if (option_character == EOF)
|
||||
break;
|
||||
|
||||
@ -199,6 +199,11 @@ main (argc, argv)
|
||||
user_filename = xstrdup (optarg);
|
||||
break;
|
||||
|
||||
/* Treat -h like --help. */
|
||||
case 'h':
|
||||
print_help_p = 1;
|
||||
break;
|
||||
|
||||
/* User is specifying the name of a file to output to. */
|
||||
case 'o':
|
||||
if (user_output_filename)
|
||||
@ -473,6 +478,8 @@ For more information about these matters, see the files named COPYING.\n"),
|
||||
|
||||
xexit (0);
|
||||
}
|
||||
|
||||
return 0; /* Avoid bogus warnings. */
|
||||
}
|
||||
|
||||
void
|
||||
@ -558,7 +565,7 @@ info_short_help ()
|
||||
static const char speech_friendly_string[] = "";
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
printf (_("\
|
||||
Usage: %s [OPTION]... [MENU-ITEM...]\n\
|
||||
\n\
|
||||
@ -609,22 +616,22 @@ Texinfo home page: http://www.gnu.org/software/texinfo/"));
|
||||
use them that way. This also has the advantage that there's only one
|
||||
copy of the strings. */
|
||||
|
||||
char *msg_cant_find_node;
|
||||
char *msg_cant_file_node;
|
||||
char *msg_cant_find_window;
|
||||
char *msg_cant_find_point;
|
||||
char *msg_cant_kill_last;
|
||||
char *msg_no_menu_node;
|
||||
char *msg_no_foot_node;
|
||||
char *msg_no_xref_node;
|
||||
char *msg_no_pointer;
|
||||
char *msg_unknown_command;
|
||||
char *msg_term_too_dumb;
|
||||
char *msg_at_node_bottom;
|
||||
char *msg_at_node_top;
|
||||
char *msg_one_window;
|
||||
char *msg_win_too_small;
|
||||
char *msg_cant_make_help;
|
||||
const char *msg_cant_find_node;
|
||||
const char *msg_cant_file_node;
|
||||
const char *msg_cant_find_window;
|
||||
const char *msg_cant_find_point;
|
||||
const char *msg_cant_kill_last;
|
||||
const char *msg_no_menu_node;
|
||||
const char *msg_no_foot_node;
|
||||
const char *msg_no_xref_node;
|
||||
const char *msg_no_pointer;
|
||||
const char *msg_unknown_command;
|
||||
const char *msg_term_too_dumb;
|
||||
const char *msg_at_node_bottom;
|
||||
const char *msg_at_node_top;
|
||||
const char *msg_one_window;
|
||||
const char *msg_win_too_small;
|
||||
const char *msg_cant_make_help;
|
||||
|
||||
static void
|
||||
init_messages ()
|
||||
|
@ -1,7 +1,8 @@
|
||||
/* info.h -- Header file which includes all of the other headers.
|
||||
$Id: info.h,v 1.1 2002/08/25 23:38:38 karl Exp $
|
||||
$Id: info.h,v 1.2 2003/02/11 16:39:06 karl Exp $
|
||||
|
||||
Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002, 2003 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
|
||||
@ -128,22 +129,22 @@ extern int raw_escapes_p;
|
||||
extern void info_error ();
|
||||
|
||||
/* Error message defines. */
|
||||
extern char *msg_cant_find_node;
|
||||
extern char *msg_cant_file_node;
|
||||
extern char *msg_cant_find_window;
|
||||
extern char *msg_cant_find_point;
|
||||
extern char *msg_cant_kill_last;
|
||||
extern char *msg_no_menu_node;
|
||||
extern char *msg_no_foot_node;
|
||||
extern char *msg_no_xref_node;
|
||||
extern char *msg_no_pointer;
|
||||
extern char *msg_unknown_command;
|
||||
extern char *msg_term_too_dumb;
|
||||
extern char *msg_at_node_bottom;
|
||||
extern char *msg_at_node_top;
|
||||
extern char *msg_one_window;
|
||||
extern char *msg_win_too_small;
|
||||
extern char *msg_cant_make_help;
|
||||
extern const char *msg_cant_find_node;
|
||||
extern const char *msg_cant_file_node;
|
||||
extern const char *msg_cant_find_window;
|
||||
extern const char *msg_cant_find_point;
|
||||
extern const char *msg_cant_kill_last;
|
||||
extern const char *msg_no_menu_node;
|
||||
extern const char *msg_no_foot_node;
|
||||
extern const char *msg_no_xref_node;
|
||||
extern const char *msg_no_pointer;
|
||||
extern const char *msg_unknown_command;
|
||||
extern const char *msg_term_too_dumb;
|
||||
extern const char *msg_at_node_bottom;
|
||||
extern const char *msg_at_node_top;
|
||||
extern const char *msg_one_window;
|
||||
extern const char *msg_win_too_small;
|
||||
extern const char *msg_cant_make_help;
|
||||
|
||||
|
||||
extern char *filename_non_directory (); /* Found in info-utils.c. */
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* infodoc.c -- functions which build documentation nodes.
|
||||
$Id: infodoc.c,v 1.5 2002/11/06 00:40:08 karl Exp $
|
||||
$Id: infodoc.c,v 1.6 2003/05/13 16:22:11 karl Exp $
|
||||
|
||||
Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002 Free Software
|
||||
Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002, 2003 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@ -37,7 +37,7 @@ static NODE *internal_info_help_node = (NODE *)NULL;
|
||||
static char *internal_info_help_node_contents = (char *)NULL;
|
||||
|
||||
/* The (more or less) static text which appears in the internal info
|
||||
help node. The actual key bindings are inserted. Keep the
|
||||
help node. The actual key bindings are inserted. Keep the
|
||||
underlines (****, etc.) in the same N_ call as the text lines they
|
||||
refer to, so translations can make the number of *'s or -'s match. */
|
||||
#if defined(INFOKEY)
|
||||
@ -300,7 +300,7 @@ create_internal_info_help_node (help_is_only_window_p)
|
||||
? _(info_internal_help_text[i])
|
||||
: info_internal_help_text[i];
|
||||
char *key = info_help_keys_text[i][vi_keys_p];
|
||||
|
||||
|
||||
/* If we have only one window (because the window size was too
|
||||
small to split it), CTRL-x 0 doesn't work to `quit' help. */
|
||||
if (STREQ (key, "CTRL-x 0") && help_is_only_window_p)
|
||||
@ -439,7 +439,7 @@ info_find_or_create_help_window ()
|
||||
to quit help), true if help will be one of several visible windows
|
||||
(so CTRL-x 0 must be used to quit help). */
|
||||
help_is_only_window_p
|
||||
= (help_window && !windows->next
|
||||
= ((help_window && !windows->next)
|
||||
|| !help_window && eligible->height < HELP_SPLIT_SIZE);
|
||||
create_internal_info_help_node (help_is_only_window_p);
|
||||
|
||||
@ -1112,7 +1112,7 @@ where_is_internal (map, cmd)
|
||||
where_is_internal without setting where_is_rep_index to zero. This
|
||||
was found by Mandrake and reported by Thierry Vignaud
|
||||
<tvignaud@mandrakesoft.com> around April 24, 2002.
|
||||
|
||||
|
||||
I think the best fix is to make where_is_rep_index another
|
||||
parameter to this recursively-called function, instead of a static
|
||||
variable. But this [!INFOKEY] branch of the code is not enabled
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* infokey.c -- compile ~/.infokey to ~/.info.
|
||||
$Id: infokey.c,v 1.3 2003/01/19 18:46:27 karl Exp $
|
||||
$Id: infokey.c,v 1.4 2003/05/13 16:26:02 karl Exp $
|
||||
|
||||
Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
|
||||
@ -86,7 +86,6 @@ main (argc, argv)
|
||||
char **argv;
|
||||
{
|
||||
int getopt_long_index; /* Index returned by getopt_long (). */
|
||||
NODE *initial_node; /* First node loaded by Info. */
|
||||
|
||||
#ifdef HAVE_SETLOCALE
|
||||
/* Set locale via LC_ALL. */
|
||||
@ -233,7 +232,7 @@ For more information about these matters, see the files named COPYING.\n"),
|
||||
fclose (inf);
|
||||
}
|
||||
|
||||
xexit (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static char *
|
||||
@ -289,18 +288,18 @@ mkpath (dir, file)
|
||||
#info
|
||||
#echo-area
|
||||
#var
|
||||
|
||||
|
||||
The sections may occur in any order. Each section may be
|
||||
omitted completely. If the 'info' section is the first in the
|
||||
file, its '#info' line may be omitted.
|
||||
|
||||
|
||||
The 'info' and 'echo-area' sections
|
||||
-----------------------------------
|
||||
Each line in the 'info' or 'echo-area' sections has the
|
||||
following syntax:
|
||||
|
||||
key-sequence SPACE action-name [ SPACE [ # comment ] ] \n
|
||||
|
||||
|
||||
Where SPACE is one or more white space characters excluding
|
||||
newline, "action-name" is the name of a GNU Info command,
|
||||
"comment" is any sequence of characters excluding newline, and
|
||||
@ -319,7 +318,7 @@ mkpath (dir, file)
|
||||
\r indicates a single CR;
|
||||
\t indicates a single TAB;
|
||||
\b indicates a single BACKSPACE;
|
||||
|
||||
|
||||
4. \ku indicates the Up Arrow key;
|
||||
\kd indicates the Down Arrow key;
|
||||
\kl indicates the Left Arrow key;
|
||||
@ -345,17 +344,17 @@ mkpath (dir, file)
|
||||
If the following line:
|
||||
|
||||
#stop
|
||||
|
||||
|
||||
occurs anywhere in an 'info' or 'echo-area' section, that
|
||||
indicates to GNU Info to suppress all of its default key
|
||||
bindings in that context.
|
||||
|
||||
|
||||
The 'var' section
|
||||
-----------------
|
||||
Each line in the 'var' section has the following syntax:
|
||||
|
||||
variable-name = value \n
|
||||
|
||||
|
||||
Where "variable-name" is the name of a GNU Info variable and
|
||||
"value" is the value that GNU Info will assign to that variable
|
||||
when commencing execution. There must be no white space in the
|
||||
@ -567,7 +566,7 @@ compile (fp, filename, sections)
|
||||
seqstate = special_key;
|
||||
break;
|
||||
default:
|
||||
/* Backslash followed by any other char
|
||||
/* Backslash followed by any other char
|
||||
just means that char. */
|
||||
To_seq (c);
|
||||
seqstate = normal;
|
||||
@ -683,7 +682,7 @@ compile (fp, filename, sections)
|
||||
error = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case got_action:
|
||||
if (c == '#')
|
||||
state = in_trailing_comment;
|
||||
@ -720,7 +719,7 @@ compile (fp, filename, sections)
|
||||
error = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case get_value:
|
||||
if (c == '\n')
|
||||
{
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* infomap.c -- keymaps for Info.
|
||||
$Id: infomap.c,v 1.5 2003/01/24 19:04:54 karl Exp $
|
||||
$Id: infomap.c,v 1.7 2003/05/13 16:27:04 karl Exp $
|
||||
|
||||
Copyright (C) 1993, 1997, 1998, 1999, 2001, 2002, 2003 Free Software
|
||||
Foundation, Inc.
|
||||
@ -132,7 +132,7 @@ remove_function_keyseq (function, keyseq, rootmap)
|
||||
function->keys = k->next;
|
||||
}
|
||||
#endif /* INFOKEY */
|
||||
|
||||
|
||||
/* Return a new keymap which is a copy of MAP. */
|
||||
Keymap
|
||||
keymap_copy_keymap (map, rootmap, newroot)
|
||||
@ -1493,7 +1493,7 @@ fetch_user_maps()
|
||||
#endif
|
||||
if (filename == NULL || (f = open(filename, O_RDONLY)) == (-1))
|
||||
{
|
||||
if (filename)
|
||||
if (filename && errno != ENOENT)
|
||||
{
|
||||
info_error(filesys_error_string(filename, errno));
|
||||
free(filename);
|
||||
@ -1667,7 +1667,6 @@ section_to_keymaps(map, table, len)
|
||||
unsigned char *p;
|
||||
unsigned char *seq;
|
||||
unsigned int seqlen;
|
||||
KEYMAP_ENTRY ke;
|
||||
enum { getseq, gotseq, getaction } state = getseq;
|
||||
|
||||
stop = len > 0 ? table[0] : 0;
|
||||
@ -1780,7 +1779,6 @@ initialize_info_keymaps ()
|
||||
int i;
|
||||
int suppress_info_default_bindings = 0;
|
||||
int suppress_ea_default_bindings = 0;
|
||||
Keymap map;
|
||||
|
||||
if (!info_keymap)
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* man.c: How to read and format man files.
|
||||
$Id: man.c,v 1.1 2002/08/25 23:38:38 karl Exp $
|
||||
$Id: man.c,v 1.2 2003/05/13 16:37:54 karl Exp $
|
||||
|
||||
Copyright (C) 1995, 1997, 1998, 1999, 2000, 2002 Free Software
|
||||
Copyright (C) 1995, 1997, 1998, 1999, 2000, 2002, 2003 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@ -160,7 +160,7 @@ create_manpage_file_buffer ()
|
||||
file_buffer->filesize = 0;
|
||||
file_buffer->contents = (char *)NULL;
|
||||
file_buffer->flags = (N_IsInternal | N_CannotGC | N_IsManPage);
|
||||
|
||||
|
||||
return (file_buffer);
|
||||
}
|
||||
|
||||
@ -401,7 +401,7 @@ clean_manpage (manpage)
|
||||
/* A malformed man page could have a \b as its first character,
|
||||
in which case decrementing j by 2 will cause us to write into
|
||||
newpage[-1], smashing the hidden info stored there by malloc. */
|
||||
if (manpage[i] == '\b' || manpage[i] == '\f' && j > 0)
|
||||
if (manpage[i] == '\b' || (manpage[i] == '\f' && j > 0))
|
||||
j -= 2;
|
||||
else if (!raw_escapes_p)
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* nodemenu.c -- produce a menu of all visited nodes.
|
||||
$Id: nodemenu.c,v 1.1 2002/08/25 23:38:38 karl Exp $
|
||||
$Id: nodemenu.c,v 1.3 2003/05/13 16:37:54 karl Exp $
|
||||
|
||||
Copyright (C) 1993, 1997, 1998, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1997, 1998, 2002, 2003 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
|
||||
@ -22,7 +22,7 @@
|
||||
#include "info.h"
|
||||
|
||||
/* Return a line describing the format of a node information line. */
|
||||
static char *
|
||||
static const char *
|
||||
nodemenu_format_info ()
|
||||
{
|
||||
return (_("\n\
|
||||
@ -101,7 +101,7 @@ format_node_info (node)
|
||||
if (node->filename && *(node->filename))
|
||||
{
|
||||
len = pad_to (51, line_buffer);
|
||||
sprintf (line_buffer + len, node->filename);
|
||||
strcpy (line_buffer + len, node->filename);
|
||||
}
|
||||
|
||||
return xstrdup (line_buffer);
|
||||
|
@ -1,7 +1,8 @@
|
||||
/* nodes.c -- how to get an Info file and node.
|
||||
$Id: nodes.c,v 1.1 2002/08/25 23:38:38 karl Exp $
|
||||
$Id: nodes.c,v 1.2 2003/05/13 16:37:54 karl Exp $
|
||||
|
||||
Copyright (C) 1993, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1998, 1999, 2000, 2002, 2003 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
|
||||
@ -869,19 +870,19 @@ find_node_of_anchor (file_buffer, tag)
|
||||
int anchor_pos, node_pos;
|
||||
TAG *node_tag;
|
||||
NODE *node;
|
||||
|
||||
|
||||
/* Look through the tag list for the anchor. */
|
||||
for (anchor_pos = 0; file_buffer->tags[anchor_pos]; anchor_pos++)
|
||||
{
|
||||
TAG *t = file_buffer->tags[anchor_pos];
|
||||
if (t->nodestart == tag->nodestart)
|
||||
break;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* Should not happen, because we should always find the anchor. */
|
||||
if (!file_buffer->tags[anchor_pos])
|
||||
return NULL;
|
||||
|
||||
|
||||
/* We've found the anchor. Look backwards in the tag table for the
|
||||
preceding node (we're assuming the tags are given in order),
|
||||
skipping over any preceding anchors. */
|
||||
@ -889,20 +890,20 @@ find_node_of_anchor (file_buffer, tag)
|
||||
node_pos >= 0 && file_buffer->tags[node_pos]->nodelen == 0;
|
||||
node_pos--)
|
||||
;
|
||||
|
||||
|
||||
/* An info file with an anchor before any nodes is pathological, but
|
||||
it's possible, so don't crash. */
|
||||
if (node_pos < 0)
|
||||
return NULL;
|
||||
|
||||
|
||||
/* We have the tag for the node that contained the anchor tag. */
|
||||
node_tag = file_buffer->tags[node_pos];
|
||||
node_tag = file_buffer->tags[node_pos];
|
||||
|
||||
/* Look up the node name in the tag table to get the actual node.
|
||||
This is a recursive call, but it can't recurse again, because we
|
||||
call it with a real node. */
|
||||
node = info_node_of_file_buffer_tags (file_buffer, node_tag->nodename);
|
||||
|
||||
|
||||
/* Start displaying the node at the anchor position. */
|
||||
if (node)
|
||||
{ /* The nodestart for real nodes is three characters before the `F'
|
||||
@ -921,11 +922,11 @@ find_node_of_anchor (file_buffer, tag)
|
||||
the screen), which looks wrong. */
|
||||
if (node->display_pos >= node->nodelen)
|
||||
node->display_pos = node->nodelen - 1;
|
||||
|
||||
|
||||
/* Don't search in the node for the xref text, it's not there. */
|
||||
node->flags |= N_FromAnchor;
|
||||
}
|
||||
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
@ -944,8 +945,8 @@ info_node_of_file_buffer_tags (file_buffer, nodename)
|
||||
if (!file_buffer->tags) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (i = 0; (tag = file_buffer->tags[i]); i++)
|
||||
|
||||
for (i = 0; (tag = file_buffer->tags[i]); i++)
|
||||
if (strcmp (nodename, tag->nodename) == 0)
|
||||
{
|
||||
FILE_BUFFER *subfile = info_find_file_internal (tag->filename,
|
||||
@ -1036,7 +1037,7 @@ info_node_of_file_buffer_tags (file_buffer, nodename)
|
||||
free (node);
|
||||
node = find_node_of_anchor (file_buffer, tag);
|
||||
}
|
||||
|
||||
|
||||
else
|
||||
{
|
||||
/* Since we know the length of this node, we have already
|
||||
@ -1098,7 +1099,7 @@ forget_info_file (filename)
|
||||
if (!info_loaded_files)
|
||||
return;
|
||||
|
||||
for (i = 0; file_buffer = info_loaded_files[i]; i++)
|
||||
for (i = 0; (file_buffer = info_loaded_files[i]); i++)
|
||||
if (FILENAME_CMP (filename, file_buffer->filename) == 0
|
||||
|| FILENAME_CMP (filename, file_buffer->fullpath) == 0)
|
||||
{
|
||||
@ -1107,7 +1108,7 @@ forget_info_file (filename)
|
||||
|
||||
if (file_buffer->contents)
|
||||
free (file_buffer->contents);
|
||||
|
||||
|
||||
/* free_file_buffer_tags () also kills the subfiles list, since
|
||||
the subfiles list is only of use in conjunction with tags. */
|
||||
free_file_buffer_tags (file_buffer);
|
||||
|
@ -1,8 +1,8 @@
|
||||
/* session.c -- user windowing interface to Info.
|
||||
$Id: session.c,v 1.3 2003/01/24 19:05:53 karl Exp $
|
||||
$Id: session.c,v 1.8 2003/03/22 17:41:16 karl Exp $
|
||||
|
||||
Copyright (C) 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free
|
||||
Software Foundation, Inc.
|
||||
Copyright (C) 1993, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
|
||||
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
|
||||
@ -2008,6 +2008,73 @@ DECLARE_INFO_COMMAND (info_menu_digit, _("Select this menu item"))
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Return a pointer to the xref in XREF_LIST that is nearest to POS, or
|
||||
NULL if XREF_LIST is empty. That is, if POS is within any of the
|
||||
given xrefs, return that one. Otherwise, return the one with the
|
||||
nearest beginning or end. If there are two that are equidistant,
|
||||
prefer the one forward. The return is in newly-allocated memory,
|
||||
since the caller frees it.
|
||||
|
||||
This is called from info_menu_or_ref_item with XREF_LIST being all
|
||||
the xrefs in the node, and POS being point. The ui function that
|
||||
starts it all off is select-reference-this-line.
|
||||
|
||||
This is not the same logic as in info.el. Info-get-token prefers
|
||||
searching backwards to searching forwards, and has a hardwired search
|
||||
limit of 200 chars (in Emacs 21.2). */
|
||||
|
||||
static REFERENCE **
|
||||
nearest_xref (xref_list, pos)
|
||||
REFERENCE **xref_list;
|
||||
long pos;
|
||||
{
|
||||
int this_xref;
|
||||
int nearest = -1;
|
||||
long best_delta = -1;
|
||||
|
||||
for (this_xref = 0; xref_list[this_xref]; this_xref++)
|
||||
{
|
||||
long delta;
|
||||
REFERENCE *xref = xref_list[this_xref];
|
||||
if (xref->start <= pos && pos <= xref->end)
|
||||
{ /* POS is within this xref, we're done */
|
||||
nearest = this_xref;
|
||||
break;
|
||||
}
|
||||
|
||||
/* See how far POS is from this xref. Take into account the
|
||||
`*Note' that begins the xref, since as far as the user is
|
||||
concerned, that's where it starts. */
|
||||
delta = MIN (labs (pos - (xref->start - strlen (INFO_XREF_LABEL))),
|
||||
labs (pos - xref->end));
|
||||
|
||||
/* It's the <= instead of < that makes us choose the forward xref
|
||||
of POS if two are equidistant. Of course, because of all the
|
||||
punctuation surrounding xrefs, it's not necessarily obvious
|
||||
where one ends. */
|
||||
if (delta <= best_delta || best_delta < 0)
|
||||
{
|
||||
nearest = this_xref;
|
||||
best_delta = delta;
|
||||
}
|
||||
}
|
||||
|
||||
/* Maybe there was no list to search through. */
|
||||
if (nearest < 0)
|
||||
return NULL;
|
||||
|
||||
/* Ok, we have a nearest xref, make a list of it. */
|
||||
{
|
||||
REFERENCE **ret = xmalloc (sizeof (REFERENCE *) * 2);
|
||||
ret[0] = info_copy_reference (xref_list[nearest]);
|
||||
ret[1] = NULL;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Read a menu or followed reference from the user defaulting to the
|
||||
reference found on the current line, and select that node. The
|
||||
reading is done with completion. BUILDER is the function used
|
||||
@ -2021,10 +2088,10 @@ info_menu_or_ref_item (window, count, key, builder, ask_p)
|
||||
REFERENCE **(*builder) ();
|
||||
int ask_p;
|
||||
{
|
||||
REFERENCE **menu, *entry, *defentry = (REFERENCE *)NULL;
|
||||
char *line;
|
||||
|
||||
menu = (*builder) (window->node);
|
||||
REFERENCE *entry;
|
||||
REFERENCE *defentry = NULL;
|
||||
REFERENCE **menu = (*builder) (window->node);
|
||||
|
||||
if (!menu)
|
||||
{
|
||||
@ -2038,10 +2105,8 @@ info_menu_or_ref_item (window, count, key, builder, ask_p)
|
||||
/* Default the selected reference to the one which is on the line that
|
||||
point is in. */
|
||||
{
|
||||
REFERENCE **refs = (REFERENCE **)NULL;
|
||||
int point_line;
|
||||
|
||||
point_line = window_line_of_point (window);
|
||||
REFERENCE **refs = NULL;
|
||||
int point_line = window_line_of_point (window);
|
||||
|
||||
if (point_line != -1)
|
||||
{
|
||||
@ -2070,45 +2135,35 @@ info_menu_or_ref_item (window, count, key, builder, ask_p)
|
||||
refs = manpage_xrefs_in_binding (window->node, &binding);
|
||||
else
|
||||
#endif /* HANDLE_MAN_PAGES */
|
||||
{
|
||||
refs = info_xrefs (&binding);
|
||||
if (!refs && point_line > 0)
|
||||
{
|
||||
/* People get annoyed that Info cannot find an xref
|
||||
which starts on a previous line and ends on this
|
||||
one. So if we fail to find a reference on this
|
||||
line, let's try the one before. */
|
||||
binding.start =
|
||||
window->line_starts[point_line - 1] - binding.buffer;
|
||||
refs = info_xrefs (&binding);
|
||||
}
|
||||
}
|
||||
refs = nearest_xref (menu, window->point);
|
||||
}
|
||||
|
||||
if (refs)
|
||||
if (refs && refs[0])
|
||||
{
|
||||
if ((strcmp (refs[0]->label, "Menu") != 0) ||
|
||||
(builder == info_xrefs_of_node))
|
||||
if (strcmp (refs[0]->label, "Menu") != 0
|
||||
|| builder == info_xrefs_of_node)
|
||||
{
|
||||
int which = 0;
|
||||
|
||||
/* Find the closest reference to point. */
|
||||
if (builder == info_xrefs_of_node)
|
||||
/* For xrefs, find the closest reference to point,
|
||||
unless we only have one reference (as we will if
|
||||
we've called nearest_xref above). It would be better
|
||||
to have only one piece of code, but the conditions
|
||||
when we call this are tangled. */
|
||||
if (builder == info_xrefs_of_node && refs[1])
|
||||
{
|
||||
int closest = -1;
|
||||
|
||||
for (; refs[which]; which++)
|
||||
{
|
||||
if ((window->point >= refs[which]->start) &&
|
||||
(window->point <= refs[which]->end))
|
||||
if (window->point >= refs[which]->start
|
||||
&& window->point <= refs[which]->end)
|
||||
{
|
||||
closest = which;
|
||||
break;
|
||||
}
|
||||
else if (window->point < refs[which]->start)
|
||||
{
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (closest == -1)
|
||||
which--;
|
||||
@ -2138,9 +2193,9 @@ info_menu_or_ref_item (window, count, key, builder, ask_p)
|
||||
|
||||
/* Build the prompt string. */
|
||||
if (defentry)
|
||||
prompt = (char *)xmalloc (20 + strlen (defentry->label));
|
||||
prompt = (char *)xmalloc (99 + strlen (defentry->label));
|
||||
else
|
||||
prompt = (char *)xmalloc (20);
|
||||
prompt = (char *)xmalloc (99);
|
||||
|
||||
if (builder == info_menu_of_node)
|
||||
{
|
||||
@ -2433,7 +2488,8 @@ NODE *
|
||||
info_follow_menus (initial_node, menus, errstr, errarg1, errarg2)
|
||||
NODE *initial_node;
|
||||
char **menus;
|
||||
char **errstr, **errarg1, **errarg2;
|
||||
const char **errstr;
|
||||
char **errarg1, **errarg2;
|
||||
{
|
||||
NODE *node = NULL;
|
||||
*errstr = *errarg1 = *errarg2 = NULL;
|
||||
@ -2796,7 +2852,7 @@ program_name_from_file_name (file_name)
|
||||
DECLARE_INFO_COMMAND (info_goto_invocation_node,
|
||||
_("Find the node describing program invocation"))
|
||||
{
|
||||
char *invocation_prompt = _("Find Invocation node of [%s]: ");
|
||||
const char *invocation_prompt = _("Find Invocation node of [%s]: ");
|
||||
char *program_name, *line;
|
||||
char *default_program_name, *prompt, *file_name;
|
||||
NODE *top_node;
|
||||
@ -3848,7 +3904,8 @@ show_isearch_prompt (dir, string, failing_p)
|
||||
int failing_p;
|
||||
{
|
||||
register int i;
|
||||
char *prefix, *prompt, *p_rep;
|
||||
const char *prefix;
|
||||
char *prompt, *p_rep;
|
||||
int prompt_len, p_rep_index, p_rep_size;
|
||||
|
||||
if (dir < 0)
|
||||
@ -3877,8 +3934,10 @@ show_isearch_prompt (dir, string, failing_p)
|
||||
p_rep_index += strlen (rep);
|
||||
}
|
||||
|
||||
prompt_len = strlen (prefix) + p_rep_index + 20;
|
||||
prompt = (char *)xmalloc (prompt_len);
|
||||
prompt_len = strlen (prefix) + p_rep_index + 1;
|
||||
if (failing_p)
|
||||
prompt_len += strlen (_("Failing "));
|
||||
prompt = xmalloc (prompt_len);
|
||||
sprintf (prompt, "%s%s%s", failing_p ? _("Failing ") : "", prefix,
|
||||
p_rep ? p_rep : "");
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
/* window.c -- windows in Info.
|
||||
$Id: window.c,v 1.1 2002/08/25 23:38:38 karl Exp $
|
||||
$Id: window.c,v 1.2 2003/02/11 16:39:06 karl Exp $
|
||||
|
||||
Copyright (C) 1993, 1997, 1998, 2001, 2002 Free Software Foundation,
|
||||
Inc.
|
||||
Copyright (C) 1993, 1997, 1998, 2001, 2002, 2003 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
|
||||
@ -1144,7 +1144,7 @@ window_make_modeline (window)
|
||||
int modeline_len = 0;
|
||||
char *parent = NULL, *filename = "*no file*";
|
||||
char *nodename = "*no node*";
|
||||
char *update_message = NULL;
|
||||
const char *update_message = NULL;
|
||||
NODE *node = window->node;
|
||||
|
||||
if (node)
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* system.h: system-dependent declarations; include this first.
|
||||
$Id: system.h,v 1.4 2002/10/31 13:44:06 karl Exp $
|
||||
$Id: system.h,v 1.5 2003/03/22 17:40:39 karl Exp $
|
||||
|
||||
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software
|
||||
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@ -258,4 +258,15 @@ extern void xexit ();
|
||||
/* For convenience. */
|
||||
#define STREQ(s1,s2) (strcmp (s1, s2) == 0)
|
||||
|
||||
/* We don't need anything fancy. If we did need something fancy, gnulib
|
||||
has it. */
|
||||
#ifdef MIN
|
||||
#undef MIN
|
||||
#endif
|
||||
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
||||
#ifdef MAX
|
||||
#undef MAX
|
||||
#endif
|
||||
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
||||
|
||||
#endif /* TEXINFO_SYSTEM_H */
|
||||
|
@ -18,6 +18,8 @@
|
||||
#ifndef XALLOC_H_
|
||||
# define XALLOC_H_
|
||||
|
||||
# include <stddef.h>
|
||||
|
||||
# ifndef PARAMS
|
||||
# if defined PROTOTYPES || (defined __STDC__ && __STDC__)
|
||||
# define PARAMS(Args) Args
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* xexit.c -- exit with attention to return values and closing stdout.
|
||||
$Id: xexit.c,v 1.1 2002/08/25 23:38:38 karl Exp $
|
||||
$Id: xexit.c,v 1.4 2003/05/19 13:10:59 karl Exp $
|
||||
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999, 2003 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
|
||||
@ -41,26 +41,28 @@
|
||||
#endif /* not EXIT_SUCCESS */
|
||||
|
||||
|
||||
/* Flush stdout first, exit if failure. Otherwise, if EXIT_STATUS is
|
||||
zero, exit successfully, else unsuccessfully. */
|
||||
|
||||
/* Flush stdout first, exit if failure (therefore, xexit should be
|
||||
called to exit every program, not just `return' from main).
|
||||
Otherwise, if EXIT_STATUS is zero, exit successfully, else
|
||||
unsuccessfully. */
|
||||
|
||||
void
|
||||
xexit (exit_status)
|
||||
int exit_status;
|
||||
{
|
||||
if (ferror (stdout))
|
||||
{
|
||||
fprintf (stderr, "ferror on stdout");
|
||||
fputs (_("ferror on stdout\n"), stderr);
|
||||
exit_status = 1;
|
||||
}
|
||||
else if (fflush (stdout) != 0)
|
||||
{
|
||||
fprintf (stderr, "fflush error on stdout");
|
||||
fputs (_("fflush error on stdout\n"), stderr);
|
||||
exit_status = 1;
|
||||
}
|
||||
|
||||
|
||||
exit_status = exit_status == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
|
||||
|
||||
exit (exit_status);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* cmds.c -- Texinfo commands.
|
||||
$Id: cmds.c,v 1.16 2003/01/12 15:18:24 karl Exp $
|
||||
$Id: cmds.c,v 1.18 2003/04/21 01:02:39 karl Exp $
|
||||
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software
|
||||
Foundation, Inc.
|
||||
@ -56,7 +56,8 @@ void
|
||||
cm_anchor (), cm_node (), cm_menu (), cm_xref (), cm_ftable (),
|
||||
cm_vtable (), cm_pxref (), cm_inforef (), cm_uref (), cm_email (),
|
||||
cm_quotation (), cm_display (), cm_smalldisplay (), cm_itemize (),
|
||||
cm_enumerate (), cm_tab (), cm_table (), cm_itemx (), cm_noindent (),
|
||||
cm_enumerate (), cm_tab (), cm_table (), cm_itemx (),
|
||||
cm_noindent (), cm_indent (),
|
||||
cm_setfilename (), cm_br (), cm_sp (), cm_page (), cm_group (),
|
||||
cm_center (), cm_ref (), cm_include (), cm_bye (), cm_item (), cm_end (),
|
||||
cm_kindex (), cm_cindex (), cm_findex (), cm_pindex (), cm_vindex (),
|
||||
@ -66,7 +67,8 @@ void
|
||||
cm_defcodeindex (), cm_result (), cm_expansion (), cm_equiv (),
|
||||
cm_print (), cm_error (), cm_point (), cm_today (), cm_flushleft (),
|
||||
cm_flushright (), cm_finalout (), cm_cartouche (), cm_detailmenu (),
|
||||
cm_multitable (), cm_settitle (), cm_titlefont (), cm_titlepage (), cm_tie (), cm_tt (),
|
||||
cm_multitable (), cm_settitle (), cm_titlefont (), cm_titlepage (),
|
||||
cm_tie (), cm_tt (),
|
||||
cm_verbatim (), cm_verbatiminclude ();
|
||||
|
||||
/* Conditionals. */
|
||||
@ -74,7 +76,10 @@ void cm_set (), cm_clear (), cm_ifset (), cm_ifclear ();
|
||||
void cm_value (), cm_ifeq ();
|
||||
|
||||
/* Options. */
|
||||
static void cm_paragraphindent (), cm_exampleindent ();
|
||||
static void
|
||||
cm_exampleindent (),
|
||||
cm_firstparagraphindent (),
|
||||
cm_paragraphindent ();
|
||||
|
||||
/* Internals. */
|
||||
static void cm_obsolete ();
|
||||
@ -94,6 +99,7 @@ COMMAND command_table[] = {
|
||||
{ ",", cm_accent_cedilla, MAYBE_BRACE_ARGS },
|
||||
{ "-", cm_no_op, NO_BRACE_ARGS },
|
||||
{ ".", insert_self, NO_BRACE_ARGS },
|
||||
{ "/", cm_no_op, NO_BRACE_ARGS },
|
||||
{ ":", cm_no_op, NO_BRACE_ARGS },
|
||||
{ "=", cm_accent, MAYBE_BRACE_ARGS },
|
||||
{ "?", insert_self, NO_BRACE_ARGS },
|
||||
@ -219,6 +225,7 @@ COMMAND command_table[] = {
|
||||
{ "file", cm_code, BRACE_ARGS },
|
||||
{ "finalout", cm_no_op, NO_BRACE_ARGS },
|
||||
{ "findex", cm_findex, NO_BRACE_ARGS },
|
||||
{ "firstparagraphindent", cm_firstparagraphindent, NO_BRACE_ARGS },
|
||||
{ "flushleft", cm_flushleft, NO_BRACE_ARGS },
|
||||
{ "flushright", cm_flushright, NO_BRACE_ARGS },
|
||||
{ "footnote", cm_footnote, NO_BRACE_ARGS}, /* self-arg eater */
|
||||
@ -247,6 +254,7 @@ COMMAND command_table[] = {
|
||||
{ "ignore", command_name_condition, NO_BRACE_ARGS },
|
||||
{ "image", cm_image, BRACE_ARGS },
|
||||
{ "include", cm_include, NO_BRACE_ARGS },
|
||||
{ "indent", cm_indent, NO_BRACE_ARGS },
|
||||
{ "inforef", cm_inforef, BRACE_ARGS },
|
||||
{ "insertcopying", cm_insert_copying, NO_BRACE_ARGS },
|
||||
{ "item", cm_item, NO_BRACE_ARGS },
|
||||
@ -268,7 +276,7 @@ COMMAND command_table[] = {
|
||||
{ "need", cm_ignore_line, NO_BRACE_ARGS },
|
||||
{ "node", cm_node, NO_BRACE_ARGS },
|
||||
{ "noindent", cm_noindent, NO_BRACE_ARGS },
|
||||
{ "noindent", cm_novalidate, NO_BRACE_ARGS },
|
||||
{ "novalidate", cm_novalidate, NO_BRACE_ARGS },
|
||||
{ "nwnode", cm_node, NO_BRACE_ARGS },
|
||||
{ "o", cm_special_char, BRACE_ARGS },
|
||||
{ "oddfooting", cm_ignore_line, NO_BRACE_ARGS },
|
||||
@ -985,8 +993,8 @@ cm_obsolete (arg, start, end)
|
||||
}
|
||||
|
||||
|
||||
/* This says to inhibit the indentation of the next paragraph, but
|
||||
not of following paragraphs. */
|
||||
/* Inhibit the indentation of the next paragraph, but not of following
|
||||
paragraphs. */
|
||||
void
|
||||
cm_noindent ()
|
||||
{
|
||||
@ -994,10 +1002,17 @@ cm_noindent ()
|
||||
inhibit_paragraph_indentation = -1;
|
||||
}
|
||||
|
||||
/* Force indentation of the next paragraph. */
|
||||
void
|
||||
cm_indent ()
|
||||
{
|
||||
inhibit_paragraph_indentation = 0;
|
||||
}
|
||||
|
||||
/* I don't know exactly what to do with this. Should I allow
|
||||
someone to switch filenames in the middle of output? Since the
|
||||
file could be partially written, this doesn't seem to make sense.
|
||||
Another option: ignore it, since they don't *really* want to
|
||||
Another option: ignore it, since they don't really want to
|
||||
switch files. Finally, complain, or at least warn. It doesn't
|
||||
really matter, anyway, since this doesn't get executed. */
|
||||
void
|
||||
@ -1402,6 +1417,7 @@ cm_paragraphindent ()
|
||||
free (arg);
|
||||
}
|
||||
|
||||
|
||||
/* @exampleindent: change indentation of example-like environments. */
|
||||
static int
|
||||
set_default_indentation_increment (string)
|
||||
@ -1427,3 +1443,31 @@ cm_exampleindent ()
|
||||
|
||||
free (arg);
|
||||
}
|
||||
|
||||
|
||||
/* @firstparagraphindent: suppress indentation in first paragraphs after
|
||||
headings. */
|
||||
static int
|
||||
set_firstparagraphindent (string)
|
||||
char *string;
|
||||
{
|
||||
if (STREQ (string, "insert") || STREQ (string, _("insert")))
|
||||
do_first_par_indent = 1;
|
||||
else if (STREQ (string, "none") || STREQ (string, _("none")))
|
||||
do_first_par_indent = 0;
|
||||
else
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
cm_firstparagraphindent ()
|
||||
{
|
||||
char *arg;
|
||||
|
||||
get_rest_of_line (1, &arg);
|
||||
if (set_firstparagraphindent (arg) != 0)
|
||||
line_error (_("Bad argument to %c%s"), COMMAND_PREFIX, command);
|
||||
|
||||
free (arg);
|
||||
}
|
||||
|
@ -1,7 +1,8 @@
|
||||
/* defun.c -- @defun and friends.
|
||||
$Id: defun.c,v 1.3 2002/11/11 00:57:49 feloy Exp $
|
||||
$Id: defun.c,v 1.6 2003/05/09 23:51:10 karl Exp $
|
||||
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 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
|
||||
@ -331,7 +332,8 @@ defun_internal (type, x_p)
|
||||
{
|
||||
enum insertion_type base_type;
|
||||
char **defun_args, **scan_args;
|
||||
char *category, *defined_name, *type_name, *type_name2;
|
||||
const char *category;
|
||||
char *defined_name, *type_name, *type_name2;
|
||||
|
||||
{
|
||||
char *line;
|
||||
@ -441,7 +443,7 @@ defun_internal (type, x_p)
|
||||
if (*scan_args && **scan_args && **scan_args == '(')
|
||||
warning ("`%c' follows defined name `%s' instead of whitespace",
|
||||
**scan_args, defined_name);
|
||||
|
||||
|
||||
if (!x_p)
|
||||
begin_insertion (type);
|
||||
|
||||
@ -559,7 +561,7 @@ defun_internal (type, x_p)
|
||||
break;
|
||||
case deftypefn:
|
||||
case deftypevr:
|
||||
execute_string ("%s", type_name);
|
||||
execute_string ("%s ", type_name);
|
||||
xml_insert_element (FUNCTION, START);
|
||||
execute_string ("%s", defined_name);
|
||||
xml_insert_element (FUNCTION, END);
|
||||
@ -567,7 +569,7 @@ defun_internal (type, x_p)
|
||||
case deftypemethod:
|
||||
case deftypeop:
|
||||
case deftypeivar:
|
||||
execute_string ("%s", type_name2);
|
||||
execute_string ("%s ", type_name2);
|
||||
xml_insert_element (FUNCTION, START);
|
||||
execute_string ("%s", defined_name);
|
||||
xml_insert_element (FUNCTION, END);
|
||||
@ -713,27 +715,26 @@ defun_internal (type, x_p)
|
||||
void
|
||||
cm_defun ()
|
||||
{
|
||||
int x_p;
|
||||
enum insertion_type type;
|
||||
char *temp = xstrdup (command);
|
||||
|
||||
x_p = (command[strlen (command) - 1] == 'x');
|
||||
char *base_command = xstrdup (command); /* command with any `x' removed */
|
||||
int x_p = (command[strlen (command) - 1] == 'x');
|
||||
|
||||
if (x_p)
|
||||
temp[strlen (temp) - 1] = 0;
|
||||
base_command[strlen (base_command) - 1] = 0;
|
||||
|
||||
type = find_type_from_name (temp);
|
||||
free (temp);
|
||||
type = find_type_from_name (base_command);
|
||||
|
||||
/* If we are adding to an already existing insertion, then make sure
|
||||
that we are already in an insertion of type TYPE. */
|
||||
if (x_p && (!insertion_level || insertion_stack->insertion != type))
|
||||
{
|
||||
line_error (_("Must be in `%s' insertion to use `%sx'"),
|
||||
command, command);
|
||||
line_error (_("Must be in `@%s' environment to use `@%s'"),
|
||||
base_command, command);
|
||||
discard_until ("\n");
|
||||
return;
|
||||
}
|
||||
else
|
||||
defun_internal (type, x_p);
|
||||
|
||||
defun_internal (type, x_p);
|
||||
free (base_command);
|
||||
}
|
||||
|
@ -1,7 +1,8 @@
|
||||
/* files.c -- file-related functions for makeinfo.
|
||||
$Id: files.c,v 1.1 2002/08/25 23:38:38 karl Exp $
|
||||
$Id: files.c,v 1.3 2003/03/06 14:05:30 karl Exp $
|
||||
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 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
|
||||
@ -82,7 +83,7 @@ extract_colon_unit (string, index)
|
||||
When found, return the stat () info for FILENAME in FINFO.
|
||||
If PATH is NULL, only the current directory is searched.
|
||||
If the file could not be found, return a NULL pointer. */
|
||||
static char *
|
||||
char *
|
||||
get_file_info_in_path (filename, path, finfo)
|
||||
char *filename, *path;
|
||||
struct stat *finfo;
|
||||
@ -322,9 +323,7 @@ filename_part (filename)
|
||||
#ifdef REMOVE_OUTPUT_EXTENSIONS
|
||||
/* See if there is an extension to remove. If so, remove it. */
|
||||
{
|
||||
char *temp;
|
||||
|
||||
temp = strrchr (basename, '.');
|
||||
char *temp = strrchr (basename, '.');
|
||||
if (temp)
|
||||
*temp = 0;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* files.h -- declarations for files.c.
|
||||
$Id: files.h,v 1.1 2002/08/25 23:38:38 karl Exp $
|
||||
$Id: files.h,v 1.2 2003/03/06 14:05:30 karl Exp $
|
||||
|
||||
Copyright (C) 1998, 2002 Free Software Foundation, Inc.
|
||||
|
||||
@ -36,6 +36,7 @@ extern FSTACK *filestack;
|
||||
|
||||
extern void pushfile (), popfile ();
|
||||
extern void flush_file_stack ();
|
||||
extern char *get_file_info_in_path ();
|
||||
extern char *find_and_load ();
|
||||
extern char *output_name_from_input_name ();
|
||||
extern char *expand_filename ();
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* html.c -- html-related utilities.
|
||||
$Id: html.c,v 1.8 2002/11/04 22:14:40 karl Exp $
|
||||
$Id: html.c,v 1.18 2003/06/02 12:32:29 karl Exp $
|
||||
|
||||
Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999, 2000, 2001, 2002, 2003 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
|
||||
@ -26,14 +26,17 @@
|
||||
|
||||
HSTACK *htmlstack = NULL;
|
||||
|
||||
static char *process_css_file (/* char * */);
|
||||
|
||||
/* See html.h. */
|
||||
int html_output_head_p = 0;
|
||||
int html_title_written = 0;
|
||||
|
||||
|
||||
void
|
||||
html_output_head ()
|
||||
{
|
||||
static char *html_title = NULL;
|
||||
static const char *html_title = NULL;
|
||||
|
||||
if (html_output_head_p)
|
||||
return;
|
||||
@ -49,7 +52,7 @@ html_output_head ()
|
||||
add_word ("<meta http-equiv=\"Content-Type\" content=\"text/html");
|
||||
if (document_encoding_code != no_encoding)
|
||||
add_word_args ("; charset=%s",
|
||||
encoding_table[document_encoding_code].ecname);
|
||||
encoding_table[document_encoding_code].encname);
|
||||
add_word ("\">\n");
|
||||
|
||||
if (!document_description)
|
||||
@ -59,8 +62,12 @@ html_output_head ()
|
||||
document_description);
|
||||
add_word_args ("<meta name=\"generator\" content=\"makeinfo %s\">\n",
|
||||
VERSION);
|
||||
#if 0
|
||||
/* let's not do this now, since it causes mozilla to put up a
|
||||
navigation bar. */
|
||||
add_word ("<link href=\"http://www.gnu.org/software/texinfo/\" \
|
||||
rel=\"generator-home\">\n");
|
||||
#endif
|
||||
|
||||
if (copying_text)
|
||||
{ /* copying_text has already been fully expanded in
|
||||
@ -73,6 +80,44 @@ rel=\"generator-home\">\n");
|
||||
insert_string ("-->\n");
|
||||
}
|
||||
|
||||
/* Put the style definitions in a comment for the sake of browsers
|
||||
that don't support <style>. */
|
||||
add_word ("<meta http-equiv=\"Content-Style-Type\" content=\"text/css\">\n");
|
||||
add_word ("<style type=\"text/css\"><!--\n");
|
||||
|
||||
{
|
||||
char *css_inline = NULL;
|
||||
|
||||
if (css_include)
|
||||
/* This writes out any @import commands from the --css-file,
|
||||
and returns any actual css code following the imports. */
|
||||
css_inline = process_css_file (css_include);
|
||||
|
||||
/* This seems cleaner than adding <br>'s at the end of each line for
|
||||
these "roman" displays. It's hardly the end of the world if the
|
||||
browser doesn't do <style>s, in any case; they'll just come out in
|
||||
typewriter. */
|
||||
#define CSS_FONT_INHERIT "font-family:inherit"
|
||||
add_word_args (" pre.display { %s }\n", CSS_FONT_INHERIT);
|
||||
add_word_args (" pre.format { %s }\n", CSS_FONT_INHERIT);
|
||||
|
||||
/* Alternatively, we could do <font size=-1> in insertion.c, but this
|
||||
way makes it easier to override. */
|
||||
#define CSS_FONT_SMALLER "font-size:smaller"
|
||||
add_word_args (" pre.smalldisplay { %s; %s }\n", CSS_FONT_INHERIT,
|
||||
CSS_FONT_SMALLER);
|
||||
add_word_args (" pre.smallformat { %s; %s }\n", CSS_FONT_INHERIT,
|
||||
CSS_FONT_SMALLER);
|
||||
add_word_args (" pre.smallexample { %s }\n", CSS_FONT_SMALLER);
|
||||
add_word_args (" pre.smalllisp { %s }\n", CSS_FONT_SMALLER);
|
||||
|
||||
/* Write out any css code from the user's --css-file. */
|
||||
if (css_inline)
|
||||
add_word (css_inline);
|
||||
|
||||
add_word ("--></style>\n");
|
||||
}
|
||||
|
||||
add_word ("</head>\n<body>\n");
|
||||
|
||||
if (title && !html_title_written && titlepage_cmd_present)
|
||||
@ -82,6 +127,158 @@ rel=\"generator-home\">\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Append CHAR to BUFFER, (re)allocating as necessary. We don't handle
|
||||
null characters. */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned size; /* allocated */
|
||||
unsigned length; /* used */
|
||||
char *buffer;
|
||||
} buffer_type;
|
||||
|
||||
|
||||
static buffer_type *
|
||||
init_buffer ()
|
||||
{
|
||||
buffer_type *buf = xmalloc (sizeof (buffer_type));
|
||||
buf->length = 0;
|
||||
buf->size = 0;
|
||||
buf->buffer = NULL;
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
append_char (buf, c)
|
||||
buffer_type *buf;
|
||||
int c;
|
||||
{
|
||||
buf->length++;
|
||||
if (buf->length >= buf->size)
|
||||
{
|
||||
buf->size += 100;
|
||||
buf->buffer = xrealloc (buf->buffer, buf->size);
|
||||
}
|
||||
buf->buffer[buf->length - 1] = c;
|
||||
buf->buffer[buf->length] = 0;
|
||||
}
|
||||
|
||||
|
||||
/* Read the cascading style-sheet file FILENAME. Write out any @import
|
||||
commands, which must come first, by the definition of css. If the
|
||||
file contains any actual css code following the @imports, return it;
|
||||
else return NULL. */
|
||||
|
||||
static char *
|
||||
process_css_file (filename)
|
||||
char *filename;
|
||||
{
|
||||
int c, lastchar;
|
||||
FILE *f;
|
||||
buffer_type *import_text = init_buffer ();
|
||||
buffer_type *inline_text = init_buffer ();
|
||||
unsigned lineno = 1;
|
||||
enum { null_state, comment_state, import_state, inline_state } state
|
||||
= null_state, prev_state;
|
||||
|
||||
/* read from stdin if `-' is the filename. */
|
||||
f = STREQ (filename, "-") ? stdin : fopen (filename, "r");
|
||||
if (!f)
|
||||
{
|
||||
error (_("%s: could not open --css-file: %s"), progname, filename);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Read the file. The @import statements must come at the beginning,
|
||||
with only whitespace and comments allowed before any inline css code. */
|
||||
while ((c = getc (f)) >= 0)
|
||||
{
|
||||
if (c == '\n')
|
||||
lineno++;
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case null_state: /* between things */
|
||||
if (c == '@')
|
||||
{
|
||||
/* If there's some other @command, just call it an
|
||||
import, it's all the same to us. So don't bother
|
||||
looking for the `import'. */
|
||||
append_char (import_text, c);
|
||||
state = import_state;
|
||||
}
|
||||
else if (c == '/')
|
||||
{ /* possible start of a comment */
|
||||
int nextchar = getc (f);
|
||||
if (nextchar == '*')
|
||||
state = comment_state;
|
||||
else
|
||||
{
|
||||
ungetc (nextchar, f); /* wasn't a comment */
|
||||
state = inline_state;
|
||||
}
|
||||
}
|
||||
else if (isspace (c))
|
||||
; /* skip whitespace; maybe should use c_isspace? */
|
||||
|
||||
else
|
||||
/* not an @import, not a comment, not whitespace: we must
|
||||
have started the inline text. */
|
||||
state = inline_state;
|
||||
|
||||
if (state == inline_state)
|
||||
append_char (inline_text, c);
|
||||
|
||||
if (state != null_state)
|
||||
prev_state = null_state;
|
||||
break;
|
||||
|
||||
case comment_state:
|
||||
if (c == '/' && lastchar == '*')
|
||||
state = prev_state; /* end of comment */
|
||||
break; /* else ignore this comment char */
|
||||
|
||||
case import_state:
|
||||
append_char (import_text, c); /* include this import char */
|
||||
if (c == ';')
|
||||
{ /* done with @import */
|
||||
append_char (import_text, '\n'); /* make the output nice */
|
||||
state = null_state;
|
||||
prev_state = import_state;
|
||||
}
|
||||
break;
|
||||
|
||||
case inline_state:
|
||||
/* No harm in writing out comments, so don't bother parsing
|
||||
them out, just append everything. */
|
||||
append_char (inline_text, c);
|
||||
break;
|
||||
}
|
||||
|
||||
lastchar = c;
|
||||
}
|
||||
|
||||
/* Reached the end of the file. We should not be still in a comment. */
|
||||
if (state == comment_state)
|
||||
warning (_("%s:%d: --css-file ended in comment"), filename, lineno);
|
||||
|
||||
/* Write the @import text, if any. */
|
||||
if (import_text->buffer)
|
||||
{
|
||||
add_word (import_text->buffer);
|
||||
free (import_text->buffer);
|
||||
free (import_text);
|
||||
}
|
||||
|
||||
/* We're wasting the buffer struct memory, but so what. */
|
||||
return inline_text->buffer;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Escape HTML special characters in the string if necessary,
|
||||
returning a pointer to a possibly newly-allocated one. */
|
||||
@ -139,6 +336,8 @@ escape_string (string)
|
||||
free (string);
|
||||
return newstring - newlen;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Save current tag. */
|
||||
void
|
||||
@ -187,7 +386,7 @@ insert_html_tag (start_or_end, tag)
|
||||
}
|
||||
|
||||
if (start_or_end != START)
|
||||
pop_tag (tag);
|
||||
pop_tag ();
|
||||
|
||||
if (htmlstack)
|
||||
old_tag = htmlstack->tag;
|
||||
@ -228,6 +427,8 @@ insert_html_tag (start_or_end, tag)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Output an HTML <link> to the filename for NODE, including the
|
||||
other string as extra attributes. */
|
||||
void
|
||||
@ -240,7 +441,7 @@ add_link (nodename, attributes)
|
||||
add_word_args ("%s", attributes);
|
||||
add_word_args (" href=\"");
|
||||
add_anchor_name (nodename, 1);
|
||||
add_word ("\"></a>\n");
|
||||
add_word ("\">\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* index.c -- indexing for Texinfo.
|
||||
$Id: index.c,v 1.4 2002/11/26 22:54:31 karl Exp $
|
||||
$Id: index.c,v 1.8 2003/05/16 23:52:40 karl Exp $
|
||||
|
||||
Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2002, 2003 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
|
||||
@ -342,9 +342,14 @@ init_indices ()
|
||||
here; otherwise, when we try to define the pg index again
|
||||
just below, it will still point to cp. */
|
||||
undefindex (name_index_alist[i]->name);
|
||||
free (name_index_alist[i]->name);
|
||||
free (name_index_alist[i]);
|
||||
name_index_alist[i] = NULL;
|
||||
|
||||
/* undefindex sets all this to null in some cases. */
|
||||
if (name_index_alist[i])
|
||||
{
|
||||
free (name_index_alist[i]->name);
|
||||
free (name_index_alist[i]);
|
||||
name_index_alist[i] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -551,16 +556,16 @@ make_index_entries_unique (array, count)
|
||||
free (copy);
|
||||
}
|
||||
|
||||
/* Sort the index passed in INDEX, returning an array of
|
||||
pointers to elements. The array is terminated with a NULL
|
||||
pointer. We call qsort because it's supposed to be fast.
|
||||
I think this looks bad. */
|
||||
|
||||
/* Sort the index passed in INDEX, returning an array of pointers to
|
||||
elements. The array is terminated with a NULL pointer. */
|
||||
|
||||
INDEX_ELT **
|
||||
sort_index (index)
|
||||
INDEX_ELT *index;
|
||||
{
|
||||
INDEX_ELT **array;
|
||||
INDEX_ELT *temp = index;
|
||||
INDEX_ELT *temp;
|
||||
int count = 0;
|
||||
int save_line_number = line_number;
|
||||
char *save_input_filename = input_filename;
|
||||
@ -573,35 +578,36 @@ sort_index (index)
|
||||
characters @AE{} etc., to sort incorrectly. */
|
||||
html = 0;
|
||||
|
||||
while (temp)
|
||||
{
|
||||
count++;
|
||||
temp = temp->next;
|
||||
}
|
||||
|
||||
/* We have the length. Make an array. */
|
||||
|
||||
for (temp = index, count = 0; temp; temp = temp->next, count++)
|
||||
;
|
||||
/* We have the length, now we can allocate an array. */
|
||||
array = xmalloc ((count + 1) * sizeof (INDEX_ELT *));
|
||||
count = 0;
|
||||
temp = index;
|
||||
|
||||
while (temp)
|
||||
for (temp = index, count = 0; temp; temp = temp->next, count++)
|
||||
{
|
||||
array[count++] = temp;
|
||||
/* Allocate new memory for the return array, since parts of the
|
||||
original INDEX get freed. Otherwise, if the document calls
|
||||
@printindex twice on the same index, with duplicate entries,
|
||||
we'll have garbage the second time. There are cleaner ways to
|
||||
deal, but this will suffice for now. */
|
||||
array[count] = xmalloc (sizeof (INDEX_ELT));
|
||||
*(array[count]) = *(temp); /* struct assignment, hope it's ok */
|
||||
|
||||
/* Adjust next pointers to use the new memory. */
|
||||
if (count > 0)
|
||||
array[count-1]->next = array[count];
|
||||
|
||||
/* Set line number and input filename to the source line for this
|
||||
index entry, as this expansion finds any errors. */
|
||||
line_number = array[count - 1]->defining_line;
|
||||
input_filename = array[count - 1]->defining_file;
|
||||
line_number = array[count]->defining_line;
|
||||
input_filename = array[count]->defining_file;
|
||||
|
||||
/* If this particular entry should be printed as a "code" index,
|
||||
then expand it as @code{entry}, i.e. as in fixed-width font. */
|
||||
array[count-1]->entry = expansion (temp->entry_text,
|
||||
array[count-1]->code);
|
||||
|
||||
temp = temp->next;
|
||||
then expand it as @code{entry}, i.e., as in fixed-width font. */
|
||||
array[count]->entry = expansion (temp->entry_text, array[count]->code);
|
||||
}
|
||||
array[count] = NULL; /* terminate the array. */
|
||||
|
||||
line_number = save_line_number;
|
||||
input_filename = save_input_filename;
|
||||
html = save_html;
|
||||
@ -619,11 +625,19 @@ sort_index (index)
|
||||
if (lang_env && !STREQ (lang_env, "C") && !STREQ (lang_env, "POSIX"))
|
||||
index_compare_fn = strcoll;
|
||||
}
|
||||
#endif /* HAVE_STRCOLL */
|
||||
#endif /* HAVE_STRCOLL */
|
||||
|
||||
/* Sort the array. */
|
||||
qsort (array, count, sizeof (INDEX_ELT *), index_element_compare);
|
||||
|
||||
/* Remove duplicate entries. */
|
||||
make_index_entries_unique (array, count);
|
||||
|
||||
/* Replace the original index with the sorted one, in case the
|
||||
document wants to print it again. If the index wasn't empty. */
|
||||
if (index)
|
||||
*index = **array;
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
@ -667,11 +681,11 @@ cm_printindex ()
|
||||
free (index_name);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/* Do this before sorting, so execute_string is in the good environment */
|
||||
if (xml && docbook)
|
||||
xml_begin_index ();
|
||||
|
||||
|
||||
/* Do this before sorting, so execute_string in index_element_compare
|
||||
will give the same results as when we actually print. */
|
||||
printing_index = 1;
|
||||
@ -685,25 +699,25 @@ cm_printindex ()
|
||||
add_word_args ("<ul class=\"index-%s\" compact>", index_name);
|
||||
else if (!no_headers && !docbook)
|
||||
add_word ("* Menu:\n\n");
|
||||
|
||||
|
||||
me_inhibit_expansion++;
|
||||
|
||||
|
||||
/* This will probably be enough. */
|
||||
line_length = 100;
|
||||
line = xmalloc (line_length);
|
||||
|
||||
|
||||
for (item = 0; (index = array[item]); item++)
|
||||
{
|
||||
/* A pathological document might have an index entry outside of any
|
||||
node. Don't crash; try using the section name instead. */
|
||||
char *index_node = index->node;
|
||||
|
||||
const char *index_node = index->node;
|
||||
|
||||
line_number = index->defining_line;
|
||||
input_filename = index->defining_file;
|
||||
|
||||
|
||||
if ((!index_node || !*index_node) && html)
|
||||
index_node = toc_find_section_of_node (index_node);
|
||||
|
||||
|
||||
if (!index_node || !*index_node)
|
||||
{
|
||||
line_error (_("Entry for index `%s' outside of any node"),
|
||||
@ -711,7 +725,7 @@ cm_printindex ()
|
||||
if (html || !no_headers)
|
||||
index_node = _("(outside of any node)");
|
||||
}
|
||||
|
||||
|
||||
if (html)
|
||||
/* fixme: html: we should use specific index anchors pointing
|
||||
to the actual location of the indexed position (but then we
|
||||
@ -728,7 +742,7 @@ cm_printindex ()
|
||||
expand the original entry text here. */
|
||||
char *escaped_entry = xstrdup (index->entry_text);
|
||||
char *expanded_entry;
|
||||
|
||||
|
||||
/* expansion() doesn't HTML-escape the argument, so need
|
||||
to do it separately. */
|
||||
escaped_entry = escape_string (escaped_entry);
|
||||
@ -741,12 +755,14 @@ cm_printindex ()
|
||||
if (index->node && *index->node)
|
||||
{
|
||||
/* Make sure any non-macros in the node name are expanded. */
|
||||
char *expanded_index;
|
||||
|
||||
in_fixed_width_font++;
|
||||
index_node = expansion (index_node, 0);
|
||||
expanded_index = expansion (index_node, 0);
|
||||
in_fixed_width_font--;
|
||||
add_anchor_name (index_node, 1);
|
||||
add_word_args ("\">%s</a>", index_node);
|
||||
free (index_node);
|
||||
add_anchor_name (expanded_index, 1);
|
||||
add_word_args ("\">%s</a>", expanded_index);
|
||||
free (expanded_index);
|
||||
}
|
||||
else if (STREQ (index_node, _("(outside of any node)")))
|
||||
{
|
||||
@ -769,11 +785,11 @@ cm_printindex ()
|
||||
else
|
||||
{
|
||||
unsigned new_length = strlen (index->entry);
|
||||
|
||||
|
||||
if (new_length < 50) /* minimum length used below */
|
||||
new_length = 50;
|
||||
new_length += strlen (index_node) + 7; /* * : .\n\0 */
|
||||
|
||||
|
||||
if (new_length > line_length)
|
||||
{
|
||||
line_length = new_length;
|
||||
@ -800,7 +816,7 @@ cm_printindex ()
|
||||
index. Instead, output the number or name of the
|
||||
section that corresponds to that node. */
|
||||
char *section_name = toc_find_section_of_node (index_node);
|
||||
|
||||
|
||||
sprintf (line, "%-*s ", number_sections ? 50 : 1, index->entry);
|
||||
line[strlen (index->entry)] = ':';
|
||||
insert_string (line);
|
||||
@ -808,13 +824,13 @@ cm_printindex ()
|
||||
{
|
||||
int idx = 0;
|
||||
unsigned ref_len = strlen (section_name) + 30;
|
||||
|
||||
|
||||
if (ref_len > line_length)
|
||||
{
|
||||
line_length = ref_len;
|
||||
line = xrealloc (line, line_length);
|
||||
}
|
||||
|
||||
|
||||
if (number_sections)
|
||||
{
|
||||
while (section_name[idx]
|
||||
@ -835,7 +851,7 @@ cm_printindex ()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Prevent `output_paragraph' from growing to the size of the
|
||||
whole index. */
|
||||
flush_output ();
|
||||
@ -844,17 +860,16 @@ cm_printindex ()
|
||||
|
||||
free (line);
|
||||
free (index_name);
|
||||
|
||||
|
||||
me_inhibit_expansion--;
|
||||
|
||||
printing_index = 0;
|
||||
free (array);
|
||||
|
||||
close_single_paragraph ();
|
||||
filling_enabled = saved_filling_enabled;
|
||||
inhibit_paragraph_indentation = saved_inhibit_paragraph_indentation;
|
||||
input_filename = saved_input_filename;
|
||||
line_number = saved_line_number;
|
||||
|
||||
|
||||
if (html)
|
||||
add_word ("</ul>");
|
||||
else if (xml && docbook)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* insertion.c -- insertions for Texinfo.
|
||||
$Id: insertion.c,v 1.14 2003/01/02 23:46:29 karl Exp $
|
||||
$Id: insertion.c,v 1.21 2003/04/01 14:34:18 karl Exp $
|
||||
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software
|
||||
Foundation, Inc.
|
||||
@ -130,8 +130,21 @@ char *
|
||||
get_item_function ()
|
||||
{
|
||||
char *item_function;
|
||||
char *item_loc;
|
||||
|
||||
get_rest_of_line (0, &item_function);
|
||||
|
||||
/* If the document erroneously says
|
||||
@itemize @bullet @item foobar
|
||||
it's nicer to give an error up front than repeat `@bullet expected
|
||||
braces' until we get a segmentation fault. */
|
||||
item_loc = strstr (item_function, "@item");
|
||||
if (item_loc)
|
||||
{
|
||||
line_error (_("@item not allowed in argument to @itemize"));
|
||||
*item_loc = 0;
|
||||
}
|
||||
|
||||
/* If we hit the end of text in get_rest_of_line, backing up
|
||||
input pointer will cause the last character of the last line
|
||||
be pushed back onto the input, which is wrong. */
|
||||
@ -191,7 +204,7 @@ pop_insertion ()
|
||||
|
||||
/* Return a pointer to the print name of this
|
||||
enumerated type. */
|
||||
char *
|
||||
const char *
|
||||
insertion_type_pname (type)
|
||||
enum insertion_type type;
|
||||
{
|
||||
@ -643,8 +656,14 @@ begin_insertion (type)
|
||||
close_single_paragraph ();
|
||||
break;
|
||||
|
||||
/* Insertions that are no-ops in info, but do something in TeX. */
|
||||
case cartouche:
|
||||
if (html)
|
||||
add_word ("<table class=\"cartouche\" border=1><tr><td>\n");
|
||||
if (in_menu)
|
||||
no_discard++;
|
||||
break;
|
||||
|
||||
/* Insertions that are no-ops in info, but do something in TeX. */
|
||||
case ifclear:
|
||||
case ifhtml:
|
||||
case ifinfo:
|
||||
@ -845,7 +864,7 @@ end_insertion (type)
|
||||
|
||||
case menu:
|
||||
in_menu--; /* No longer hacking menus. */
|
||||
if (html)
|
||||
if (html && !no_headers)
|
||||
add_word ("</ul>\n");
|
||||
else if (!no_headers)
|
||||
close_insertion_paragraph ();
|
||||
@ -869,8 +888,13 @@ end_insertion (type)
|
||||
close_insertion_paragraph ();
|
||||
break;
|
||||
|
||||
case group:
|
||||
case cartouche:
|
||||
if (html)
|
||||
add_word ("</td></tr></table>\n");
|
||||
close_insertion_paragraph ();
|
||||
break;
|
||||
|
||||
case group:
|
||||
close_insertion_paragraph ();
|
||||
break;
|
||||
|
||||
@ -981,7 +1005,7 @@ discard_insertions (specials_ok)
|
||||
break;
|
||||
else
|
||||
{
|
||||
char *offender = insertion_type_pname (insertion_stack->insertion);
|
||||
const char *offender = insertion_type_pname (insertion_stack->insertion);
|
||||
|
||||
file_line_error (insertion_stack->filename,
|
||||
insertion_stack->line_number,
|
||||
@ -1643,9 +1667,10 @@ cm_item ()
|
||||
in this context, but I cannot find any way to force
|
||||
them all render exactly one blank line. */
|
||||
if (!itemx_flag
|
||||
&& strncmp ((char *) output_paragraph
|
||||
&& ((output_paragraph_offset < sizeof (dl_tag) + 1)
|
||||
|| strncmp ((char *) output_paragraph
|
||||
+ output_paragraph_offset - sizeof (dl_tag) + 1,
|
||||
dl_tag, sizeof (dl_tag) - 1) != 0)
|
||||
dl_tag, sizeof (dl_tag) - 1) != 0))
|
||||
add_word ("<br>");
|
||||
|
||||
add_word ("<dt>");
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* lang.c -- language-dependent support.
|
||||
$Id: lang.c,v 1.5 2002/11/12 18:48:52 feloy Exp $
|
||||
$Id: lang.c,v 1.8 2003/05/01 00:05:27 karl Exp $
|
||||
|
||||
Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999, 2000, 2001, 2002, 2003 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
|
||||
@ -31,12 +31,12 @@ encoding_code_type document_encoding_code = no_encoding;
|
||||
/* Current language code; default is English. */
|
||||
language_code_type language_code = en;
|
||||
|
||||
iso_map_type us_ascii_map [] = {{NULL, 0, 0}}; /* ASCII map is trivial */
|
||||
static iso_map_type us_ascii_map [] = {{NULL, 0, 0}}; /* ASCII map is trivial */
|
||||
|
||||
/* Translation table between HTML and ISO Codes. The last item is
|
||||
hopefully the Unicode. It might be possible that those Unicodes are
|
||||
not correct, cause I didn't check them. kama */
|
||||
iso_map_type iso8859_1_map [] = {
|
||||
static iso_map_type iso8859_1_map [] = {
|
||||
{ "nbsp", 0xA0, 0x00A0 },
|
||||
{ "iexcl", 0xA1, 0x00A1 },
|
||||
{ "cent", 0xA2, 0x00A2 },
|
||||
@ -86,7 +86,7 @@ iso_map_type iso8859_1_map [] = {
|
||||
{ "Iacute", 0xCD, 0x00CD },
|
||||
{ "Icirc", 0xCE, 0x00CE },
|
||||
{ "Iuml", 0xCF, 0x00CF },
|
||||
{ "ETH", 0xD0, 0x00D0 }, /* I don't know ;-( */
|
||||
{ "ETH", 0xD0, 0x00D0 },
|
||||
{ "Ntilde", 0xD1, 0x00D1 },
|
||||
{ "Ograve", 0xD2, 0x00D2 },
|
||||
{ "Oacute", 0xD3, 0x00D3 },
|
||||
@ -137,11 +137,133 @@ iso_map_type iso8859_1_map [] = {
|
||||
{ NULL, 0, 0 }
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* Date: Mon, 31 Mar 2003 00:19:28 +0200
|
||||
From: Wojciech Polak <polak@gnu.org>
|
||||
...
|
||||
* Primary Polish site for ogonki is http://www.agh.edu.pl/ogonki/,
|
||||
but it's only in Polish language (it has some interesting links).
|
||||
|
||||
* A general site about ISO 8859-2 at http://nl.ijs.si/gnusl/cee/iso8859-2.html
|
||||
|
||||
* ISO 8859-2 Character Set at http://nl.ijs.si/gnusl/cee/charset.html
|
||||
This site provides almost all information about iso-8859-2,
|
||||
including the character table!!! (must see!)
|
||||
|
||||
* ISO 8859-2 and even HTML entities !!! (must see!)
|
||||
http://people.ssh.fi/mtr/genscript/88592.txt
|
||||
|
||||
* (minor) http://www.agh.edu.pl/ogonki/plchars.html
|
||||
One more table, this time it includes even information about Polish
|
||||
characters in Unicode.
|
||||
*/
|
||||
|
||||
static iso_map_type iso8859_2_map [] = {
|
||||
{ "nbsp", 0xA0, 0x00A0 }, /* NO-BREAK SPACE */
|
||||
{ "", 0xA1, 0x0104 }, /* LATIN CAPITAL LETTER A WITH OGONEK */
|
||||
{ "", 0xA2, 0x02D8 }, /* BREVE */
|
||||
{ "", 0xA3, 0x0141 }, /* LATIN CAPITAL LETTER L WITH STROKE */
|
||||
{ "curren", 0xA4, 0x00A4 }, /* CURRENCY SIGN */
|
||||
{ "", 0xA5, 0x013D }, /* LATIN CAPITAL LETTER L WITH CARON */
|
||||
{ "", 0xA6, 0x015A }, /* LATIN CAPITAL LETTER S WITH ACUTE */
|
||||
{ "sect", 0xA7, 0x00A7 }, /* SECTION SIGN */
|
||||
{ "uml", 0xA8, 0x00A8 }, /* DIAERESIS */
|
||||
{ "", 0xA9, 0x0160 }, /* LATIN CAPITAL LETTER S WITH CARON */
|
||||
{ "", 0xAA, 0x015E }, /* LATIN CAPITAL LETTER S WITH CEDILLA */
|
||||
{ "", 0xAB, 0x0164 }, /* LATIN CAPITAL LETTER T WITH CARON */
|
||||
{ "", 0xAC, 0x0179 }, /* LATIN CAPITAL LETTER Z WITH ACUTE */
|
||||
{ "shy", 0xAD, 0x00AD }, /* SOFT HYPHEN */
|
||||
{ "", 0xAE, 0x017D }, /* LATIN CAPITAL LETTER Z WITH CARON */
|
||||
{ "", 0xAF, 0x017B }, /* LATIN CAPITAL LETTER Z WITH DOT ABOVE */
|
||||
{ "deg", 0xB0, 0x00B0 }, /* DEGREE SIGN */
|
||||
{ "", 0xB1, 0x0105 }, /* LATIN SMALL LETTER A WITH OGONEK */
|
||||
{ "", 0xB2, 0x02DB }, /* OGONEK */
|
||||
{ "", 0xB3, 0x0142 }, /* LATIN SMALL LETTER L WITH STROKE */
|
||||
{ "acute", 0xB4, 0x00B4 }, /* ACUTE ACCENT */
|
||||
{ "", 0xB5, 0x013E }, /* LATIN SMALL LETTER L WITH CARON */
|
||||
{ "", 0xB6, 0x015B }, /* LATIN SMALL LETTER S WITH ACUTE */
|
||||
{ "", 0xB7, 0x02C7 }, /* CARON (Mandarin Chinese third tone) */
|
||||
{ "cedil", 0xB8, 0x00B8 }, /* CEDILLA */
|
||||
{ "", 0xB9, 0x0161 }, /* LATIN SMALL LETTER S WITH CARON */
|
||||
{ "", 0xBA, 0x015F }, /* LATIN SMALL LETTER S WITH CEDILLA */
|
||||
{ "", 0xBB, 0x0165 }, /* LATIN SMALL LETTER T WITH CARON */
|
||||
{ "", 0xBC, 0x017A }, /* LATIN SMALL LETTER Z WITH ACUTE */
|
||||
{ "", 0xBD, 0x02DD }, /* DOUBLE ACUTE ACCENT */
|
||||
{ "", 0xBE, 0x017E }, /* LATIN SMALL LETTER Z WITH CARON */
|
||||
{ "", 0xBF, 0x017C }, /* LATIN SMALL LETTER Z WITH DOT ABOVE */
|
||||
{ "", 0xC0, 0x0154 }, /* LATIN CAPITAL LETTER R WITH ACUTE */
|
||||
{ "", 0xC1, 0x00C1 }, /* LATIN CAPITAL LETTER A WITH ACUTE */
|
||||
{ "", 0xC2, 0x00C2 }, /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
|
||||
{ "", 0xC3, 0x0102 }, /* LATIN CAPITAL LETTER A WITH BREVE */
|
||||
{ "", 0xC4, 0x00C4 }, /* LATIN CAPITAL LETTER A WITH DIAERESIS */
|
||||
{ "", 0xC5, 0x0139 }, /* LATIN CAPITAL LETTER L WITH ACUTE */
|
||||
{ "", 0xC6, 0x0106 }, /* LATIN CAPITAL LETTER C WITH ACUTE */
|
||||
{ "", 0xC7, 0x00C7 }, /* LATIN CAPITAL LETTER C WITH CEDILLA */
|
||||
{ "", 0xC8, 0x010C }, /* LATIN CAPITAL LETTER C WITH CARON */
|
||||
{ "", 0xC9, 0x00C9 }, /* LATIN CAPITAL LETTER E WITH ACUTE */
|
||||
{ "", 0xCA, 0x0118 }, /* LATIN CAPITAL LETTER E WITH OGONEK */
|
||||
{ "", 0xCB, 0x00CB }, /* LATIN CAPITAL LETTER E WITH DIAERESIS */
|
||||
{ "", 0xCC, 0x011A }, /* LATIN CAPITAL LETTER E WITH CARON */
|
||||
{ "", 0xCD, 0x00CD }, /* LATIN CAPITAL LETTER I WITH ACUTE */
|
||||
{ "", 0xCE, 0x00CE }, /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
|
||||
{ "", 0xCF, 0x010E }, /* LATIN CAPITAL LETTER D WITH CARON */
|
||||
{ "", 0xD0, 0x0110 }, /* LATIN CAPITAL LETTER D WITH STROKE */
|
||||
{ "", 0xD1, 0x0143 }, /* LATIN CAPITAL LETTER N WITH ACUTE */
|
||||
{ "", 0xD2, 0x0147 }, /* LATIN CAPITAL LETTER N WITH CARON */
|
||||
{ "", 0xD3, 0x00D3 }, /* LATIN CAPITAL LETTER O WITH ACUTE */
|
||||
{ "", 0xD4, 0x00D4 }, /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
|
||||
{ "", 0xD5, 0x0150 }, /* LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
|
||||
{ "", 0xD6, 0x00D6 }, /* LATIN CAPITAL LETTER O WITH DIAERESIS */
|
||||
{ "times", 0xD7, 0x00D7 }, /* MULTIPLICATION SIGN */
|
||||
{ "", 0xD8, 0x0158 }, /* LATIN CAPITAL LETTER R WITH CARON */
|
||||
{ "", 0xD9, 0x016E }, /* LATIN CAPITAL LETTER U WITH RING ABOVE */
|
||||
{ "", 0xDA, 0x00DA }, /* LATIN CAPITAL LETTER U WITH ACUTE */
|
||||
{ "", 0xDB, 0x0170 }, /* LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
|
||||
{ "", 0xDC, 0x00DC }, /* LATIN CAPITAL LETTER U WITH DIAERESIS */
|
||||
{ "", 0xDD, 0x00DD }, /* LATIN CAPITAL LETTER Y WITH ACUTE */
|
||||
{ "", 0xDE, 0x0162 }, /* LATIN CAPITAL LETTER T WITH CEDILLA */
|
||||
{ "", 0xDF, 0x00DF }, /* LATIN SMALL LETTER SHARP S (German) */
|
||||
{ "", 0xE0, 0x0155 }, /* LATIN SMALL LETTER R WITH ACUTE */
|
||||
{ "", 0xE1, 0x00E1 }, /* LATIN SMALL LETTER A WITH ACUTE */
|
||||
{ "", 0xE2, 0x00E2 }, /* LATIN SMALL LETTER A WITH CIRCUMFLEX */
|
||||
{ "", 0xE3, 0x0103 }, /* LATIN SMALL LETTER A WITH BREVE */
|
||||
{ "", 0xE4, 0x00E4 }, /* LATIN SMALL LETTER A WITH DIAERESIS */
|
||||
{ "", 0xE5, 0x013A }, /* LATIN SMALL LETTER L WITH ACUTE */
|
||||
{ "", 0xE6, 0x0107 }, /* LATIN SMALL LETTER C WITH ACUTE */
|
||||
{ "", 0xE7, 0x00E7 }, /* LATIN SMALL LETTER C WITH CEDILLA */
|
||||
{ "", 0xE8, 0x010D }, /* LATIN SMALL LETTER C WITH CARON */
|
||||
{ "", 0xE9, 0x00E9 }, /* LATIN SMALL LETTER E WITH ACUTE */
|
||||
{ "", 0xEA, 0x0119 }, /* LATIN SMALL LETTER E WITH OGONEK */
|
||||
{ "", 0xEB, 0x00EB }, /* LATIN SMALL LETTER E WITH DIAERESIS */
|
||||
{ "", 0xEC, 0x011B }, /* LATIN SMALL LETTER E WITH CARON */
|
||||
{ "", 0xED, 0x00ED }, /* LATIN SMALL LETTER I WITH ACUTE */
|
||||
{ "", 0xEE, 0x00EE }, /* LATIN SMALL LETTER I WITH CIRCUMFLEX */
|
||||
{ "", 0xEF, 0x010F }, /* LATIN SMALL LETTER D WITH CARON */
|
||||
{ "", 0xF0, 0x0111 }, /* LATIN SMALL LETTER D WITH STROKE */
|
||||
{ "", 0xF1, 0x0144 }, /* LATIN SMALL LETTER N WITH ACUTE */
|
||||
{ "", 0xF2, 0x0148 }, /* LATIN SMALL LETTER N WITH CARON */
|
||||
{ "", 0xF3, 0x00F3 }, /* LATIN SMALL LETTER O WITH ACUTE */
|
||||
{ "", 0xF4, 0x00F4 }, /* LATIN SMALL LETTER O WITH CIRCUMFLEX */
|
||||
{ "", 0xF5, 0x0151 }, /* LATIN SMALL LETTER O WITH DOUBLE ACUTE */
|
||||
{ "", 0xF6, 0x00F6 }, /* LATIN SMALL LETTER O WITH DIAERESIS */
|
||||
{ "divide", 0xF7, 0x00F7 }, /* DIVISION SIGN */
|
||||
{ "", 0xF8, 0x0159 }, /* LATIN SMALL LETTER R WITH CARON */
|
||||
{ "", 0xF9, 0x016F }, /* LATIN SMALL LETTER U WITH RING ABOVE */
|
||||
{ "", 0xFA, 0x00FA }, /* LATIN SMALL LETTER U WITH ACUTE */
|
||||
{ "", 0xFB, 0x0171 }, /* LATIN SMALL LETTER U WITH DOUBLE ACUTE */
|
||||
{ "", 0xFC, 0x00FC }, /* LATIN SMALL LETTER U WITH DIAERESIS */
|
||||
{ "", 0xFD, 0x00FD }, /* LATIN SMALL LETTER Y WITH ACUTE */
|
||||
{ "", 0xFE, 0x0163 }, /* LATIN SMALL LETTER T WITH CEDILLA */
|
||||
{ "", 0xFF, 0x02D9 }, /* DOT ABOVE (Mandarin Chinese light tone) */
|
||||
{ NULL, 0, 0 }
|
||||
};
|
||||
|
||||
encoding_type encoding_table[] = {
|
||||
{ no_encoding, "(no encoding)", NULL },
|
||||
{ US_ASCII, "US-ASCII", us_ascii_map },
|
||||
{ ISO_8859_1, "ISO-8859-1", (iso_map_type *) iso8859_1_map },
|
||||
{ ISO_8859_2, "ISO-8859-2", NULL },
|
||||
{ ISO_8859_2, "ISO-8859-2", (iso_map_type *) iso8859_2_map },
|
||||
{ ISO_8859_3, "ISO-8859-3", NULL },
|
||||
{ ISO_8859_4, "ISO-8859-4", NULL },
|
||||
{ ISO_8859_5, "ISO-8859-5", NULL },
|
||||
@ -310,7 +432,7 @@ void
|
||||
cm_documentlanguage ()
|
||||
{
|
||||
language_code_type c;
|
||||
char *lang_arg;
|
||||
char *lang_arg;
|
||||
|
||||
/* Read the line with the language code on it. */
|
||||
get_rest_of_line (0, &lang_arg);
|
||||
@ -365,13 +487,13 @@ cm_documentencoding ()
|
||||
{
|
||||
encoding_code_type enc;
|
||||
char *enc_arg;
|
||||
|
||||
|
||||
get_rest_of_line (1, &enc_arg);
|
||||
|
||||
/* See if we have this encoding. */
|
||||
for (enc = no_encoding+1; enc != last_encoding_code; enc++)
|
||||
{
|
||||
if (strcasecmp (enc_arg, encoding_table[enc].ecname) == 0)
|
||||
if (strcasecmp (enc_arg, encoding_table[enc].encname) == 0)
|
||||
{
|
||||
document_encoding_code = enc;
|
||||
break;
|
||||
@ -380,7 +502,7 @@ cm_documentencoding ()
|
||||
|
||||
/* If we didn't find this code, complain. */
|
||||
if (enc == last_encoding_code)
|
||||
warning (_("unrecogized encoding name `%s'"), enc_arg);
|
||||
warning (_("unrecognized encoding name `%s'"), enc_arg);
|
||||
|
||||
else if (encoding_table[document_encoding_code].isotab == NULL)
|
||||
warning (_("sorry, encoding `%s' not supported"), enc_arg);
|
||||
@ -434,7 +556,7 @@ cm_accent_generic_html (arg, start, end, html_supported, single,
|
||||
char *html_solo;
|
||||
{
|
||||
static int valid_html_accent; /* yikes */
|
||||
|
||||
|
||||
if (arg == START)
|
||||
{ /* If HTML has good support for this character, use it. */
|
||||
if (strchr (html_supported, curchar ()))
|
||||
@ -447,7 +569,7 @@ cm_accent_generic_html (arg, start, end, html_supported, single,
|
||||
escape_html = saved_escape_html;
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
valid_html_accent = 0;
|
||||
if (html_solo_standalone)
|
||||
{ /* No special HTML support, so produce standalone char. */
|
||||
@ -492,7 +614,7 @@ cm_accent_generic_no_headers (arg, start, end, single, html_solo)
|
||||
buffer[0] = output_paragraph[end - 1];
|
||||
buffer[1] = 0;
|
||||
strcat (buffer, html_solo);
|
||||
|
||||
|
||||
rc = cm_search_iso_map (buffer);
|
||||
if (rc >= 0)
|
||||
/* A little bit tricky ;-)
|
||||
@ -505,12 +627,12 @@ cm_accent_generic_no_headers (arg, start, end, single, html_solo)
|
||||
else
|
||||
{ /* If we didn't find a translation for this character,
|
||||
put the single instead. E.g., &Xuml; does not exist so X¨
|
||||
should be produced. */
|
||||
should be produced. */
|
||||
warning (_("%s is an invalid ISO code, using %c"),
|
||||
buffer, single);
|
||||
add_char (single);
|
||||
}
|
||||
|
||||
|
||||
free (buffer);
|
||||
}
|
||||
}
|
||||
@ -579,7 +701,7 @@ cm_accent_generic (arg, start, end, html_supported, single,
|
||||
else if (no_headers)
|
||||
cm_accent_generic_no_headers (arg, start, end, single, html_solo);
|
||||
else if (arg == END)
|
||||
{
|
||||
{
|
||||
if (enable_encoding)
|
||||
/* use 8-bit if available */
|
||||
cm_accent_generic_no_headers (arg, start, end, single, html_solo);
|
||||
@ -665,9 +787,9 @@ cm_special_char (arg)
|
||||
else if (strcmp (command, "ae") == 0)
|
||||
add_encoded_char ("aelig", command);
|
||||
else if (strcmp (command, "OE") == 0)
|
||||
add_word ("Œ", command);
|
||||
add_encoded_char ("#140", command);
|
||||
else if (strcmp (command, "oe") == 0)
|
||||
add_word ("œ", command);
|
||||
add_encoded_char ("#156", command);
|
||||
else if (strcmp (command, "AA") == 0)
|
||||
add_encoded_char ("Aring", command);
|
||||
else if (strcmp (command, "aa") == 0)
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* lang.h -- declarations for language codes etc.
|
||||
$Id: lang.h,v 1.3 2002/11/07 16:10:49 karl Exp $
|
||||
$Id: lang.h,v 1.4 2003/05/01 00:05:27 karl Exp $
|
||||
|
||||
Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999, 2001, 2002, 2003 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
|
||||
@ -80,9 +80,9 @@ extern language_type language_table[];
|
||||
typedef enum {
|
||||
no_encoding,
|
||||
US_ASCII,
|
||||
ISO_8859_1, /* default for en, de, */
|
||||
ISO_8859_2, /* actualy not supported like the rest below */
|
||||
ISO_8859_3,
|
||||
ISO_8859_1,
|
||||
ISO_8859_2,
|
||||
ISO_8859_3, /* this and none of the rest are supported. */
|
||||
ISO_8859_4,
|
||||
ISO_8859_5,
|
||||
ISO_8859_6,
|
||||
@ -118,7 +118,7 @@ typedef struct
|
||||
typedef struct
|
||||
{
|
||||
encoding_code_type ec; /* document encoding type (see above enum) */
|
||||
char *ecname; /* encoding name like ISO-8859-1 */
|
||||
char *encname; /* encoding name like "ISO-8859-1", valid in Emacs */
|
||||
iso_map_type *isotab; /* address of ISO translation table */
|
||||
} encoding_type;
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* macro.c -- user-defined macros for Texinfo.
|
||||
$Id: macro.c,v 1.1 2002/08/25 23:38:38 karl Exp $
|
||||
$Id: macro.c,v 1.2 2003/06/01 23:41:23 karl Exp $
|
||||
|
||||
Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2002, 2003 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
|
||||
@ -322,7 +322,7 @@ apply (named, actuals, body)
|
||||
else
|
||||
{ /* Snarf parameter name, check against named parameters. */
|
||||
char *param;
|
||||
int param_start, which, len;
|
||||
int param_start, len;
|
||||
|
||||
param_start = ++i;
|
||||
while (body[i] && body[i] != '\\')
|
||||
@ -336,29 +336,38 @@ apply (named, actuals, body)
|
||||
if (body[i]) /* move past \ */
|
||||
i++;
|
||||
|
||||
/* Now check against named parameters. */
|
||||
for (which = 0; named && named[which]; which++)
|
||||
if (STREQ (named[which], param))
|
||||
break;
|
||||
|
||||
if (named && named[which])
|
||||
{
|
||||
text = which < length_of_actuals ? actuals[which] : NULL;
|
||||
if (!text)
|
||||
text = "";
|
||||
len = strlen (text);
|
||||
}
|
||||
else
|
||||
{ /* not a parameter, either it's \\ (if len==0) or an
|
||||
error. In either case, restore one \ at least. */
|
||||
if (len) {
|
||||
warning (_("\\ in macro expansion followed by `%s' instead of \\ or parameter name"),
|
||||
param);
|
||||
}
|
||||
if (len == 0)
|
||||
{ /* \\ always means \, even if macro has no args. */
|
||||
len++;
|
||||
text = xmalloc (1 + len);
|
||||
sprintf (text, "\\%s", param);
|
||||
}
|
||||
else
|
||||
{
|
||||
int which;
|
||||
|
||||
/* Check against named parameters. */
|
||||
for (which = 0; named && named[which]; which++)
|
||||
if (STREQ (named[which], param))
|
||||
break;
|
||||
|
||||
if (named && named[which])
|
||||
{
|
||||
text = which < length_of_actuals ? actuals[which] : NULL;
|
||||
if (!text)
|
||||
text = "";
|
||||
len = strlen (text);
|
||||
text = xstrdup (text); /* so we can free it */
|
||||
}
|
||||
else
|
||||
{ /* not a parameter, so it's an error. */
|
||||
warning (_("\\ in macro expansion followed by `%s' instead of parameter name"),
|
||||
param);
|
||||
len++;
|
||||
text = xmalloc (1 + len);
|
||||
sprintf (text, "\\%s", param);
|
||||
}
|
||||
}
|
||||
|
||||
if (strlen (param) + 2 < len)
|
||||
{
|
||||
@ -371,8 +380,7 @@ apply (named, actuals, body)
|
||||
strcpy (new_body + new_body_index, text);
|
||||
new_body_index += len;
|
||||
|
||||
if (!named || !named[which])
|
||||
free (text);
|
||||
free (text);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* makeinfo -- convert Texinfo source into other formats.
|
||||
$Id: makeinfo.c,v 1.17 2003/01/19 18:44:28 karl Exp $
|
||||
$Id: makeinfo.c,v 1.34 2003/06/02 12:32:29 karl Exp $
|
||||
|
||||
Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@ -31,6 +31,7 @@
|
||||
#include "html.h"
|
||||
#include "index.h"
|
||||
#include "insertion.h"
|
||||
#include "lang.h"
|
||||
#include "macro.h"
|
||||
#include "node.h"
|
||||
#include "toc.h"
|
||||
@ -167,7 +168,6 @@ char **get_brace_args ();
|
||||
int array_len ();
|
||||
void free_array ();
|
||||
static int end_of_sentence_p ();
|
||||
static void isolate_nodename ();
|
||||
void reader_loop ();
|
||||
void remember_brace (), remember_brace_1 ();
|
||||
void pop_and_call_brace (), discard_braces ();
|
||||
@ -181,7 +181,6 @@ void inhibit_output_flushing (), uninhibit_output_flushing ();
|
||||
int set_paragraph_indent ();
|
||||
int self_delimiting (), search_forward ();
|
||||
int multitable_item (), number_of_node ();
|
||||
extern void add_link (), add_escaped_anchor_name ();
|
||||
|
||||
void me_execute_string_keep_state ();
|
||||
void maybe_update_execution_strings ();
|
||||
@ -189,11 +188,10 @@ void maybe_update_execution_strings ();
|
||||
extern char *escape_string ();
|
||||
extern void insert_html_tag ();
|
||||
extern void sectioning_html ();
|
||||
extern void add_link ();
|
||||
|
||||
#if defined (VA_FPRINTF) && __STDC__
|
||||
/* Unfortunately we must use prototypes if we are to use <stdarg.h>. */
|
||||
void add_word_args (char *, ...);
|
||||
void add_word_args (const char *, ...);
|
||||
void execute_string (char *, ...);
|
||||
#else
|
||||
void add_word_args ();
|
||||
@ -218,10 +216,10 @@ fs_error (filename)
|
||||
/* Print an error message, and return false. */
|
||||
void
|
||||
#if defined (VA_FPRINTF) && __STDC__
|
||||
error (char *format, ...)
|
||||
error (const char *format, ...)
|
||||
#else
|
||||
error (format, va_alist)
|
||||
char *format;
|
||||
const char *format;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
@ -245,12 +243,12 @@ error (format, va_alist)
|
||||
/* Just like error (), but print the input file and line number as well. */
|
||||
void
|
||||
#if defined (VA_FPRINTF) && __STDC__
|
||||
file_line_error (char *infile, int lno, char *format, ...)
|
||||
file_line_error (char *infile, int lno, const char *format, ...)
|
||||
#else
|
||||
file_line_error (infile, lno, format, va_alist)
|
||||
char *infile;
|
||||
int lno;
|
||||
char *format;
|
||||
const char *format;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
@ -276,10 +274,10 @@ file_line_error (infile, lno, format, va_alist)
|
||||
number from global variables. */
|
||||
void
|
||||
#if defined (VA_FPRINTF) && __STDC__
|
||||
line_error (char *format, ...)
|
||||
line_error (const char *format, ...)
|
||||
#else
|
||||
line_error (format, va_alist)
|
||||
char *format;
|
||||
const char *format;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
@ -303,10 +301,10 @@ line_error (format, va_alist)
|
||||
|
||||
void
|
||||
#if defined (VA_FPRINTF) && __STDC__
|
||||
warning (char *format, ...)
|
||||
warning (const char *format, ...)
|
||||
#else
|
||||
warning (format, va_alist)
|
||||
char *format;
|
||||
const char *format;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
@ -374,7 +372,7 @@ usage (exit_value)
|
||||
else
|
||||
{
|
||||
printf (_("Usage: %s [OPTION]... TEXINFO-FILE...\n"), progname);
|
||||
puts ("\n");
|
||||
puts ("");
|
||||
|
||||
puts (_("\
|
||||
Translate Texinfo source documentation to various other formats, by default\n\
|
||||
@ -430,16 +428,21 @@ Options for Info and plain text:\n\
|
||||
--split-size=NUM split Info files at size NUM (default %d).\n"),
|
||||
fill_column, paragraph_start_indent,
|
||||
DEFAULT_SPLIT_SIZE);
|
||||
|
||||
puts ("\n");
|
||||
|
||||
puts (_("\
|
||||
Options for HTML:\n\
|
||||
--css-include=FILE include FILE in HTML <style> output;\n\
|
||||
read stdin if FILE is -.\n\
|
||||
"));
|
||||
|
||||
puts (_("\
|
||||
Input file options:\n\
|
||||
--commands-in-node-names allow @ commands in node names.\n\
|
||||
-D VAR define the variable VAR, as with @set.\n\
|
||||
-I DIR append DIR to the @include search path.\n\
|
||||
-P DIR prepend DIR to the @include search path.\n\
|
||||
-U VAR undefine the variable VAR, as with @clear.\n\
|
||||
--commands-in-node-names allow @ commands in node names.\n\
|
||||
-D VAR define the variable VAR, as with @set.\n\
|
||||
-I DIR append DIR to the @include search path.\n\
|
||||
-P DIR prepend DIR to the @include search path.\n\
|
||||
-U VAR undefine the variable VAR, as with @clear.\n\
|
||||
"));
|
||||
|
||||
puts (_("\
|
||||
@ -461,6 +464,7 @@ Conditional processing in input:\n\
|
||||
if generating HTML, --ifhtml is on and the others are off;\n\
|
||||
if generating Info, --ifinfo is on and the others are off;\n\
|
||||
if generating plain text, --ifplaintext is on and the others are off;\n\
|
||||
if generating XML, --ifxml is on and the others are off.\n\
|
||||
"));
|
||||
|
||||
fputs (_("\
|
||||
@ -489,6 +493,7 @@ Texinfo home page: http://www.gnu.org/software/texinfo/"));
|
||||
struct option long_options[] =
|
||||
{
|
||||
{ "commands-in-node-names", 0, &expensive_validation, 1 },
|
||||
{ "css-include", 1, 0, 'C' },
|
||||
{ "docbook", 0, 0, 'd' },
|
||||
{ "enable-encoding", 0, &enable_encoding, 1 },
|
||||
{ "error-limit", 1, 0, 'e' },
|
||||
@ -560,6 +565,10 @@ main (argc, argv)
|
||||
|
||||
switch (c)
|
||||
{
|
||||
case 'C': /* --css-include */
|
||||
css_include = xstrdup (optarg);
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
case 'U':
|
||||
/* User specified variable to set or clear. */
|
||||
@ -713,7 +722,7 @@ For more information about these matters, see the files named COPYING.\n"),
|
||||
xml = 1;
|
||||
process_xml = 1;
|
||||
break;
|
||||
|
||||
|
||||
case '?':
|
||||
usage (1);
|
||||
break;
|
||||
@ -737,11 +746,11 @@ For more information about these matters, see the files named COPYING.\n"),
|
||||
|
||||
if (no_headers)
|
||||
{
|
||||
if (html && splitting)
|
||||
if (html && splitting && !STREQ (command_output_filename, "-"))
|
||||
{ /* --no-headers --no-split --html indicates confusion. */
|
||||
fprintf (stderr,
|
||||
"%s: --no-headers conflicts with --no-split for --html.\n",
|
||||
progname);
|
||||
"%s: can't split --html output to `%s' with --no-headers.\n",
|
||||
progname, command_output_filename);
|
||||
usage (1);
|
||||
}
|
||||
|
||||
@ -752,7 +761,7 @@ For more information about these matters, see the files named COPYING.\n"),
|
||||
if (!command_output_filename)
|
||||
command_output_filename = xstrdup ("-");
|
||||
}
|
||||
|
||||
|
||||
if (process_info == -1)
|
||||
{ /* no explicit --[no-]ifinfo option, so we'll do @ifinfo
|
||||
if we're generating info or (for compatibility) plain text. */
|
||||
@ -764,7 +773,7 @@ For more information about these matters, see the files named COPYING.\n"),
|
||||
if we're generating plain text. */
|
||||
process_plaintext = no_headers && !html && !xml;
|
||||
}
|
||||
|
||||
|
||||
if (verbose_mode)
|
||||
print_version_info ();
|
||||
|
||||
@ -778,7 +787,8 @@ For more information about these matters, see the files named COPYING.\n"),
|
||||
else
|
||||
convert_from_stream (stdin, "stdin");
|
||||
|
||||
return errors_printed ? 2 : 0;
|
||||
xexit (errors_printed ? 2 : 0);
|
||||
return 0; /* Avoid bogus warnings. */
|
||||
}
|
||||
|
||||
|
||||
@ -836,7 +846,7 @@ self_delimiting (character)
|
||||
{
|
||||
/* @; and @\ are not Texinfo commands, but they are listed here
|
||||
anyway. I don't know why. --karl, 10aug96. */
|
||||
return strchr ("~{|}`^\\@?=;:.-,*\'\" !\n\t", character) != NULL;
|
||||
return strchr ("~{|}`^\\@?=;:./-,*\'\" !\n\t", character) != NULL;
|
||||
}
|
||||
|
||||
/* Clear whitespace from the front and end of string. */
|
||||
@ -1163,6 +1173,8 @@ get_until_in_braces (match, string)
|
||||
input_text_offset = i;
|
||||
*string = temp;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Converting a file. */
|
||||
|
||||
@ -1317,12 +1329,12 @@ convert_from_file (name)
|
||||
|
||||
/* Given OUTPUT_FILENAME == ``/foo/bar/baz.html'', return
|
||||
"/foo/bar/baz/baz.html". This routine is called only if html && splitting.
|
||||
|
||||
|
||||
Split html output goes into the subdirectory of the toplevel
|
||||
filename, without extension. For example:
|
||||
@setfilename foo.info
|
||||
produces output in files foo/index.html, foo/second-node.html, ...
|
||||
|
||||
|
||||
But if the user said -o foo.whatever on the cmd line, then use
|
||||
foo.whatever unchanged. */
|
||||
|
||||
@ -1330,16 +1342,16 @@ static char *
|
||||
insert_toplevel_subdirectory (output_filename)
|
||||
char *output_filename;
|
||||
{
|
||||
static const char index_name[] = "index.html";
|
||||
char *dir, *subdir, *base, *basename, *p;
|
||||
char buf[PATH_MAX];
|
||||
struct stat st;
|
||||
static const char index_name[] = "index.html";
|
||||
const int index_len = sizeof (index_name) - 1;
|
||||
|
||||
strcpy (buf, output_filename);
|
||||
dir = pathname_part (buf);
|
||||
base = filename_part (buf);
|
||||
basename = xstrdup (base); /* remember real @setfilename name */
|
||||
dir = pathname_part (buf); /* directory of output_filename */
|
||||
base = filename_part (buf); /* strips suffix, too */
|
||||
basename = xstrdup (base); /* remember real @setfilename name */
|
||||
p = dir + strlen (dir) - 1;
|
||||
if (p > dir && IS_SLASH (*p))
|
||||
*p = 0;
|
||||
@ -1348,15 +1360,11 @@ insert_toplevel_subdirectory (output_filename)
|
||||
*p = 0;
|
||||
|
||||
/* Split html output goes into subdirectory of toplevel name. */
|
||||
subdir = "";
|
||||
if (FILENAME_CMP (base, filename_part (dir)) != 0)
|
||||
{
|
||||
if (save_command_output_filename
|
||||
&& STREQ (output_filename, save_command_output_filename))
|
||||
subdir = basename; /* from user, use unchanged */
|
||||
else
|
||||
subdir = base; /* implicit, omit suffix */
|
||||
}
|
||||
if (save_command_output_filename
|
||||
&& STREQ (output_filename, save_command_output_filename))
|
||||
subdir = basename; /* from user, use unchanged */
|
||||
else
|
||||
subdir = base; /* implicit, omit suffix */
|
||||
|
||||
free (output_filename);
|
||||
output_filename = xmalloc (strlen (dir) + 1
|
||||
@ -1367,7 +1375,7 @@ insert_toplevel_subdirectory (output_filename)
|
||||
if (strlen (dir))
|
||||
strcat (output_filename, "/");
|
||||
strcat (output_filename, subdir);
|
||||
if (mkdir (output_filename, 0777) == -1 && errno != EEXIST
|
||||
if ((mkdir (output_filename, 0777) == -1 && errno != EEXIST)
|
||||
/* output_filename might exist, but be a non-directory. */
|
||||
|| (stat (output_filename, &st) == 0 && !S_ISDIR (st.st_mode)))
|
||||
{ /* that failed, try subdir name with .html */
|
||||
@ -1377,7 +1385,7 @@ insert_toplevel_subdirectory (output_filename)
|
||||
strcat (output_filename, basename);
|
||||
if (mkdir (output_filename, 0777) == -1)
|
||||
{
|
||||
char *errmsg = strerror (errno);
|
||||
const char *errmsg = strerror (errno);
|
||||
|
||||
if ((errno == EEXIST
|
||||
#ifdef __MSDOS__
|
||||
@ -1440,7 +1448,7 @@ convert_from_loaded_file (name)
|
||||
command_output_filename = output_name_from_input_name (name);
|
||||
#endif /* !REQUIRE_SETFILENAME */
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
int i, end_of_first_line;
|
||||
|
||||
@ -1588,7 +1596,7 @@ convert_from_loaded_file (name)
|
||||
reader_loop ();
|
||||
if (xml)
|
||||
xml_end_document ();
|
||||
|
||||
|
||||
|
||||
finished:
|
||||
discard_insertions (0);
|
||||
@ -1627,7 +1635,18 @@ convert_from_loaded_file (name)
|
||||
close_paragraph ();
|
||||
}
|
||||
|
||||
/* maybe we want local variables in info output. */
|
||||
{
|
||||
char *trailer = info_trailer ();
|
||||
if (trailer)
|
||||
{
|
||||
insert_string (trailer);
|
||||
free (trailer);
|
||||
}
|
||||
}
|
||||
|
||||
flush_output (); /* in case there was no @bye */
|
||||
|
||||
if (output_stream != stdout)
|
||||
fclose (output_stream);
|
||||
|
||||
@ -1656,6 +1675,29 @@ convert_from_loaded_file (name)
|
||||
free (real_output_filename);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* If enable_encoding and document_encoding are both set, return a Local
|
||||
Variables section (as a malloc-ed string) so that Emacs' locale
|
||||
features can work. Else return NULL. */
|
||||
|
||||
char *
|
||||
info_trailer ()
|
||||
{
|
||||
if (!enable_encoding || document_encoding_code <= US_ASCII)
|
||||
return NULL;
|
||||
|
||||
{
|
||||
#define LV_FMT "\n\037\nLocal Variables:\ncoding: %s\nEnd:\n"
|
||||
char *enc_name = encoding_table[document_encoding_code].encname;
|
||||
char *lv = xmalloc (sizeof (LV_FMT) + strlen (enc_name));
|
||||
sprintf (lv, LV_FMT, enc_name);
|
||||
return lv;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
free_and_clear (pointer)
|
||||
char **pointer;
|
||||
@ -1708,10 +1750,10 @@ static void
|
||||
handle_menu_entry ()
|
||||
{
|
||||
char *tem;
|
||||
|
||||
|
||||
/* Ugh, glean_node_from_menu wants to read the * itself. */
|
||||
input_text_offset--;
|
||||
|
||||
|
||||
/* Find node name in menu entry and save it in references list for
|
||||
later validation. Use followed_reference type for detailmenu
|
||||
references since we don't want to use them for default node pointers. */
|
||||
@ -1740,7 +1782,7 @@ handle_menu_entry ()
|
||||
add_word ("<p>\n");
|
||||
in_paragraph = 1;
|
||||
}
|
||||
|
||||
|
||||
if (in_paragraph)
|
||||
{
|
||||
add_word ("</p>");
|
||||
@ -1780,7 +1822,7 @@ handle_menu_entry ()
|
||||
add_word (": ");
|
||||
}
|
||||
else if (xml && tem)
|
||||
{
|
||||
{
|
||||
xml_start_menu_entry (tem);
|
||||
}
|
||||
else if (tem)
|
||||
@ -2002,7 +2044,7 @@ reader_loop ()
|
||||
input_text_offset++;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
/* Escapes for HTML unless we're outputting raw HTML. Do
|
||||
this always, even if SGML rules don't require it since
|
||||
that's easier and safer for non-conforming browsers. */
|
||||
@ -2090,7 +2132,7 @@ remember_brace (proc)
|
||||
COMMAND_FUNCTION *proc;
|
||||
{
|
||||
if (curchar () != '{')
|
||||
line_error (_("%c%s expected `{...}'"), COMMAND_PREFIX, command);
|
||||
line_error (_("%c%s expected braces"), COMMAND_PREFIX, command);
|
||||
else
|
||||
input_text_offset++;
|
||||
remember_brace_1 (proc, output_paragraph_offset);
|
||||
@ -2161,7 +2203,7 @@ adjust_braces_following (here, amount)
|
||||
/* Return the string which invokes PROC; a pointer to a function.
|
||||
Always returns the first function in the command table if more than
|
||||
one matches PROC. */
|
||||
static char *
|
||||
static const char *
|
||||
find_proc_name (proc)
|
||||
COMMAND_FUNCTION *proc;
|
||||
{
|
||||
@ -2187,7 +2229,7 @@ discard_braces ()
|
||||
{
|
||||
if (brace_stack->proc != misplaced_brace)
|
||||
{
|
||||
char *proc_name;
|
||||
const char *proc_name;
|
||||
|
||||
proc_name = find_proc_name (brace_stack->proc);
|
||||
file_line_error (input_filename, brace_stack->line,
|
||||
@ -2241,10 +2283,10 @@ get_char_len (character)
|
||||
|
||||
void
|
||||
#if defined (VA_FPRINTF) && __STDC__
|
||||
add_word_args (char *format, ...)
|
||||
add_word_args (const char *format, ...)
|
||||
#else
|
||||
add_word_args (format, va_alist)
|
||||
char *format;
|
||||
const char *format;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
@ -2284,6 +2326,27 @@ add_html_elt (string)
|
||||
in_html_elt--;
|
||||
}
|
||||
|
||||
/* Here is another awful kludge, used in add_char. Ordinarily, macro
|
||||
expansions take place in the body of the document, and therefore we
|
||||
should html_output_head when we see one. But there's an exception: a
|
||||
macro call might take place within @copying, and that does not start
|
||||
the real output, even though we fully expand the copying text.
|
||||
|
||||
So we need to be able to check if we are defining the @copying text.
|
||||
We do this by looking back through the insertion stack. */
|
||||
static int
|
||||
defining_copying ()
|
||||
{
|
||||
INSERTION_ELT *i;
|
||||
for (i = insertion_stack; i; i = i->next)
|
||||
{
|
||||
if (i->insertion == copying)
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* Add the character to the current paragraph. If filling_enabled is
|
||||
nonzero, then do filling as well. */
|
||||
void
|
||||
@ -2322,10 +2385,10 @@ add_char (character)
|
||||
{
|
||||
if (html || docbook)
|
||||
{ /* Seems cleaner to use than an 8-bit char. */
|
||||
int saved_escape_html = escape_html;
|
||||
escape_html = 0;
|
||||
int saved_escape_html = escape_html;
|
||||
escape_html = 0;
|
||||
add_word (" ");
|
||||
escape_html = saved_escape_html;
|
||||
escape_html = saved_escape_html;
|
||||
character = ';';
|
||||
}
|
||||
else
|
||||
@ -2400,7 +2463,7 @@ add_char (character)
|
||||
any order and with any omissions, and we'll still output
|
||||
the html <head> `just in time'. */
|
||||
if ((executing_macro || !executing_string)
|
||||
&& html && !html_output_head_p)
|
||||
&& html && !html_output_head_p && !defining_copying ())
|
||||
html_output_head ();
|
||||
|
||||
if (!paragraph_is_open)
|
||||
@ -2997,16 +3060,16 @@ cm_xref (arg)
|
||||
char *arg1_id = xml_id (arg1);
|
||||
if (*arg2)
|
||||
{
|
||||
xml_insert_element_with_attribute (XREFNODENAME, START,
|
||||
xml_insert_element_with_attribute (XREFNODENAME, START,
|
||||
"linkend=\"%s\"", arg1_id);
|
||||
free (arg1_id);
|
||||
if (*arg2)
|
||||
execute_string (arg2);
|
||||
xml_insert_element (XREFNODENAME, END);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
xml_insert_element_with_attribute (XREF, START,
|
||||
xml_insert_element_with_attribute (XREF, START,
|
||||
"linkend=\"%s\"", arg1_id);
|
||||
free (arg1_id);
|
||||
xml_pop_current_element ();
|
||||
@ -3324,7 +3387,7 @@ cm_uref (arg)
|
||||
execute_string (replacement);
|
||||
xml_insert_element (UREFREPLACEMENT, END);
|
||||
}
|
||||
xml_insert_element (UREF, END);
|
||||
xml_insert_element (UREF, END);
|
||||
}
|
||||
else if (html)
|
||||
{ /* never need to show the url */
|
||||
@ -3380,7 +3443,7 @@ cm_email (arg)
|
||||
xml_insert_element_with_attribute (EMAIL, START, "url=\"mailto:%s\"", addr);
|
||||
if (*name)
|
||||
execute_string (name);
|
||||
xml_insert_element (EMAIL, END);
|
||||
xml_insert_element (EMAIL, END);
|
||||
}
|
||||
else if (xml)
|
||||
{
|
||||
@ -3394,7 +3457,7 @@ cm_email (arg)
|
||||
execute_string (name);
|
||||
xml_insert_element (EMAILNAME, END);
|
||||
}
|
||||
xml_insert_element (EMAIL, END);
|
||||
xml_insert_element (EMAIL, END);
|
||||
}
|
||||
else if (html)
|
||||
{
|
||||
@ -3441,34 +3504,48 @@ cm_image (arg)
|
||||
|
||||
if (*name_arg)
|
||||
{
|
||||
struct stat file_info;
|
||||
char *pathname = NULL;
|
||||
char *fullname = xmalloc (strlen (name_arg)
|
||||
+ (ext_arg && *ext_arg ? strlen (ext_arg) + 1 : 4) + 1);
|
||||
|
||||
if (html)
|
||||
if (ext_arg && *ext_arg)
|
||||
{
|
||||
sprintf (fullname, "%s.%s", name_arg, ext_arg);
|
||||
if (access (fullname, R_OK) != 0)
|
||||
pathname = get_file_info_in_path (fullname, include_files_path,
|
||||
&file_info);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ext_arg && *ext_arg)
|
||||
{
|
||||
sprintf (fullname, "%s.%s", name_arg, ext_arg);
|
||||
if (access (fullname, R_OK) != 0)
|
||||
{
|
||||
line_error(_("@image file `%s' (for HTML) not readable: %s"),
|
||||
fullname, strerror (errno));
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf (fullname, "%s.png", name_arg);
|
||||
if (access (fullname, R_OK) != 0)
|
||||
{
|
||||
sprintf (fullname, "%s.jpg", name_arg);
|
||||
if (access (fullname, R_OK) != 0)
|
||||
pathname = get_file_info_in_path (fullname,
|
||||
include_files_path, &file_info);
|
||||
if (pathname == NULL)
|
||||
{
|
||||
line_error (_("No `%s.png' or `.jpg', and no extension supplied"),
|
||||
name_arg);
|
||||
return;
|
||||
sprintf (fullname, "%s.jpg", name_arg);
|
||||
if (access (fullname, R_OK) != 0)
|
||||
pathname = get_file_info_in_path (fullname,
|
||||
include_files_path, &file_info);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (html)
|
||||
{
|
||||
if (pathname == NULL && access (fullname, R_OK) != 0)
|
||||
{
|
||||
line_error(_("@image file `%s' (for HTML) not readable: %s"),
|
||||
fullname, strerror (errno));
|
||||
return;
|
||||
}
|
||||
if (pathname != NULL && access (pathname, R_OK) != 0)
|
||||
{
|
||||
line_error (_("No such file `%s'"),
|
||||
fullname);
|
||||
return;
|
||||
}
|
||||
|
||||
add_html_elt ("<img src=");
|
||||
@ -3480,17 +3557,32 @@ cm_image (arg)
|
||||
xml_insert_docbook_image (name_arg);
|
||||
else if (xml)
|
||||
{
|
||||
xml_insert_element_with_attribute (IMAGE, START, "width=\"%s\" height=\"%s\" alttext=\"%s\" extension=\"%s\"", w_arg, h_arg, alt_arg, ext_arg);
|
||||
xml_insert_element_with_attribute (IMAGE, START, "width=\"%s\" height=\"%s\" alttext=\"%s\" extension=\"%s\"",
|
||||
w_arg, h_arg, alt_arg, ext_arg);
|
||||
add_word (name_arg);
|
||||
xml_insert_element (IMAGE, END);
|
||||
}
|
||||
else
|
||||
{ /* Try to open foo.txt. */
|
||||
{ /* Try to open foo.EXT or foo.txt. */
|
||||
FILE *image_file;
|
||||
strcpy (fullname, name_arg);
|
||||
strcat (fullname, ".txt");
|
||||
image_file = fopen (fullname, "r");
|
||||
if (image_file)
|
||||
char *txtpath = NULL;
|
||||
char *txtname = xmalloc (strlen (name_arg)
|
||||
+ (ext_arg && *ext_arg
|
||||
? strlen (ext_arg) + 1 : 4) + 1);
|
||||
strcpy (txtname, name_arg);
|
||||
strcat (txtname, ".txt");
|
||||
image_file = fopen (txtname, "r");
|
||||
if (image_file == NULL)
|
||||
{
|
||||
txtpath = get_file_info_in_path (txtname,
|
||||
include_files_path, &file_info);
|
||||
if (txtpath != NULL)
|
||||
image_file = fopen (txtpath, "r");
|
||||
}
|
||||
|
||||
if (image_file != NULL
|
||||
|| access (fullname, R_OK) == 0
|
||||
|| (pathname != NULL && access (pathname, R_OK) == 0))
|
||||
{
|
||||
int ch;
|
||||
int save_inhibit_indentation = inhibit_paragraph_indentation;
|
||||
@ -3500,25 +3592,50 @@ cm_image (arg)
|
||||
filling_enabled = 0;
|
||||
last_char_was_newline = 0;
|
||||
|
||||
/* Maybe we need to remove the final newline if the image
|
||||
file is only one line to allow in-line images. On the
|
||||
other hand, they could just make the file without a
|
||||
final newline. */
|
||||
while ((ch = getc (image_file)) != EOF)
|
||||
add_char (ch);
|
||||
/* Write magic ^@^H[image ...^@^H] cookie in the info file. */
|
||||
add_char ('\0');
|
||||
add_word ("\010[image");
|
||||
|
||||
if (access (fullname, R_OK) == 0
|
||||
|| (pathname != NULL && access (pathname, R_OK) == 0))
|
||||
add_word_args (" src=%s", fullname);
|
||||
|
||||
if (*alt_arg)
|
||||
add_word_args (" alt=\"%s\"", alt_arg);
|
||||
|
||||
if (image_file != NULL)
|
||||
{
|
||||
add_word (" text=\"");
|
||||
/* Maybe we need to remove the final newline if the image
|
||||
file is only one line to allow in-line images. On the
|
||||
other hand, they could just make the file without a
|
||||
final newline. */
|
||||
while ((ch = getc (image_file)) != EOF)
|
||||
{
|
||||
if (ch == '"' || ch == '\\')
|
||||
add_char ('\\');
|
||||
add_char (ch);
|
||||
}
|
||||
add_char ('"');
|
||||
|
||||
if (fclose (image_file) != 0)
|
||||
perror (txtname);
|
||||
}
|
||||
|
||||
inhibit_paragraph_indentation = save_inhibit_indentation;
|
||||
filling_enabled = save_filling_enabled;
|
||||
|
||||
if (fclose (image_file) != 0)
|
||||
perror (fullname);
|
||||
add_char ('\0');
|
||||
add_word ("\010]");
|
||||
}
|
||||
else
|
||||
line_error (_("@image file `%s' (for text) unreadable: %s"),
|
||||
fullname, strerror (errno));
|
||||
txtname, strerror (errno));
|
||||
}
|
||||
|
||||
free (fullname);
|
||||
if (pathname)
|
||||
free (pathname);
|
||||
}
|
||||
else
|
||||
line_error (_("@image missing filename argument"));
|
||||
@ -3718,7 +3835,10 @@ cm_value (arg, start_pos, end_pos)
|
||||
if (value)
|
||||
execute_string ("%s", value);
|
||||
else
|
||||
{
|
||||
warning (_("undefined flag: %s"), name);
|
||||
add_word_args (_("{No value for `%s'}"), name);
|
||||
}
|
||||
|
||||
free (name);
|
||||
}
|
||||
@ -4051,7 +4171,7 @@ expansion (str, implicit_code)
|
||||
int implicit_code;
|
||||
{
|
||||
char *result;
|
||||
|
||||
|
||||
/* Inhibit indentation and filling, so that extra newlines
|
||||
are not added to the expansion. (This is undesirable if
|
||||
we write the expanded text to macro_expansion_output_stream.) */
|
||||
@ -4064,14 +4184,14 @@ expansion (str, implicit_code)
|
||||
indented_fill = 0;
|
||||
no_indent = 1;
|
||||
escape_html = 0;
|
||||
|
||||
|
||||
result = full_expansion (str, implicit_code);
|
||||
|
||||
filling_enabled = saved_filling_enabled;
|
||||
indented_fill = saved_indented_fill;
|
||||
no_indent = saved_no_indent;
|
||||
escape_html = saved_escape_html;
|
||||
|
||||
escape_html = saved_escape_html;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -4146,13 +4266,13 @@ text_expansion (str)
|
||||
char *ret;
|
||||
int save_html = html;
|
||||
int save_xml = xml;
|
||||
|
||||
|
||||
html = 0;
|
||||
xml = 0;
|
||||
ret = expansion (str, 0);
|
||||
html = save_html;
|
||||
xml = save_xml;
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
/* makeinfo.h -- declarations for Makeinfo.
|
||||
$Id: makeinfo.h,v 1.3 2003/01/17 17:14:34 karl Exp $
|
||||
$Id: makeinfo.h,v 1.10 2003/05/12 13:12:32 karl Exp $
|
||||
|
||||
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software
|
||||
Foundation, Inc.
|
||||
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 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
|
||||
@ -88,15 +88,22 @@ DECLARE (int, non_top_node_seen, 0);
|
||||
/* Nonzero indicates that indentation is temporarily turned off. */
|
||||
DECLARE (int, no_indent, 1);
|
||||
|
||||
/* The amount of indentation to apply at the start of each line. */
|
||||
DECLARE (int, current_indent, 0);
|
||||
|
||||
/* Nonzero means that we suppress the indentation of the first paragraph
|
||||
following any section heading. */
|
||||
DECLARE (int, do_first_par_indent, 0);
|
||||
|
||||
/* Amount by which @example indentation increases/decreases. */
|
||||
DECLARE (int, default_indentation_increment, 5);
|
||||
|
||||
/* Nonzero indicates that filling a line also indents the new line. */
|
||||
DECLARE (int, indented_fill, 0);
|
||||
|
||||
/* Nonzero means forcing output text to be flushright. */
|
||||
DECLARE (int, force_flush_right, 0);
|
||||
|
||||
/* The amount of indentation to apply at the start of each line. */
|
||||
DECLARE (int, current_indent, 0);
|
||||
|
||||
/* The column at which long lines are broken. */
|
||||
DECLARE (int, fill_column, 72);
|
||||
|
||||
@ -104,9 +111,6 @@ DECLARE (int, fill_column, 72);
|
||||
gets changed for cm_w (). */
|
||||
DECLARE (int, non_splitting_words, 0);
|
||||
|
||||
/* Amount by which @example indentation increases/decreases. */
|
||||
DECLARE (int, default_indentation_increment, 5);
|
||||
|
||||
/* Nonzero means that we are currently hacking the insides of an
|
||||
insertion which would use a fixed width font. */
|
||||
DECLARE (int, in_fixed_width_font, 0);
|
||||
@ -114,16 +118,17 @@ DECLARE (int, in_fixed_width_font, 0);
|
||||
/* Nonzero if we are currently processing a multitable command */
|
||||
DECLARE (int, multitable_active, 0);
|
||||
|
||||
/* Nonzero means that we're generating HTML. */
|
||||
/* Nonzero means that we're generating HTML. (--html) */
|
||||
DECLARE (int, html, 0);
|
||||
|
||||
/* Nonzero means that we're generating XML. */
|
||||
/* Nonzero means that we're generating XML. (--xml) */
|
||||
DECLARE (int, xml, 0);
|
||||
|
||||
/* Nonzero means that we're generating DocBook. */
|
||||
/* Nonzero means that we're generating DocBook. (--docbook) */
|
||||
DECLARE (int, docbook, 0);
|
||||
|
||||
/* Nonzero means true 8-bit output for Info and plain text. */
|
||||
/* Nonzero means true 8-bit output for Info and plain text.
|
||||
(--enable-encoding) */
|
||||
DECLARE (int, enable_encoding, 0);
|
||||
|
||||
/* Nonzero means escape characters in HTML output. */
|
||||
@ -153,7 +158,7 @@ DECLARE (char *, command, NULL);
|
||||
DECLARE (char *, copying_text, NULL);
|
||||
|
||||
/* @documentdescription ... @end documentdescription. */
|
||||
DECLARE (char *, document_description, NULL);
|
||||
DECLARE (const char *, document_description, NULL);
|
||||
|
||||
/* Nonzero if the last character inserted has the syntax class of NEWLINE. */
|
||||
DECLARE (int, last_char_was_newline, 1);
|
||||
@ -174,6 +179,9 @@ DECLARE (char *, include_files_path, NULL);
|
||||
/* The filename of the current input file. This is never freed. */
|
||||
DECLARE (char *, node_filename, NULL);
|
||||
|
||||
/* Name of CSS file to include, if any. (--css-include). */
|
||||
DECLARE (char *, css_include, NULL);
|
||||
|
||||
/* Nonzero means do not output "Node: Foo" for node separations, that
|
||||
is, generate plain text. (--no-headers) */
|
||||
DECLARE (int, no_headers, 0);
|
||||
@ -208,7 +216,8 @@ DECLARE (int, validating, 1);
|
||||
/* Nonzero means print information about what is going on. (--verbose) */
|
||||
DECLARE (int, verbose_mode, 0);
|
||||
|
||||
/* Nonzero means prefix each @chapter, ... with a number like 1. (--number-sections) */
|
||||
/* Nonzero means prefix each @chapter, ... with a number like
|
||||
1, 1.1, etc. (--number-sections) */
|
||||
DECLARE (int, number_sections, 0);
|
||||
|
||||
/* Nonzero means split size. When zero, DEFAULT_SPLIT_SIZE is used. */
|
||||
@ -260,9 +269,10 @@ DECLARE (int, expensive_validation, 0);
|
||||
|
||||
#define END_VERBATIM "end verbatim"
|
||||
|
||||
/* Stuff for splitting large files. */
|
||||
#define SPLIT_SIZE_THRESHOLD 70000 /* What's good enough for Stallman... */
|
||||
#define DEFAULT_SPLIT_SIZE 50000 /* Is probably good enough for me. */
|
||||
/* Stuff for splitting large files. The numbers for Emacs
|
||||
texinfo-format-buffer are much smaller, but memory capacities have
|
||||
increased so much, 50k info files seem a bit tiny these days. */
|
||||
#define DEFAULT_SPLIT_SIZE 300000
|
||||
DECLARE (int, splitting, 1); /* Defaults to true for now. */
|
||||
|
||||
#define skip_whitespace() \
|
||||
@ -286,4 +296,7 @@ DECLARE (int, splitting, 1); /* Defaults to true for now. */
|
||||
#define looking_at(string) \
|
||||
(strncmp (input_text + input_text_offset, string, strlen (string)) == 0)
|
||||
|
||||
/* Possibly return Local Variables trailer for Info output. */
|
||||
extern char *info_trailer ();
|
||||
|
||||
#endif /* not MAKEINFO_H */
|
||||
|
@ -1,8 +1,8 @@
|
||||
/* node.c -- nodes for Texinfo.
|
||||
$Id: node.c,v 1.6 2003/01/18 17:16:17 karl Exp $
|
||||
$Id: node.c,v 1.12 2003/05/01 00:30:07 karl Exp $
|
||||
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 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
|
||||
@ -595,7 +595,7 @@ cm_node ()
|
||||
filling_enabled = indented_fill = 0;
|
||||
if (!html || (html && splitting))
|
||||
current_footnote_number = 1;
|
||||
|
||||
|
||||
if (verbose_mode)
|
||||
printf (_("Formatting node %s...\n"), node);
|
||||
|
||||
@ -609,7 +609,7 @@ cm_node ()
|
||||
xml_begin_node ();
|
||||
if (!docbook)
|
||||
{
|
||||
xml_insert_element (NODENAME, START);
|
||||
xml_insert_element (NODENAME, START);
|
||||
if (macro_expansion_output_stream && !executing_string)
|
||||
me_execute_string (node);
|
||||
else
|
||||
@ -924,7 +924,7 @@ cm_node ()
|
||||
add_word ("<div class=\"node\">\n");
|
||||
/* The <p> avoids the links area running on with old Lynxen. */
|
||||
add_word_args ("<p>%s\n", splitting ? "" : "<hr>");
|
||||
add_word_args ("%s<a name=\"", _("Node:"));
|
||||
add_word_args ("%s%s<a name=\"", _("Node:"), " ");
|
||||
tem = expand_node_name (node);
|
||||
add_anchor_name (tem, 0);
|
||||
add_word_args ("\">%s</a>", tem);
|
||||
@ -935,6 +935,7 @@ cm_node ()
|
||||
tem = expansion (next, 0);
|
||||
add_word (",\n");
|
||||
add_word (_("Next:"));
|
||||
add_word (" ");
|
||||
add_word ("<a rel=\"next\" accesskey=\"n\" href=\"");
|
||||
add_anchor_name (tem, 1);
|
||||
add_word_args ("\">%s</a>", tem);
|
||||
@ -945,6 +946,7 @@ cm_node ()
|
||||
tem = expansion (prev, 0);
|
||||
add_word (",\n");
|
||||
add_word (_("Previous:"));
|
||||
add_word (" ");
|
||||
add_word ("<a rel=\"previous\" accesskey=\"p\" href=\"");
|
||||
add_anchor_name (tem, 1);
|
||||
add_word_args ("\">%s</a>", tem);
|
||||
@ -955,6 +957,7 @@ cm_node ()
|
||||
tem = expansion (up, 0);
|
||||
add_word (",\n");
|
||||
add_word (_("Up:"));
|
||||
add_word (" ");
|
||||
add_word ("<a rel=\"up\" accesskey=\"u\" href=\"");
|
||||
add_anchor_name (tem, 1);
|
||||
add_word_args ("\">%s</a>", tem);
|
||||
@ -979,7 +982,7 @@ cm_node ()
|
||||
if (prev)
|
||||
{
|
||||
xml_insert_element (NODEPREV, START);
|
||||
execute_string ("%s", prev);
|
||||
execute_string ("%s", prev);
|
||||
xml_insert_element (NODEPREV, END);
|
||||
}
|
||||
if (up)
|
||||
@ -1042,6 +1045,9 @@ cm_anchor (arg)
|
||||
/* Parse the anchor text. */
|
||||
anchor = get_xref_token (1);
|
||||
|
||||
/* Force all versions of "top" to be "Top". */
|
||||
normalize_node_name (anchor);
|
||||
|
||||
/* In HTML mode, need to actually produce some output. */
|
||||
if (html)
|
||||
{
|
||||
@ -1292,7 +1298,7 @@ validate (tag, line, label)
|
||||
/* The strings here are followed in the message by `reference to...' in
|
||||
the `validate' routine. They are only used in messages, thus are
|
||||
translated. */
|
||||
static char *
|
||||
static const char *
|
||||
reftype_type_string (type)
|
||||
enum reftype type;
|
||||
{
|
||||
@ -1598,7 +1604,7 @@ last_node_p (tags)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return last;
|
||||
}
|
||||
|
||||
@ -1628,8 +1634,8 @@ split_file (filename, size)
|
||||
if (size == 0)
|
||||
size = DEFAULT_SPLIT_SIZE;
|
||||
|
||||
if ((stat (filename, &fileinfo) != 0) ||
|
||||
(((long) fileinfo.st_size) < SPLIT_SIZE_THRESHOLD))
|
||||
if ((stat (filename, &fileinfo) != 0)
|
||||
|| (((long) fileinfo.st_size) < size))
|
||||
return;
|
||||
file_size = (long) fileinfo.st_size;
|
||||
|
||||
@ -1656,6 +1662,10 @@ split_file (filename, size)
|
||||
TAG_ENTRY *tags = tag_table;
|
||||
char *indirect_info = NULL;
|
||||
|
||||
/* Maybe we want a Local Variables section. */
|
||||
char *trailer = info_trailer ();
|
||||
int trailer_len = trailer ? strlen (trailer) : 0;
|
||||
|
||||
/* Remember the `header' of this file. The first tag in the file is
|
||||
the bottom of the header; the top of the file is the start. */
|
||||
the_header = xmalloc (1 + (header_size = tags->position));
|
||||
@ -1777,7 +1787,9 @@ split_file (filename, size)
|
||||
|| write (fd, the_header, header_size) != header_size
|
||||
|| write (fd, the_file + file_top, file_bot - file_top)
|
||||
!= (file_bot - file_top)
|
||||
|| (close (fd)) < 0)
|
||||
|| (trailer_len
|
||||
&& write (fd, trailer, trailer_len) != trailer_len)
|
||||
|| close (fd) < 0)
|
||||
{
|
||||
perror (split_filename);
|
||||
if (fd != -1)
|
||||
@ -1822,7 +1834,16 @@ split_file (filename, size)
|
||||
/* Inhibit newlines. */
|
||||
paragraph_is_open = 0;
|
||||
|
||||
/* Write the indirect tag table. */
|
||||
write_tag_table_indirect ();
|
||||
|
||||
/* preserve local variables in info output. */
|
||||
if (trailer)
|
||||
{
|
||||
insert_string (trailer);
|
||||
free (trailer);
|
||||
}
|
||||
|
||||
fclose (output_stream);
|
||||
free (the_header);
|
||||
free (the_file);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* sectioning.c -- for @chapter, @section, ..., @contents ...
|
||||
$Id: sectioning.c,v 1.6 2002/11/08 02:21:07 karl Exp $
|
||||
$Id: sectioning.c,v 1.10 2003/05/13 16:37:54 karl Exp $
|
||||
|
||||
Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999, 2001, 2002, 2003 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
|
||||
@ -52,7 +52,7 @@ section_alist_type section_alist[] = {
|
||||
{ "heading", 3, ENUM_SECT_NO, TOC_NO },
|
||||
{ "chapheading", 2, ENUM_SECT_NO, TOC_NO },
|
||||
{ "majorheading", 2, ENUM_SECT_NO, TOC_NO },
|
||||
|
||||
|
||||
{ "top", 1, ENUM_SECT_NO, TOC_YES },
|
||||
{ NULL, 0, 0, 0 }
|
||||
};
|
||||
@ -151,7 +151,7 @@ search_sectioning (text)
|
||||
/* ignore the optional command prefix */
|
||||
if (text[0] == COMMAND_PREFIX)
|
||||
text++;
|
||||
|
||||
|
||||
for (i = 0; (t = section_alist[i].name); i++)
|
||||
{
|
||||
if (strcmp (t, text) == 0)
|
||||
@ -161,7 +161,7 @@ search_sectioning (text)
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/* Return an integer which identifies the type section present in TEXT. */
|
||||
int
|
||||
what_section (text)
|
||||
@ -215,6 +215,11 @@ void
|
||||
sectioning_underscore (cmd)
|
||||
char *cmd;
|
||||
{
|
||||
/* If we're not indenting the first paragraph, we shall make it behave
|
||||
like @noindent is called directly after the section heading. */
|
||||
if (! do_first_par_indent)
|
||||
cm_noindent ();
|
||||
|
||||
if (xml)
|
||||
{
|
||||
char *temp;
|
||||
@ -231,7 +236,7 @@ sectioning_underscore (cmd)
|
||||
the section and put an Index instead */
|
||||
flush_output ();
|
||||
xml_last_section_output_position = output_paragraph_offset;
|
||||
|
||||
|
||||
xml_insert_element (xml_element (cmd), START);
|
||||
xml_insert_element (TITLE, START);
|
||||
xml_open_section (level, cmd);
|
||||
@ -239,8 +244,8 @@ sectioning_underscore (cmd)
|
||||
execute_string ("%s\n", temp);
|
||||
free (temp);
|
||||
xml_insert_element (TITLE, END);
|
||||
}
|
||||
else
|
||||
}
|
||||
else
|
||||
{
|
||||
char character;
|
||||
char *temp;
|
||||
@ -300,7 +305,7 @@ handle_enum_increment (level, index)
|
||||
enum_marker = APPENDIX_MAGIC;
|
||||
numbers [0] = 0; /* this means we start with Appendix A */
|
||||
}
|
||||
|
||||
|
||||
/* only increment counters if we are not in unnumbered
|
||||
area. This handles situations like this:
|
||||
@unnumbered .... This sets enum_marker to UNNUMBERED_MAGIC
|
||||
@ -312,7 +317,7 @@ handle_enum_increment (level, index)
|
||||
/* reset all counters which are one level deeper */
|
||||
for (i = level; i < 3; i++)
|
||||
numbers [i + 1] = 0;
|
||||
|
||||
|
||||
numbers[level]++;
|
||||
return xstrdup
|
||||
(get_sectioning_number (level, section_alist[index].num));
|
||||
@ -397,6 +402,7 @@ insert_and_underscore (level, with_char, cmd)
|
||||
/* Insert the text following input_text_offset up to the end of the
|
||||
line as an HTML heading element of the appropriate `level' and
|
||||
tagged as an anchor for the current node.. */
|
||||
|
||||
void
|
||||
sectioning_html (level, cmd)
|
||||
int level;
|
||||
@ -413,8 +419,10 @@ sectioning_html (level, cmd)
|
||||
old_no_indent = no_indent;
|
||||
no_indent = 1;
|
||||
|
||||
/* level 0 (chapter) is <h2> */
|
||||
add_word_args ("<h%d class=\"%s\">", level + 2, cmd);
|
||||
/* level 0 (chapter) is <h2>, everything else is <h3>. We don't want
|
||||
to go lower than that because browsers then start rendering the
|
||||
headings smaller than the text. */
|
||||
add_word_args ("<h%d class=\"%s\">", MIN (3, level + 2), cmd);
|
||||
|
||||
/* If we are outside of any node, produce an anchor that
|
||||
the TOC could refer to. */
|
||||
@ -429,7 +437,7 @@ sectioning_html (level, cmd)
|
||||
/* This must be added after toc_anchor is extracted, since
|
||||
toc_anchor cannot include the closing </a>. For details,
|
||||
see toc.c:toc_add_entry and toc.c:contents_update_html.
|
||||
|
||||
|
||||
Also, the anchor close must be output before the section name
|
||||
in case the name itself contains an anchor. */
|
||||
add_word ("</a>");
|
||||
@ -535,7 +543,6 @@ cm_top ()
|
||||
}
|
||||
else
|
||||
{
|
||||
TAG_ENTRY *top_node = find_node ("Top");
|
||||
top_node_seen = 1;
|
||||
|
||||
/* It is an error to use @top before using @node. */
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* xml.c -- xml output.
|
||||
$Id: xml.c,v 1.18 2002/12/17 16:34:22 karl Exp $
|
||||
$Id: xml.c,v 1.19 2003/05/13 16:37:54 karl Exp $
|
||||
|
||||
Copyright (C) 2001, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 2001, 2002, 2003 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
|
||||
@ -316,7 +316,7 @@ element docbook_element_list [] = {
|
||||
{ "comment", 0, 0 },
|
||||
{ "function", 0, 1 },
|
||||
{ "legalnotice", 1, 0 },
|
||||
|
||||
|
||||
{ "para", 0, 0 } /* Must be last */
|
||||
/* name / contains para / contained in para */
|
||||
};
|
||||
@ -600,7 +600,7 @@ xml_insert_element_with_attribute (elt, arg, format, va_alist)
|
||||
|
||||
if (docbook && !only_macro_expansion && (in_menu || in_detailmenu))
|
||||
return;
|
||||
|
||||
|
||||
if (!xml_element_list[elt].name || !strlen (xml_element_list[elt].name))
|
||||
{
|
||||
/*printf ("Warning: Inserting empty element %d\n", elt);*/
|
||||
@ -634,7 +634,7 @@ xml_insert_element_with_attribute (elt, arg, format, va_alist)
|
||||
if (arg == START && !xml_in_para && !xml_element_list[elt].contained_in_para)
|
||||
xml_indent ();
|
||||
|
||||
if (docbook && xml_table_level && !xml_in_item[xml_table_level] && !in_table_title
|
||||
if (docbook && xml_table_level && !xml_in_item[xml_table_level] && !in_table_title
|
||||
&& arg == START && elt != TABLEITEM && elt != TABLETERM
|
||||
&& !in_indexterm && xml_current_element() == TABLE)
|
||||
{
|
||||
@ -879,8 +879,8 @@ xml_add_char (character)
|
||||
return;
|
||||
if (docbook && !only_macro_expansion && (in_menu || in_detailmenu))
|
||||
return;
|
||||
|
||||
if (docbook && xml_table_level && !xml_in_item[xml_table_level] && !in_table_title
|
||||
|
||||
if (docbook && xml_table_level && !xml_in_item[xml_table_level] && !in_table_title
|
||||
&& !cr_or_whitespace (character) && !in_indexterm)
|
||||
{
|
||||
in_table_title = 1;
|
||||
@ -1229,6 +1229,7 @@ xml_asterisk ()
|
||||
to have real multilivel indexing support, not just string analysis. */
|
||||
#define INDEX_SEP "@this string will never appear@" /* was , */
|
||||
|
||||
void
|
||||
xml_insert_indexterm (indexterm, index)
|
||||
char *indexterm;
|
||||
char *index;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* install-info -- create Info directory entry(ies) for an Info file.
|
||||
$Id: install-info.c,v 1.7 2003/01/19 18:46:51 karl Exp $
|
||||
$Id: install-info.c,v 1.9 2003/05/19 13:10:59 karl Exp $
|
||||
|
||||
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software
|
||||
Foundation, Inc.
|
||||
@ -165,33 +165,6 @@ fatal (s1, s2, s3)
|
||||
xexit (1);
|
||||
}
|
||||
|
||||
/* Memory allocation and string operations. */
|
||||
|
||||
/* Like malloc but get fatal error if memory is exhausted. */
|
||||
void *
|
||||
xmalloc (size)
|
||||
unsigned int size;
|
||||
{
|
||||
extern void *malloc ();
|
||||
void *result = malloc (size);
|
||||
if (result == NULL)
|
||||
fatal (_("virtual memory exhausted"), 0, 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Like realloc but get fatal error if memory is exhausted. */
|
||||
void *
|
||||
xrealloc (obj, size)
|
||||
void *obj;
|
||||
unsigned int size;
|
||||
{
|
||||
extern void *realloc ();
|
||||
void *result = realloc (obj, size);
|
||||
if (result == NULL)
|
||||
fatal (_("virtual memory exhausted"), 0, 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Return a newly-allocated string
|
||||
whose contents concatenate those of S1, S2, S3. */
|
||||
char *
|
||||
@ -1397,7 +1370,7 @@ For more information about these matters, see the files named COPYING.\n"),
|
||||
}
|
||||
if (!spec || spec == entry->entry_sections_tail)
|
||||
continue;
|
||||
|
||||
|
||||
/* Subtract one because dir_lines is zero-based,
|
||||
but the `end_line' and `start_line' members are
|
||||
one-based. */
|
||||
@ -1442,6 +1415,7 @@ For more information about these matters, see the files named COPYING.\n"),
|
||||
entries_to_add, input_sections, compression_program);
|
||||
|
||||
xexit (0);
|
||||
return 0; /* Avoid bogus warnings. */
|
||||
}
|
||||
|
||||
/* Divide the text at DATA (of SIZE bytes) into lines.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* texindex -- sort TeX index dribble output into an actual index.
|
||||
$Id: texindex.c,v 1.7 2003/01/19 18:47:15 karl Exp $
|
||||
$Id: texindex.c,v 1.9 2003/05/19 13:10:59 karl Exp $
|
||||
|
||||
Copyright (C) 1987, 1991, 1992, 1996, 1997, 1998, 1999, 2000, 2001,
|
||||
2002, 2003 Free Software Foundation, Inc.
|
||||
@ -166,7 +166,7 @@ main (argc, argv)
|
||||
|
||||
/* In case we write to a redirected stdout that fails. */
|
||||
/* not ready atexit (close_stdout); */
|
||||
|
||||
|
||||
/* Describe the kind of sorting to do. */
|
||||
/* The first keyfield uses the first braced field and folds case. */
|
||||
keyfields[0].braced = 1;
|
||||
@ -218,9 +218,7 @@ main (argc, argv)
|
||||
|
||||
outfile = outfiles[i];
|
||||
if (!outfile)
|
||||
{
|
||||
outfile = concat (infiles[i], "s", "");
|
||||
}
|
||||
outfile = concat (infiles[i], "s");
|
||||
|
||||
need_initials = 0;
|
||||
first_initial = '\0';
|
||||
@ -234,7 +232,6 @@ main (argc, argv)
|
||||
|
||||
flush_tempfiles (tempcount);
|
||||
xexit (0);
|
||||
|
||||
return 0; /* Avoid bogus warnings. */
|
||||
}
|
||||
|
||||
@ -322,7 +319,7 @@ decode_command (argc, argv)
|
||||
if (tempdir == NULL)
|
||||
tempdir = DEFAULT_TMPDIR;
|
||||
else
|
||||
tempdir = concat (tempdir, "/", "");
|
||||
tempdir = concat (tempdir, "/");
|
||||
|
||||
keep_tempfiles = 0;
|
||||
|
||||
@ -401,18 +398,15 @@ maketempname (count)
|
||||
if (!tempbase)
|
||||
{
|
||||
int fd;
|
||||
char *tmpdir = getenv ("TEMPDIR");
|
||||
if (!tmpdir)
|
||||
tmpdir = "/tmp";
|
||||
tempbase = concat (tmpdir, "/txidxXXXXXX");
|
||||
tempbase = concat (tempdir, "txidxXXXXXX");
|
||||
|
||||
fd = mkstemp (tempbase);
|
||||
if (fd == -1)
|
||||
if (fd == -1)
|
||||
pfatal_with_name (tempbase);
|
||||
}
|
||||
|
||||
sprintf (tempsuffix, ".%d", count);
|
||||
return concat (tempdir, tempbase, tempsuffix);
|
||||
return concat (tempbase, tempsuffix);
|
||||
}
|
||||
|
||||
|
||||
@ -1140,7 +1134,7 @@ parsefile (filename, nextline, data, size)
|
||||
}
|
||||
else
|
||||
first_initial = toupper (*p);
|
||||
|
||||
|
||||
while (*p && *p != '\n')
|
||||
p++;
|
||||
if (p != end)
|
||||
@ -1653,39 +1647,31 @@ void
|
||||
perror_with_name (name)
|
||||
char *name;
|
||||
{
|
||||
char *s;
|
||||
|
||||
s = strerror (errno);
|
||||
printf ("%s: ", program_name);
|
||||
printf ("%s; for file `%s'.\n", s, name);
|
||||
fprintf (stderr, "%s: ", program_name);
|
||||
perror (name);
|
||||
}
|
||||
|
||||
void
|
||||
pfatal_with_name (name)
|
||||
char *name;
|
||||
{
|
||||
char *s;
|
||||
|
||||
s = strerror (errno);
|
||||
printf ("%s: ", program_name);
|
||||
printf (_("%s; for file `%s'.\n"), s, name);
|
||||
perror_with_name (name);
|
||||
xexit (1);
|
||||
}
|
||||
|
||||
/* Return a newly-allocated string whose contents concatenate those of
|
||||
S1, S2, S3. */
|
||||
|
||||
/* Return a newly-allocated string concatenating S1 and S2. */
|
||||
|
||||
char *
|
||||
concat (s1, s2, s3)
|
||||
char *s1, *s2, *s3;
|
||||
concat (s1, s2)
|
||||
char *s1, *s2;
|
||||
{
|
||||
int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
|
||||
char *result = (char *) xmalloc (len1 + len2 + len3 + 1);
|
||||
int len1 = strlen (s1), len2 = strlen (s2);
|
||||
char *result = (char *) xmalloc (len1 + len2 + 1);
|
||||
|
||||
strcpy (result, s1);
|
||||
strcpy (result + len1, s2);
|
||||
strcpy (result + len1 + len2, s3);
|
||||
*(result + len1 + len2 + len3) = 0;
|
||||
*(result + len1 + len2) = 0;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user