diff options
author | Michele Calgaro <[email protected]> | 2020-09-11 14:38:47 +0900 |
---|---|---|
committer | Michele Calgaro <[email protected]> | 2020-09-11 14:38:47 +0900 |
commit | 884c8093d63402a1ad0b502244b791e3c6782be3 (patch) | |
tree | a600d4ab0d431a2bdfe4c15b70df43c14fbd8dd0 /debian/gettext-kde | |
parent | 14e1aa2006796f147f3f4811fb908a6b01e79253 (diff) | |
download | extra-dependencies-884c8093d63402a1ad0b502244b791e3c6782be3.tar.gz extra-dependencies-884c8093d63402a1ad0b502244b791e3c6782be3.zip |
Added debian extra dependency packages.
Signed-off-by: Michele Calgaro <[email protected]>
Diffstat (limited to 'debian/gettext-kde')
230 files changed, 78012 insertions, 0 deletions
diff --git a/debian/gettext-kde/gettext-kde-0.10.35/ABOUT-NLS b/debian/gettext-kde/gettext-kde-0.10.35/ABOUT-NLS new file mode 100644 index 00000000..28d38c76 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/ABOUT-NLS @@ -0,0 +1,226 @@ +Notes on the Free Translation Project +************************************* + + Free software is going international! The Free Translation Project +is a way to get maintainers of free software, translators, and users all +together, so that will gradually become able to speak many languages. +A few packages already provide translations for their messages. + + If you found this `ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU `gettext' internally, +itself available at your nearest GNU archive site. But you do *not* +need to install GNU `gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work at translations should contact the appropriate team. + + When reporting bugs in the `intl/' directory or bugs which may be +related to internationalization, you should tell about the version of +`gettext' which is used. The information can be found in the +`intl/VERSION' file, in internationalized packages. + +One advise in advance +===================== + + If you want to exploit the full power of internationalization, you +should configure it using + + ./configure --with-included-gettext + +to force usage of internationalizing routines provided within this +package, despite the existence of internationalizing capabilities in the +operating system where this package is being installed. So far, only +the `gettext' implementation in the GNU C library version 2 provides as +many features (such as locale alias or message inheritance) as the +implementation here. It is also not possible to offer this additional +functionality on top of a `catgets' implementation. Future versions of +GNU `gettext' will very likely convey even more functionality. So it +might be a good idea to change to GNU `gettext' as soon as possible. + + So you need not provide this option if you are using GNU libc 2 or +you have installed a recent copy of the GNU gettext package with the +included `libintl'. + +INSTALL Matters +=============== + + Some packages are "localizable" when properly installed; the +programs they contain can be made to speak your own native language. +Most such packages use GNU `gettext'. Other packages have their own +ways to internationalization, predating GNU `gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system provides +usable `catgets' (if using this is selected by the installer) or +`gettext' functions. If neither is available, the GNU `gettext' own +library will be used. This library is wholly contained within this +package, usually in the `intl/' subdirectory, so prior installation of +the GNU `gettext' package is *not* required. Installers may use +special options at configuration time for changing the default +behaviour. The commands: + + ./configure --with-included-gettext + ./configure --with-catgets + ./configure --disable-nls + +will respectively bypass any pre-existing `catgets' or `gettext' to use +the internationalizing routines provided within this package, enable +the use of the `catgets' functions (if found on the locale system), or +else, *totally* disable translation of messages. + + When you already have GNU `gettext' installed on your system and run +configure without an option for your new package, `configure' will +probably detect the previously built and installed `libintl.a' file and +will decide to use this. This might be not what is desirable. You +should use the more recent version of the GNU `gettext' library. I.e. +if the file `intl/VERSION' shows that the library which comes with this +package is more recent, you should use + + ./configure --with-included-gettext + +to prevent auto-detection. + + By default the configuration process will not test for the `catgets' +function and therefore they will not be used. The reasons are already +given above: the emulation on top of `catgets' cannot provide all the +extensions provided by the GNU `gettext' library. If you nevertheless +want to use the `catgets' functions use + + ./configure --with-catgets + +to enable the test for `catgets' (this causes no harm if `catgets' is +not available on your system). If you really select this option we +would like to hear about the reasons because we cannot think of any +good one ourself. + + Internationalized packages have usually many `po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at `configure' time by using the +`--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable `LINGUAS' +may be set, prior to configuration, to limit the installed set. +`LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +Using This Package +================== + + As a user, if your language has been installed for this package, you +only have to set the `LANG' environment variable to the appropriate +ISO 639 `LL' two-letter code prior to using the programs in the +package. For example, let's suppose that you speak German. At the +shell prompt, merely execute `setenv LANG de' (in `csh'), +`export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash'). This +can be done from your `.login' or `.profile' file, once and for all. + + An operating system might already offer message localization for +many of its programs, while other programs have been installed locally +with the full capabilities of GNU `gettext'. Just using `gettext' +extended syntax for `LANG' would break proper localization of already +available operating system programs. In this case, users should set +both `LANGUAGE' and `LANG' variables in their environment, as programs +using GNU `gettext' give preference to `LANGUAGE'. For example, some +Swedish users would rather read translations in German than English for +when Swedish is not available. This is easily accomplished by setting +`LANGUAGE' to `sv:de' while leaving `LANG' to `sv'. + +Translating Teams +================= + + For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list, courtesy of Linux +International. You may reach your translation team at the address +`[email protected]', replacing LL by the two-letter ISO 639 code for your +language. Language codes are *not* the same as the country codes given +in ISO 3166. The following translation teams exist, as of December +1997: + + Chinese `zh', Czech `cs', Danish `da', Dutch `nl', English `en', + Esperanto `eo', Finnish `fi', French `fr', German `de', Hungarian + `hu', Irish `ga', Italian `it', Indonesian `id', Japanese `ja', + Korean `ko', Latin `la', Norwegian `no', Persian `fa', Polish + `pl', Portuguese `pt', Russian `ru', Slovenian `sl', Spanish `es', + Swedish `sv', and Turkish `tr'. + +For example, you may reach the Chinese translation team by writing to + + If you'd like to volunteer to *work* at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is *not* the same as the list itself, it has +`-request' appended. For example, speakers of Swedish can send a +message to `[email protected]', having this message body: + + subscribe + + Keep in mind that team members are expected to participate +*actively* in translations, or at solving translational difficulties, +rather than merely lurking around. If your team does not exist yet and +you want to start one, or if you are unsure about what to do or how to +get started, please write to `[email protected]' to reach the +coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skill are praised more than +programming skill, here. + +Available Packages +================== + + Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of December +1997. The matrix shows, in regard of each package, for which languages +PO files have been submitted to translation coordination. + + Ready PO files cs da de en es fi fr it ja ko nl no pl pt ru sl sv + .----------------------------------------------------. + bash | [] [] [] | 3 + bison | [] [] [] | 3 + clisp | [] [] [] [] | 4 + cpio | [] [] [] [] [] [] | 6 + diffutils | [] [] [] [] [] | 5 + enscript | [] [] [] [] [] [] | 6 + fileutils | [] [] [] [] [] [] [] [] [] [] | 10 + findutils | [] [] [] [] [] [] [] [] [] | 9 + flex | [] [] [] [] | 4 + gcal | [] [] [] [] [] | 5 + gettext | [] [] [] [] [] [] [] [] [] [] [] | 12 + grep | [] [] [] [] [] [] [] [] [] [] | 10 + hello | [] [] [] [] [] [] [] [] [] [] [] | 11 + id-utils | [] [] [] | 3 + indent | [] [] [] [] [] | 5 + libc | [] [] [] [] [] [] [] | 7 + m4 | [] [] [] [] [] [] | 6 + make | [] [] [] [] [] [] | 6 + music | [] [] | 2 + ptx | [] [] [] [] [] [] [] [] | 8 + recode | [] [] [] [] [] [] [] [] [] | 9 + sh-utils | [] [] [] [] [] [] [] [] | 8 + sharutils | [] [] [] [] [] [] | 6 + tar | [] [] [] [] [] [] [] [] [] [] [] | 11 + texinfo | [] [] [] | 3 + textutils | [] [] [] [] [] [] [] [] [] | 9 + wdiff | [] [] [] [] [] [] [] [] | 8 + `----------------------------------------------------' + 17 languages cs da de en es fi fr it ja ko nl no pl pt ru sl sv + 27 packages 6 4 25 1 18 1 26 2 1 12 20 9 19 7 4 7 17 179 + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and +distributed as such by its maintainer. There might be an observable +lag between the mere existence a PO file and its wide availability in a +distribution. + + If December 1997 seems to be old, you may fetch a more recent copy +of this `ABOUT-NLS' file on most GNU archive sites. + diff --git a/debian/gettext-kde/gettext-kde-0.10.35/AUTHORS b/debian/gettext-kde/gettext-kde-0.10.35/AUTHORS new file mode 100644 index 00000000..0e495f6d --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/AUTHORS @@ -0,0 +1,10 @@ +Authors of GNU gettext. + +The following contributions warranted legal paper exchanges with the +Free Software Foundation. Also see files ChangeLog and THANKS. + +GETTEXT Ulrich Drepper Germany 1968 5/16/95 +Assigns program. + +GETTEXT Peter Miller Australia 1960 10/16/95 +Assigns past and future changes. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/BUGS b/debian/gettext-kde/gettext-kde-0.10.35/BUGS new file mode 100644 index 00000000..24cd7674 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/BUGS @@ -0,0 +1,7 @@ +List of known bugs and limitations: + +- getting the string for `dcgettext' or `dgettext' fails if the first + argument is some different than a list of identifiers or strings. + +- the C code parser currently does not know anything about macro. I.e. + keyword with translations in the macro text are not found. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/COPYING b/debian/gettext-kde/gettext-kde-0.10.35/COPYING new file mode 100644 index 00000000..eeb586b3 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + 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. + + 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) 19yy <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) 19yy 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. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/ChangeLog b/debian/gettext-kde/gettext-kde-0.10.35/ChangeLog new file mode 100644 index 00000000..8c870764 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/ChangeLog @@ -0,0 +1,990 @@ +1998-04-30 23:20 Ulrich Drepper <[email protected]> + + * configure.in: Remove commands in AC_OUTPUT. Moved into + AM_GNU_GETTEXT macro in m4/gettext.m4. + + * configure.in: Bump version number to 0.10.35. + +1998-04-28 16:07 Ulrich Drepper <[email protected]> + + * configure.in: Bump version number to 0.10.34. + Don't test for basename function. + +1998-04-27 20:36 Ulrich Drepper <[email protected]> + + * Makefile.am (AUTOMAKE_OPTIONS): Require version 1.3. + (ACLOCAL_AMFLAGS): New variable, set to -I m4. + (aclocaldir): Definition removed. + (gettextsrc_DATA): New variable, set to ABOUT_NLS. + + * configure.in: Bump version number to 0.10.33. + Define INCLUDE_LOCALE_H in gettext.m4. Remove AC_LINK_FILES line, + can now be in gettext.m4. Rewrite also m4/Makefile. + +1997-09-06 01:11 Ulrich Drepper <[email protected]> + + * configure.in: Bump version number to 0.10.32. + +1997-09-05 05:44 Ulrich Drepper <[email protected]> + + * configure.in (ALL_LINGUAS): Add da. + +1997-08-21 15:02 Ulrich Drepper <[email protected]> + + * progtest.m4: Change copyright. + * lcmessage.m4: Change copyright. + * gettext.m4: Change copyright. + +1997-08-19 03:20 Ulrich Drepper <[email protected]> + + * configure.in: Bump version number to 0.10.31. + +1997-08-18 13:47 Philippe De Muyter <[email protected]> + + * configure.in (ACLOCAL_VERSION): Do not use nested \(..\) with sed. + +1997-08-15 03:04 Ulrich Drepper <[email protected]> + + * configure.in (VERSION): Bump version number to 0.10.30. + + * acconfig.h: Change DEFAULT_ALIGNMENT to DEFAULT_OUTPUT_ALIGNMENT + to avoid clash with macro with same name in obstack.c. + Reported by Akim Demaille <[email protected]>. + +1997-08-15 12:40 Ulrich Drepper <[email protected]> + + * configure.in (VERSION): Bump to 0.10.29. + +1997-08-01 15:47 Ulrich Drepper <[email protected]> + + * configure.in: Remove obstack test. + Don't always rewrite po/Makefile.in, only if in CONFIG_FILES. + + * Makefile.am (EXTRA_DIST): Add README.gemtext. + + * Makefile.am (AUTOMAKE_OPTIONS): Require version 1.2. + +1997-05-29 12:44 Ulrich Drepper <[email protected]> + + * gettext.m4: Don't use INTLDEPS="../intl/libintl.a" which forces + a to use only one level of subdirs. Use $(top_builddir)/intl + instead. + Patch by Akim Demaille <[email protected]>. + +1997-05-01 02:26 Ulrich Drepper <[email protected]> + + * configure.in (VERSION): Bump to 0.10.28. + + * gettext.m4: Check for sys/param.h header. + Patch by Bruno Haible <[email protected]>. + + * gettext.m4: Be safe and call test with quoted arguments and + explicit -n option. + Patch by Bruno Haible <[email protected]>. + + * gettext.m4: Require AC_PROG_RANLIB. + Reported by Tom Tromey <[email protected]>. + + * gettext.m4: Remove POTFILES before generating it. + Patch by Jim Meyering <[email protected]>. + +Wed Dec 4 00:36:11 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (EXTRA_DIST): Remove @DIST-ALPHA@. + +Tue Dec 3 23:55:43 1996 Ulrich Drepper <[email protected]> + + * configure.in: Make sure aclocaldir gets substituted. + +Tue Dec 3 19:38:41 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (aclocal_DATA): Install aclocal macros for gettext. + + * configure.in: Bump version number to 0.10.26. + +Fri Nov 22 22:57:48 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (EXTRA_DIST): Add gettext.m4, lcmessage.m4, and + progtest.m4. + Reported by Tom Tromey. + +Thu Nov 21 23:07:20 1996 Ulrich Drepper <[email protected]> + + * configure.in: Use AM_INIT_AUTOMAKE. Rename various tests to + official AM_*. Write tests/Makefile. + + * aclocal.m4: Removed. The test are now in separate files. + * gettext.m4, progtext.m4, lcmessage.m4: New files. + + * Makefile.am (AUTOMAKE_OPTIONS): Require 1.1. + (MAINT_CHARSET): Latin 1 is used here. + (gettextdemodir): Removed. + (gettextdemo_DATA): Removed. + +Fri Sep 20 12:41:23 1996 Ulrich Drepper <[email protected]> + + * configure.in (ALL_LINGUAS): Add pt. + +Wed Sep 18 17:55:23 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (SUBDIRS): Change checks to tests. + +Sat Aug 31 14:19:04 1996 Ulrich Drepper <[email protected]> + + * configure.in (VERSION): Bump to 0.10.25. + +Sat Aug 31 04:50:13 1996 Ulrich Drepper <[email protected]> + + * configure.in: Add test for error which is part of GNU libc. + + * aclocal.m4: Check for gettext in libc. Necessary for GNU libc. + +Tue Aug 27 04:05:19 1996 Ulrich Drepper <[email protected]> + + * configure.in (ALL_LINGUAS): Add es. + +Sun Aug 18 18:49:34 1996 Ulrich Drepper <[email protected]> + + * configure.in: Use AM_PROG_INSTALL instead of fp_PROG_INSTALL. + + * aclocal.m4 (fp_PROG_INSTALL): Rename to AM_PROG_INSTALL. + +Fri Jul 19 12:18:55 1996 Ulrich Drepper <[email protected]> + + * configure.in: Don't use NULL in check for obstack. + +Tue Jul 16 01:51:47 1996 Ulrich Drepper <[email protected]> + + * aclocal.m4: Correct text for --with-included-gettext option. + Patch by Fran�ois Pinard. + +Sun Jul 14 01:16:19 1996 Ulrich Drepper <[email protected]> + + * configure.in (VERSION): Bump to 0.10.24. + +Sat Jul 6 01:49:26 1996 Ulrich Drepper <[email protected]> + + * configure.in (VERSION): Bump to 0.10.23. + +Tue Jul 2 16:42:20 1996 Ulrich Drepper <[email protected]> + + * configure.in (ALL_LINGUAS): Add nl. + Add AC_PROG_MKINSTALLDIRS test. + Set AC_PREREQ to 2.99 since no official autoconf has the + bugs fixed. + + * aclocal.m4: Fix check for obsolete xgettext implementation. + Patch by Marcus Daniels. + +Sat Jun 22 04:25:23 1996 Ulrich Drepper <[email protected]> + + * aclocal.m4: Define MKINSTALLDIRS. + + * configure.in (VERSION): Bump to 0.10.22. + +Wed Jun 19 01:26:09 1996 Ulrich Drepper <[email protected]> + + * configure.in (AC_REPLACE_FUNCS): Add stpncpy. + + * configure.in (VERSION): Bump to 0.10.21. + + * configure.in (AC_REPLACE_FUNCS): Add strncasecmp. + +Tue Jun 18 15:11:01 1996 Ulrich Drepper <[email protected]> + + * acconfig.h (PAGE_WIDTH): Define to 79. This allows even in + Emacs nice looking lines. + + * aclocal.m4 (md_PATH_PROG): remove macro. + (ud_PATH_PROG_WITH_TEST): New macro. Similar to AC_PATH_PROG, only + that an additional, user-given test is performed before a program + is accepted. + + Rewrite all tests for msgfmt and xgettext to use + ud_PATH_PROG_WITH_TEST to make sure no XView versions are used. + + * configure.in (ACLOCAL_VERSION): Determine version number in + aclocal.m4 file which is used in misc/gettextize. + (VERSION): Bump to 0.10.20. + +Fri Jun 14 04:07:10 1996 Ulrich Drepper <[email protected]> + + * configure.in (VERSION): Bump to 0.10.19. + +Thu Jun 13 15:19:45 1996 Ulrich Drepper <[email protected]> + + * configure.in (VERSION): Bump to 0.10.18. + +Tue Jun 11 15:02:49 1996 Ulrich Drepper <[email protected]> + + * configure.in (ALL_LINGUAS): Add `sl' for Slowenian. + + * Makefile.am (EXTRA_DIST): Add DISCLAIM. + Reported by Fran�ois Pinard. + +Sun Jun 9 12:46:31 1996 Ulrich Drepper <[email protected]> + + * configure.in (ALL_LINGUAS): Do not write intlh.inst.in, but + intlh.inst. Reported by Marcus Daniels. + +Fri Jun 7 01:51:57 1996 Ulrich Drepper <[email protected]> + + * configure.in (VERSION): Bump to 0.10.17. + +Thu Jun 6 01:55:47 1996 Ulrich Drepper <[email protected]> + + * aclocal.m4: Define USE_INCLUDED_LIBINTL in case we need the code + from the intl/ subdir. + + * configure.in: Undo patch from Wed Jun 5 00:10:36 1996. We do + need intlh.inst. + + * aclocal.m4: Remove definition of INTLSUB. Add definition of + GT_NO and GT_YES (needed in intl/Makefile.in). + +Wed Jun 5 00:10:36 1996 Ulrich Drepper <[email protected]> + + * configure.in (VERSION): Bump to 0.10.16. + + * configure.in: Don't write intlh.inst. + + * configure.in (VERSION): Bump to 0.10.15. + +Tue Jun 4 00:10:25 1996 Ulrich Drepper <[email protected]> + + * configure.in: Rewrite intl/intlh.inst.in depending on whether + <locale.h> is available or not. + Reported by Peter Miller. + + * aclocal.m4 (ud_WITH_NLS): Using `AC_CHECK_LIB(intl, main)' is + not useful. Use `AC_CHECK_LIB(intl, bindtextdomain)' instead. + Patch by Uwe Ohse. + + * configure.in (AC_REPLACE_GNU_GETOPT): Removed. We don't need + this because the getopt source itself knows when it can be + omitted. + +Mon Jun 3 00:04:55 1996 Ulrich Drepper <[email protected]> + + * aclocal.m4 (AC_REPLACE_GNU_GETOPT): Don't need this anymore. + The getopt sources should recognize when the getopt is available + in the library. + + * configure.in (VERSION): Bump to 0.10.14. + + * Makefile.am (AUTOMAKE_OPTIONS): Add variable to control Automake + behaviour. Thanks, Tom. + + * configure.in: Check for __argz_count, __argz_stringify, and + __argz_next in aclocal.m4. + * aclocal.m4: Add above checks. + + * aclocal.m4: Fix typo in --with-included-gettext handling. + +Sun Jun 2 01:50:03 1996 Ulrich Drepper <[email protected]> + + * aclocal.m4 (ud_WITH_NLS): If used in gettext always define + USE_NLS to yes. + + * configure.in: Add AC_ARG_PROGRAM. Don't write tupdate because + it does not exist anymore. + +Sat Jun 1 03:18:15 1996 Ulrich Drepper <[email protected]> + + * configure.in (VERSION): Bump to 0.10.13. Remove check for Perl. + + * configure.in: Add the test for __argz_next. + + * configure.in: We don't want to replace the __argz_* function, + just check. + + * configure.in: Add __argz_count and __argz_stringify to + AC_CHECK_FUNC list. + + * aclocal.m4 (ud_WITH_NLS): Change command line option + `--with-gnu-gettext' to `--with-included-gettext'. The former was + misleading because this option really means to ignore a possibly + installed GNU libintl. + +Sun May 26 03:09:43 1996 Ulrich Drepper <[email protected]> + + * Makefile.in (ABOUT-NLS): Don't cd to doc/ dir. Use -I option of + makeinfo instead. Patch by Tran Huu Da <[email protected]>. + +Sat May 11 11:40:17 1996 Ulrich Drepper <drepper@myware> + + * aclocal.m4: Move INSTOBJECT initialization out of recently + introduced AC_TRY_LINK macro. Reported by Jim Meyering. + +Sat May 11 00:31:40 1996 Ulrich Drepper <drepper@myware> + + * aclocal.m4: Check whether locally available libintl is GNU + gettext library. In this case we use .gmo files and share/ as + datadir. + +Wed Apr 24 23:49:29 1996 Ulrich Drepper <drepper@myware> + + * aclocal.m4 (AC_REPLACE_GNU_GETOPT): New macro by Jim Meyering. + Test for GNU's getopt implementation. + + * configure.in: Use AC_REPLACE_GNU_GETOPT. + +Thu Apr 4 23:35:56 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (ABOUT-NLS): Adapt rule for using matrix.texi. + +Thu Apr 4 01:58:14 1996 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.10.12. + +Tue Apr 2 18:55:50 1996 Ulrich Drepper <drepper@myware> + + * aclocal.m4: Test whether found xgettext program is really GNU + xgettext. Else ignore it. + + * Makefile.in (all): Do all-gettext-recursive instead of + all-recursive. We need a special all goal in intl/ because we + always have to build libintl.a. + +Tue Apr 2 17:34:55 1996 Ulrich Drepper <drepper@myware> + + * aclocal.m4: Major change!!! By default the catgets emulation is + *not* selected anymore. The installer explicitely has to select + --with-catgets. Looking at all the nice features GNU gettext and + which cannot be emulated portably using the catgets interface, it + became unreasonable to stay with the old default. + +Tue Apr 2 03:20:19 1996 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.10.11. + +Mon Apr 1 03:37:08 1996 Ulrich Drepper <drepper@myware> + + * aclocal.m4 (md_PATH_PROG): Correct quotation in message. + Reported by Tom Tromey. + +Thu Mar 28 23:03:01 1996 Karl Eichwalder <[email protected]> + + * Makefile.in (datadir): Define from @datadir@. + (gettextsrcdir): Define using $(datadir). + +Thu Mar 28 13:52:14 1996 Marcus Daniels <[email protected]> + + * aclocal.m4: Initialize CATOBJEXT. + +Wed Mar 27 03:21:24 1996 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.10.10. + +Mon Mar 25 11:20:09 1996 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.10.9. + + * acconfig.h (PAGE_WIDTH): Set to reasonable value 78. + +Mon Mar 25 01:24:12 1996 Ulrich Drepper <drepper@myware> + + * configure.in: Check for strstr() functions and add to @LIBOBJS@ + if necessary. + +Sun Mar 24 17:37:29 1996 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.10.8. + +Sat Mar 23 02:49:04 1996 Ulrich Drepper <drepper@myware> + + * aclocal.m4: Remove trailing empty lines. + (md_PATH_PROG): Move near to other definitions necessary for + internationalized packages. + +Fri Mar 1 15:04:38 1996 Ulrich Drepper <drepper@myware> + + * aclocal.m4: Reorganized tests a bit: - don't look for libi.a + when test for gettext() functions - before looking for libintl.a + look for libintl.h + + * configure.in (VERSION): Bump to 0.10.7. + +Thu Feb 29 23:43:55 1996 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.10.6. + +Thu Feb 15 04:40:53 1996 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.10.5. + + * aclocal.m4 (nls_cv_use_nls): Rename to `USE_NLS' and substitute + in Makefiles. + + * Makefile.in (SUBDIRS): Always run through `po'. + +Wed Feb 14 01:56:43 1996 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): BUMP to 0.10.4. + +Mon Feb 12 02:21:18 1996 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.10.3. + +Sat Feb 10 18:21:24 1996 Ulrich Drepper <drepper@myware> + + * configure.in (ALL_LINGUAS): Add pl. + +Thu Jan 4 12:05:01 1996 Ulrich Drepper <drepper@myware> + + * aclocal.m4 (ud_GNU_GETTEXT): Require AC_ISC_POSIX. + +Thu Jan 4 11:38:31 1996 Andreas Schwab <[email protected]> + + * aclocal.m4 (ud_WITH_NLS): Fix typo. + +Wed Jan 3 20:53:53 1996 G\vran Uddeborg <[email protected]> + + * configure.in: Add AC_ISC_POSIX test. + +Sat Dec 30 15:27:54 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4 (INTLSUB): We don't have to process it always. + +Fri Dec 29 21:14:14 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (stamp-h): Remove file before touching. + +Fri Dec 29 16:38:32 1995 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump version to 0.10.2. + +Sun Dec 24 14:27:15 1995 Ulrich Drepper <drepper@myware> + + * configure.in (ALL_LINGUAS): Add ko. + +Tue Dec 19 22:05:22 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (stamp-h, Makefile, config.status): Explicitly use + $(SHELL) for running shell scripts. + +Fri Dec 15 17:25:46 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4: Clear nls_cv_header_intl and nls_cv_header_libgt to + prevent using wrong values from cache. Reported by Andreas + Schwab. + +Sat Dec 9 18:36:42 1995 Ulrich Drepper <drepper@myware> + + * acconfig.h: Use PARAMS instead of __P. Suggested by Roland + McGrath. + +Sat Dec 9 12:22:38 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (distclean-local): Add `intl/VERSION' and remove + `tupdate.perl'. + +Fri Dec 8 01:20:28 1995 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.10.1. + +Wed Dec 6 16:03:58 1995 [email protected] <Kaveh R. Ghazi> + + * aclocal.m4 (md_TYPE_PTRDIFF_T): Fix check. + +Mon Dec 4 01:01:16 1995 Ulrich Drepper <drepper@myware> + + * acconfig.h (PAGE__WIDTH): Because tupdate does not know about + breaking lines after PAGE_WIDTH characters it is turned off for + now. When msgmerge will be used it will be enabled again. + + * configure.in (VERSION): Bump to 0.10. + +Sun Dec 3 02:22:00 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): New file BUGS. + +Sat Dec 2 03:17:10 1995 Ulrich Drepper <drepper@myware> + + * configure.in: Add handling of README-alpha file. If current + version is a test release we ship this file. Inspired by Jim + Meyering configure.in. + + * Makefile.in (DISTFILES): Add @DIST_ALPHA@. + +Tue Nov 21 02:27:48 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: Make recursion loop aware of Make's -k option. + Kudos to Jim Meyering. + + * Makefile.in (DISTFILES): Add AUTHORS. + +Mon Nov 20 20:15:12 1995 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.9.14. + +Sat Nov 18 16:38:11 1995 Ulrich Drepper <drepper@myware> + + * configure.in, aclocal.m4: Fix typo. + + * aclocal.m4, configure.in: + Now requires autoconf-2.5. Use new macro AC_CACHE_CHECK. + +Thu Nov 16 21:16:44 1995 Ulrich Drepper <drepper@myware> + + * acconfig.h (PAGE_WIDTH): Add definition. + +Sat Nov 11 17:52:03 1995 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.9.13. + +Thu Nov 9 00:29:28 1995 Ulrich Drepper <drepper@myware> + + * configure.in (AC_CHECK_FUNCS): Add getcwd. + +Tue Nov 7 13:45:47 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4: Don't prepend $INTLDEPS to $LIBS. + + * configure.in (VERSION): Bump to 0.9.12. + + * aclocal.m4 (ud_WITH_NLS): + Set LIBS to correct value and filter out -intl if necessary. + + * Makefile.in (ABOUT-NLS): Forgot to continue line. + + * aclocal.m4: Move ud_PATH_LISPDIR out of NLS region. + + * Makefile.in (uninstall-local): + Remove root-ABOUT-NLS instead of root-NLS. + +Mon Nov 6 17:27:52 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: Be consistent with rm and &&. + + * Makefile.in (ABOUT-NLS): Place file in $(srcdir). + + * Makefile.in: Eliminate duplicate all-recursive rule. + + * Makefile.in: + Renamed README.NLS to ABOUT-NLS. Never again MS-DOG names! + + * Makefile.in: Some more cleanups by Franc,ois Pinard. + + * configure.in (VERSION): Bump to 0.9.11. + + * aclocal.m4 (ud_GNU_GETTEXT): + Always create intl/ dir if it does not exist. + + * aclocal.m4 (ud_PATH_LISP): + Prefer share/ directory to lib/ directory if both exist. + + * Makefile.in (all): + Now a local call. Depends on all-local and all-recursive. + (all-local): Depend on README.NLS. + + * Makefile.in (install-src-local): + Add README.NLS as dependency. Patch by Franc,ois Pinard. + +Mon Nov 6 00:46:48 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4 (md_TYPE_PTRDIFF_T): Cache result. + + * configure.in (VERSION): Bump to 0.9.10. + +Sun Nov 5 21:58:34 1995 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.9.9. + +Sun Nov 5 21:52:22 1995 Ulrich Drepper <drepper@myware> + + * README: Move advise for using GNU getetxt to intl/nls.texi. + + * aclocal.m4: + Franc,ois reported that po2tbl.sed is not always generated. + + * README: Some typos fixed by Franc,ois Pinard. + +Sun Nov 5 19:39:05 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist-gettext): + Make synonym for dist. Recursive goal is now named + dist-gettext. + + * configure.in (VERSION): Bump to 0.9.8. + + * Makefile.in: Rename NLS to README.NLS. + Add rule for automatical generation of README.NLS. + +Sun Nov 5 11:36:53 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist): Suppress error message when ln failed. + Get files from $(srcdir) explicitly. + +Sat Nov 4 23:37:38 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4: + Fix typo: "Do not you" -> "Do not use". Reported by Tom Tromey. + +Fri Nov 3 00:03:34 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Add TODO. + +Wed Nov 1 11:38:30 1995 Ulrich Drepper <drepper@myware> + + * configure.in: + Remove AC_FUNC_MMAP. This is tested in the intl/ specific part. + + * configure.in (VERSION): Bump to 0.9.7. + +Sun Oct 29 12:02:01 1995 Ulrich Drepper <drepper@myware> + + * configure.in: Replace AC_INSTALL_PROG with fp_INSTALL_PROG. + + * aclocal.m4 (fp_PROG_INSTALL): Replace shell comments (#) by m4 + comments (dnl). This is necessary because autoconf would else + find the AC_PROG_INSTALL word in the comment and report a missing + definition. + + * aclocal.m4: Use Franc,ois' fp_PROG_INSTALL macro. + +Sat Oct 28 23:28:11 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4: + Test for dcgettext function when gettext is found in C library. This + works around the missing function in Solaris 2.3. + + * configure.in (VERSION): Bump to 0.9.6. + +Sat Oct 28 14:02:28 1995 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.9.5. + +Fri Oct 27 02:26:10 1995 Ulrich Drepper <drepper@myware> + + * THANKS: Fix typo. + + * configure.in (ALL_LINGUAS): Add sv. + + * aclocal.m4: + Use single quote where possible. Reported by Christian von Roques. + + * Makefile.in (DISTFILES): Add DISCLAIM. + +Tue Sep 26 00:53:48 1995 Ulrich Drepper <drepper@myware> + + * configure.in (md_TYPE_PTRDIFF_T): + Add this macro for type in obstack.h. + + * aclocal.m4: Handling of AC_FD_MSG is now correct in md_PATH_PROG. + + * aclocal.m4: Correct last changes. Some newline were missing. + +Mon Sep 25 22:17:09 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4 (md_PATH_PROG): + Use this new macro instead of AC_PATH_PROG for msgfmt and + xgettext program. This warns about uses of OpenWin versions (Wrgg). + (md_TYPE_PTRDIFF_T): New test. Sun's compiler does not like the + definition in obstack.h. + All provided by Marcus Daniels. + + * acconfig.h (HAVE_PTRDIFF_T): + Add symbol because Sun's compiler cannot live with + the definition in obstack.h. Reported by Marcus Daniels. + +Sat Sep 23 21:17:53 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4 (stpcpy): One argument in test can be empty. + Reported by Nelson Beebe. + +Thu Sep 21 18:05:41 1995 Ulrich Drepper <drepper@myware> + + * acconfig.h (HAVE_STPCPY): Define for autoconf work around. + + * aclocal.m4: Some strange things with autoconf-2.4.2: If a + function is tested once in AC_REPLACE_FUNCS and later with + AC_CHECK_FUNCS the second definition does not define the symbol in + the header. Work around this. + +Wed Sep 20 22:36:04 1995 Ulrich Drepper <drepper@myware> + + * acconfig.h, configure.in: Remove unneeded STD_INC_PATH definition. + +Tue Sep 19 00:09:23 1995 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.9.4. + +Sun Sep 17 17:37:45 1995 Ulrich Drepper <drepper@myware> + + * configure.in (AC_PROG_YACC): + Add check. Is now needed for msgfmt program. + +Thu Sep 7 00:19:11 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist): Don't use long --gzip option for tar. + +Tue Aug 29 23:37:44 1995 Ulrich Drepper <drepper@myware> + + * acconfig.h: Remove comment followinf #endif. We now use + indentation. Reported by Franc,ois Pinard. + +Sat Aug 19 23:21:19 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: Correct install vs install-src goals. + + * README: Add comment about alias data base. + + * Makefile.in: Remove Emacs mode selection. + + * configure.in: + Generate intl/VERSION file in configure run. config.status will *not* + create the file. + (AC_OUTPUT): Remove intl/VERSION. + + * Makefile.in: Make install call install-src-recursive and install-src. + + * Makefile.in: + Make install-local depend on install-src. I.e. the sources and + gettextize will always be installed. + + * Makefile.in: Make goal more appropriate for parallel build. + Inspired by Franc,ois Pinard. + +Fri Aug 18 23:44:56 1995 Ulrich Drepper <drepper@myware> + + * configure.in (ALL_LINGUAS): + Add no@nynorsk for nynorsk dialect of norwegian language. + Provided by norwegian translation team. + + * aclocal.m4, configure.in: Use AC_CHECK_FUNC instead of + AC_FUNC_CHECK. + + * configure.in (VERSION): Bump to 0.9.3. + + * aclocal.m4 (ud_GNU_GETTEXT): Add stpcpy to AC_REPLACE_FUNCS. + +Tue Aug 15 13:15:17 1995 Ulrich Drepper <drepper@myware> + + * configure.in (AC_OUTPUT): + Generation of intl/VERSION in extra shell code failed. Now + make it a autoconf'ed file. + + * configure.in (AC_OUTPUT): Generate intl/VERSION file. + +Tue Aug 15 05:52:53 1995 Ulrich Drepper <drepper@myware> + + * configure.in (AC_CHECK_FUNCS): Remove getcwd, putenv, and setenv. + + * Makefile.in (install-src): + Install NLS as root-NLS. Now also install aclocal.m4. + +Mon Aug 14 23:51:36 1995 Ulrich Drepper <drepper@myware> + + * configure.in (AC_OUTPUT): + Rewrite misc/gettextize instead of misc/makelinks. + + * Makefile.in (prefix, gettextsrcdir): + Directory values needed for installation. + (INSTALL, INSTALL_DATA): Programs now needed for installing NLS file. + (install-src, install-src-recursive): New rules for installing gettext + sources for use in gettextize shell script. + +Sun Aug 13 14:38:19 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4 (AC_CHECK_FUNCS): + Unless the AC_FUNC_MMAP function does not check for the + existence of the munmap function (which does not exist on NeXT) + we do it ourself. Report by Marcus Daniels. + + * aclocal.m4: + Generate po/POTFILES correct even if srcdir is an absolute path. + Report by Marcus Daniels. + +Wed Aug 9 01:21:56 1995 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.9.2. + + * README: Mention points for normal user to install GNU gettext. + +Tue Aug 8 21:34:12 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4 (AC_REPLACE_FUNCS): New, to test for strcasecmp. + + * aclocal.m4: Fix typo: ditribution -> distribution. + Report by Franc,ois Pinard. + +Mon Aug 7 22:52:43 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4 (ud_GNU_GETTEXT): + Add AC_REQUIRE(...) for all test necessary for intl/ + subdirectory. + (AC_CHECK_HEADERS): Add limits.h, malloc.h, string.h, unistd.h, + and values.h. + (AC_CHECK_FUNCS): Add getcwd, putenv, setenv, strchr. + Reported by Franc,ois Pinard. + + * configure.in (AC_REPLACE_FUNCS): + strcspn is now placed here instead of in AC_CHECK_FUNCS. + (AC_HAVE_HEADERS): Don't test for stdlib.h. + Reported by Franc,ois Pinard. + +Fri Aug 4 22:16:58 1995 Ulrich Drepper <drepper@myware> + + * configure.in (Version): Bump to 0.9.1. + + * configure.in (AC_OUTPUT): Remove unneeded `;'. + + * Makefile.in (dist): Remove `copying instead' message. + + * Makefile.in (dist): Change mode of directories to 777. + Add option -o to tar command. + +Wed Aug 2 19:37:09 1995 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.9. + + * configure.in (AC_OUTPUT): + Add new file misc/makelinks and make it executable. + +Tue Aug 1 22:51:27 1995 Ulrich Drepper <drepper@myware> + + * acconfig.h: Remove unneeded definition of HAVE_ASPRINTF. + + * Makefile.in (SUBDIRS): + make int doc/ first and unconditionally make in intl/. + + * configure.in (VERSION): Bump to 0.8.2. + +Sun Jul 30 12:12:40 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4 (ud_WITH_NLS): + Don't define INTLOBJS when using systems gettext. + Always define DATADIRNAME. + Don't compute catalogs to be installed when --disable-nls is + selected. + +Sat Jul 29 23:22:39 1995 Ulrich Drepper <drepper@myware> + + * configure.in (ALL_LINGUAS): Add norwegian catalog. + +Sat Jul 22 01:13:06 1995 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.8.1. + (ud_PATH_SITELISP): Replace with call to ud_PATH_LISPDIR. + + * aclocal.m4 (ud_EMACS_TRY_PREFIX): Remove rule. + (ud_PATH_SITELISP): Rename to ud_PATH_LISPDIR and simplify it it. + By Fran�ois Pinard. + +Wed Jul 19 02:22:18 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4 (ud_PATH_SITELISP): + If no Emacs program is found define ac_cv_path_sitelisp + to `no'. + + * configure.in (GETTEXTPRG): + Remove variable. Always create and install gettext. + +Tue Jul 18 20:09:41 1995 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.8. + +Tue Jul 18 01:32:09 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Remove magic.add. Now in misc/. + (SUBDIRS): Add misc. + + * README: Fix typo: one -> once. Reported by Franc,ois Pinard. + Mention that magic.add is now found in misc/. + + * configure.in (VERSION): Bump to 0.7.5. + (AC_OUTPUT): Add misc/Makefile. + + * aclocal.m4 (ud_PATH_SITELISP): + Remove command for test files was incorrectly placed. + +Tue Jul 18 00:27:22 1995 Ulrich Drepper <drepper@myware> + + * magic.add: Moved to misc/. + + * acconfig.h: Uniform test for __STDC__. + +Mon Jul 17 00:23:22 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4 (ud_PATH_SITELISP): + Try path given with configures --prefix option. + +Sun Jul 16 22:36:07 1995 Ulrich Drepper <drepper@myware> + + * configure.in (SITELISPDIR, ELCFILES): + Test for Emacs and generation of substition values + is extended and now found in aclocal.m4. + + * aclocal.m4 (ud_PATH_SITELISP, ud_EMACS_TRY_PREFIX): + New rules to test for Emacs' site-lisp directory. + +Sun Jul 16 00:09:24 1995 Ulrich Drepper <drepper@myware> + + * configure.in (ELCFILES): + Substitute as Make variable: $(ELCFILES) instead of $ELCFILES. + Reported by Eric Backus. + + * configure.in (VERSION): Bump to 0.7.4. + +Sat Jul 15 00:48:11 1995 Ulrich Drepper <drepper@myware> + + * acconfig.h (INVALID_PATH_CHAR): De-ANSI-fy string. + + * configure.in (VERSION): Bump to 0.7.3. + (AC_CHECK_FUNCS): Add mblen. + (AC_OUTPUT): Due shorted file names now write src/tupdate. + +Thu Jul 13 22:35:36 1995 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.7.2. + +Thu Jul 13 01:40:17 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4: po-to-msg.sed and po-to-tbl.sed are now called + po2msg.sed and po2tbl.sed resp. + + * configure.in: Check for Emacs. + If Emacs exists, enable regeneration of *.elc files. + (AC_OUTPUT): New file checks/Makefile. + + * Makefile.in (SUBDIRS): New subdirectory `checks'. + New goal check: simply recurse through all subdirectories. + +Wed Jul 12 00:26:12 1995 Ulrich Drepper <drepper@myware> + + * NLS: New version by Franc,ois Pinard. + +Tue Jul 11 21:43:49 1995 Ulrich Drepper <drepper@myware> + + * acconfig.h (WARN_ID_LEN): + new constant. Specifies length of messages from which + on warnings are given to prevent breaking limits of compilers and + tools. + + * configure.in (AC_OUTPUT): tupdate.perl is now found in src/ + +Tue Jul 11 01:30:24 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4 (ud_GNU_GETTEXT): Construct po-to-tbl.sed + by removing comments. + + * configure.in: Don't have default path for Perl. + strtoul can now be substituted when necessary. + +Tue Jul 4 22:27:48 1995 Ulrich Drepper <drepper@myware> + + * configure.in (VERSION): Bump to 0.7.1. + + * aclocal.m4 (ud_GNU_GETTEXT): Correct loop for determining LINGUAS. + + * configure.in (AC_REPLACE_FUNCS): Add memmove. + +Tue Jul 4 00:22:30 1995 Ulrich Drepper <drepper@myware> + + * aclocal.m4: aclocal.m4: Create intl/ before writing sed script. + +Sun Jul 2 01:51:36 1995 Ulrich Drepper <drepper@myware> + + * First official release. This directory solely contains + the usual configuration stuff. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/DISCLAIM b/debian/gettext-kde/gettext-kde-0.10.35/DISCLAIM new file mode 100644 index 00000000..02ac8834 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/DISCLAIM @@ -0,0 +1,62 @@ +Please print this out, sign it, write the date, and snail it to +this address: + +Richard Stallman +545 Tech Sq rm 425 +Cambridge, MA 02139 +USA + +Please print your email and snail addresses on the printed disclaimer. +*Don't forget to include the date.* + +In the unlikely event that you are employed on a continuing basis to do +translation, we may need a disclaimer from your employer as well, to assure +your employer does not claim to own this work. Please contact the FSF to +ask for advice if you think this may apply to you. + +Note: if you want the wording modified to cover only a specific category +of programs, or a specific program, we can easily do that. + + + DISCLAIMER OF COPYRIGHT IN TRANSLATIONS OF PARTS OF PROGRAMS + +I, _____________________________________, +a citizen of _____________ (country), do +hereby acknowledge to the Free Software Foundation, a not-for-profit +corporation of Massachusetts, USA, that I disclaim all copyright +interest in my works, which I have provided or will in the future +provide to the Foundation, of translation of portions of free software +programs from one human language to another human language. The +programs to which this applies includes all programs for which the +Foundation is the copyright holder, and all other freely +redistributable software programs. + +The translations covered by this disclaimer include, without +limitation, translations of textual messages, glossaries, command or +option names, user interface text, and the like, contained within or +made for use via these programs. + + Given as a sealed instrument this ___ day of ______ (month), ______ +(year), at _____________________ (city and country). + + + signed: ___________________________ + + email address: ___________________________ + + postal address: ___________________________ + + ___________________________ + + ___________________________ + + + +I currently expect to work on the following translation teams (though +this disclaimer applies to all translations I may subsequently work +on): + + + __________________________________________________ + + __________________________________________________ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/INSTALL b/debian/gettext-kde/gettext-kde-0.10.35/INSTALL new file mode 100644 index 00000000..b42a17ac --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/INSTALL @@ -0,0 +1,182 @@ +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/Makefile.am b/debian/gettext-kde/gettext-kde-0.10.35/Makefile.am new file mode 100644 index 00000000..00dab09b --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/Makefile.am @@ -0,0 +1,35 @@ +## Makefile for the toplevel directory of the GNU NLS Utilities +## Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, 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. + +## Process this file with automake to produce Makefile.in. + +AUTOMAKE_OPTIONS = 1.3 gnits +MAINT_CHARSET = latin1 +ACLOCAL_AMFLAGS = -I m4 + +gettextsrcdir = $(datadir)/gettext +gettextsrc_DATA = ABOUT-NLS + +EXTRA_DIST = BUGS DISCLAIM README.gemtext +SUBDIRS = doc lib intl src po m4 misc tests + +DISTCLEANFILES = intl/libintl.h + +ABOUT-NLS: $(srcdir)/doc/nls.texi $(srcdir)/doc/matrix.texi + rm -f $(srcdir)/ABOUT-NLS \ + && $(MAKEINFO) --output=$(srcdir)/ABOUT-NLS --no-header \ + -I $(srcdir)/doc --no-validate nls.texi diff --git a/debian/gettext-kde/gettext-kde-0.10.35/Makefile.in b/debian/gettext-kde/gettext-kde-0.10.35/Makefile.in new file mode 100644 index 00000000..2c5173bd --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/Makefile.in @@ -0,0 +1,391 @@ +# Makefile.in generated automatically by automake 1.3 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = . + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +ACLOCAL_VERSION = @ACLOCAL_VERSION@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +DATADIRNAME = @DATADIRNAME@ +EMACS = @EMACS@ +GENCAT = @GENCAT@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GT_NO = @GT_NO@ +GT_YES = @GT_YES@ +INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ +INSTOBJEXT = @INSTOBJEXT@ +INTLDEPS = @INTLDEPS@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +LD = @LD@ +LIBOBJS = @LIBOBJS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +NM = @NM@ +PACKAGE = @PACKAGE@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +YACC = @YACC@ +aclocaldir = @aclocaldir@ +l = @l@ +lispdir = @lispdir@ + +AUTOMAKE_OPTIONS = 1.3 gnits +MAINT_CHARSET = latin1 +ACLOCAL_AMFLAGS = -I m4 + +gettextsrcdir = $(datadir)/gettext +gettextsrc_DATA = ABOUT-NLS + +EXTRA_DIST = BUGS DISCLAIM README.gemtext +SUBDIRS = doc lib intl src po m4 misc tests + +DISTCLEANFILES = intl/libintl.h +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +DATA = $(gettextsrc_DATA) + +DIST_COMMON = README ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL \ +Makefile.am Makefile.in NEWS README-alpha THANKS TODO acconfig.h \ +aclocal.m4 config.guess config.h.in config.sub configure configure.in \ +install-sh ltconfig ltmain.sh missing mkinstalldirs stamp-h.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP = --best +all: all-recursive-am all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnits --include-deps Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(ACLOCAL_M4): configure.in m4/gettext.m4 m4/lcmessage.m4 \ + m4/progtest.m4 + cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + +config.status: $(srcdir)/configure + $(SHELL) ./config.status --recheck +$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) + +config.h: stamp-h + @: +stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES= CONFIG_HEADERS=config.h \ + $(SHELL) ./config.status + @echo timestamp > stamp-h +$(srcdir)/config.h.in: $(srcdir)/stamp-h.in +$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h + cd $(top_srcdir) && $(AUTOHEADER) + @echo timestamp > $(srcdir)/stamp-h.in + +mostlyclean-hdr: + +clean-hdr: + +distclean-hdr: + -rm -f config.h + +maintainer-clean-hdr: + +install-gettextsrcDATA: $(gettextsrc_DATA) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir) + @list='$(gettextsrc_DATA)'; for p in $$list; do \ + if test -f $(srcdir)/$$p; then \ + echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(gettextsrcdir)/$$p"; \ + $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(gettextsrcdir)/$$p; \ + else if test -f $$p; then \ + echo " $(INSTALL_DATA) $$p $(DESTDIR)$(gettextsrcdir)/$$p"; \ + $(INSTALL_DATA) $$p $(DESTDIR)$(gettextsrcdir)/$$p; \ + fi; fi; \ + done + +uninstall-gettextsrcDATA: + @$(NORMAL_UNINSTALL) + list='$(gettextsrc_DATA)'; for p in $$list; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$p; \ + done + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. + +@SET_MAKE@ + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + target=`echo $@ | sed s/-recursive//`; \ + echo "Making $$target in $$subdir"; \ + (cd $$subdir && $(MAKE) $$target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + done; \ + for subdir in $$rev; do \ + target=`echo $@ | sed s/-recursive//`; \ + echo "Making $$target in $$subdir"; \ + (cd $$subdir && $(MAKE) $$target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + (cd $$subdir && $(MAKE) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + -rm -rf $(distdir) + GZIP=$(GZIP) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; \ + cd $(distdir)/=build \ + && ../configure --with-included-gettext --srcdir=.. --prefix=$$dc_install_base \ + && $(MAKE) \ + && $(MAKE) dvi \ + && $(MAKE) check \ + && $(MAKE) install \ + && $(MAKE) installcheck \ + && $(MAKE) dist + -rm -rf $(distdir) + @echo "========================"; \ + echo "$(distdir).tar.gz is ready for distribution"; \ + echo "========================" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +distdir: $(DISTFILES) + @if sed 15q $(srcdir)/NEWS | fgrep -e "$(VERSION)" > /dev/null; then :; else \ + echo "NEWS not updated; not releasing" 1>&2; \ + exit 1; \ + fi + -rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done + for subdir in $(SUBDIRS); do \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + done +info: info-recursive +dvi: dvi-recursive +check: all-am + $(MAKE) check-recursive +installcheck: installcheck-recursive +all-recursive-am: config.h + $(MAKE) all-recursive + +all-am: Makefile $(DATA) config.h + +install-data-am: install-gettextsrcDATA + +uninstall-am: uninstall-gettextsrcDATA + +install-exec: install-exec-recursive + @$(NORMAL_INSTALL) + +install-data: install-data-recursive install-data-am + @$(NORMAL_INSTALL) + +install: install-recursive install-data-am + @: + +uninstall: uninstall-recursive uninstall-am + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: installdirs-recursive + $(mkinstalldirs) $(DATADIR)$(gettextsrcdir) + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic + +clean-am: clean-hdr clean-tags clean-generic mostlyclean-am + +distclean-am: distclean-hdr distclean-tags distclean-generic clean-am + +maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \ + maintainer-clean-generic distclean-am + +mostlyclean: mostlyclean-recursive mostlyclean-am + +clean: clean-recursive clean-am + +distclean: distclean-recursive distclean-am + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-recursive maintainer-clean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + -rm -f config.status + +.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ +uninstall-gettextsrcDATA install-gettextsrcDATA install-data-recursive \ +uninstall-data-recursive install-exec-recursive \ +uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ +all-recursive check-recursive installcheck-recursive info-recursive \ +dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ +installcheck all-recursive-am all-am install-data-am uninstall-am \ +install-exec install-data install uninstall all installdirs \ +mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +ABOUT-NLS: $(srcdir)/doc/nls.texi $(srcdir)/doc/matrix.texi + rm -f $(srcdir)/ABOUT-NLS \ + && $(MAKEINFO) --output=$(srcdir)/ABOUT-NLS --no-header \ + -I $(srcdir)/doc --no-validate nls.texi + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/NEWS b/debian/gettext-kde/gettext-kde-0.10.35/NEWS new file mode 100644 index 00000000..8165cd61 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/NEWS @@ -0,0 +1,164 @@ +Version 0.10.35 - April 1998, by Ulrich Drepper + +* by default the emulation of gettext using the catgets() functions of + the C library is not selected anymore. GNU gettext has so many nice + extensions that this became unreasonable. Using --with-catgets the + emulation still can be requested. + +* extend xgettext program to handle other file formats other than C/C++. + For now it also handles PO file. Using this feature one can concatenate + arbitrary PO files. + +* Tcl module with gettext interface + +* Korean translation by Bang Jun Young + +* xgettext writes to stdout when default domain name is set to - + +* codeset name normalization + +* msgmerge program now has all features tupdate has (and more). + tupdate itself will be removed soon + +* po/Makefile.in.in now uses msgmerge instead of tupdate + +* escape notation in .po files are only used when explicitly selected + +* changed interface of msgunfmt to conform to GNU coding standard + +* msgmerge now knows how to handle obsolete entries. If a formerly obsolete + entry is used again msgmerge will find it + +* better implementation of comment extraction in xgettext. + +* better C format string implementation. The xgettext will classify + strings as being a format string, or not, in the .po file. The + programmer can override the decision explicitly for each string + by specifying `xgettext:c-format' and `xgettext:no-c-format' + respectively in a C comment preceding the string. + +* msgmerge program now always produces output. Fuzzy or non-existing + translations are no reason for holding back the result. + +* reasonable header entry format implemented + +* Norwegian translation by Karl Anders �ygard + +* Configure command line option `--with-gnu-gettext' is renamed to + `--with-included-gettext' + +* gettextize now can determine whether the aclocal.m4 of the project + is sufficent + +* use automake for Makefile.in generation + +* by default now only c-format is emitted in xgettext. If using the new + --debug option one can enable printing possible-c-format to see who + decided about the string: xgettext or the programmer + +* the installed libintl.h file no longer depends on HAVE_LOCALE_H being + defined. After running configure we know whether this file exists. + +* wrapping of lines in PO file output finally enabled. + A new special comment no-wrap prevents wrapping. + +* add --statistics option to msgfmt to get information about number of + translated, untranslated, and fuzzy messages + +* change behaviour of --verbose option to msgfmt. This no longer + causes the check on the messages to be performed. The check for leading + and trailing \n is always performed and the check of the format specifiers + is performed when --check is given. + +* shared library support based On Gord Matzigkeit's libtool package + +* msgcomm program by Peter Miller to extract messages shared by input + files + +* many more translations. + +Version 0.10 - December 1995, by Ulrich Drepper + +* implement --shell-script option for gettext program + +* implement object-oriented, lazy message handling :-) + Consult the manual for more/any information + +* implement locale name aliasing, similar to the one used + in the X Window System + +* support for GNU gettext sources in central place to support + use in development environments of other projects + +* implement CEN syntax for environment variable values + +* msgcmp program to find matches in two .po files + +* programs now have exit status != 0 if errors occured + +* libintl.a is now selfcontained and can be used without context in + other projects (even on systems missing alloca) + +* gettextize now automatically runs config.status + +* swedish message catalog + +* new options for xgettext: -D/--directory to change in specified directory + before processing the input files and -f/--files-from to specify file from + which the names of the input files are read. + The later option in necessary for large projects such as GNU C Library. + +* new programs msgmerge and msgunfmt by Peter Miller. The code of the other + programs is now also much cleaner. + +Version 0.9 - August 1995, by Ulrich Drepper + +* again many improvements on the manual + +* norwegian message catalog + +* compilation now works with --disable-nls + +* better checks + +Version 0.8 - July 1995, by Ulrich Drepper + +* much improved manual (although still far from being complete) + +* improved PO mode; it now can prepare C sources for use with gettext + by marking translatable strings + +* better support for sparse System V systems + +* check goal (kind of) + +* more input tests and warnings + +* better support for integration in other packages + +* many bugs fixed + +Version 0.7 - June 1995, by Ulrich Drepper + +* New GNU package providing functionality to internationalize and +localize other programs. + +* Implementation of the Uniforum(*) proposal for internationalization +on top of X/Open(*) style catgets functions. + +* Complete implementation of the Uniforum functions for system +lacking either of them or those who which to have a different +implementation with many advantages. + +* Implementation of the three tools for message catalog handling +described in the Uniforum. + +* Emacs po-mode for handling portable message object files which are +the basis of the work of the package. + + +(*) Some history: The POSIX working groups have so far been unable to +agree on one set of message catalog handling functions for the C Library. +For now there are competing proposals, one by the Uniforum group, led by +Sun, and the other by X/Open. Although the latter is surely implemented +on more systems, it is not perceived as the clear leader. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/README b/debian/gettext-kde/gettext-kde-0.10.35/README new file mode 100644 index 00000000..66c49ed7 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/README @@ -0,0 +1,176 @@ +This is the GNU gettext package. It is interesting for authors or +maintainers of other packages or programs which they want to see +internationalized. As one step the handling of messages in different +languages should be implemented. For this task GNU gettext provides +the needed tools and library functions. + +Users of GNU packages should also install GNU gettext because some +other GNU packages will use the gettext program included in this +package to internationalize the messages given by shell scripts. + +Another good reason to install GNU gettext is to make sure the +here included functions compile ok. This helps to prevent errors +when installing other packages which use this library. The message +handling functions are not yet part of POSIX and ISO/IEC standards +and therefore it is not possible to rely on facts about their +implementation in the local C library. If the installer selects +it, GNU gettext tries using the systems functionality; in that +case, compatibility problems might occur. + +We felt that the Uniforum proposals has the much more flexible interface +and, what is more important, does not burden the programmers as much as +the other possibility does. + + +Please share your results with us. If this package compiles ok for +you future GNU release will likely also not fail, at least for reasons +found in message handling. Send comments and bug reports to + + +The goal of this library was to give a unique interface to message +handling functions. At least the same level of importance was to give +the programmer/maintainer the needed tools to maintain the message +catalogs. The interface is designed after the proposals of the +Uniforum group. So systems having this interface implemented in their +C library don't need the library provided here (and it will +automatically not be included). If your systems C library implements +the second widely available approach (X/Opens catgets) the library +can use this and only some stubs will be compiled to provide the +needed interface. If neither is locally available a full +implementation of the library will be compiled. + +The configure script provides three non-standard options. These will +also be available in other packages if they use the functionality of +GNU gettext. Use + + --disable-nls + +if you absolutely don't want to have messages handling code. You will +always get the original messages (mostly English). You could consider +using NLS support even when you do not need other tongues. If you do +not install any messages catalogs or do not specify to use another but +the C locale you will not get translations. + +The set of languages for which catalogs should be installed can also be +specified while configuring. Of course they must be available but the +intersection of these two sets are computed automatically. You could +once and for all define in your profile/cshrc the variable LINGUAS: + +(Bourne Shell) LINGUAS="de fr nl"; export LINGUAS + +(C Shell) setenv LINGUAS "de fr nl" + +or specify it directly while configuring + + env LINGUAS="de fr nl" ./configure + +Consult the manual for more information on language names. + +The second configure option is + + --with-included-gettext + +This forces to use the GNU implementing the message handling library +regardless what the local C library provides. This possibility is +much less error prone because possible unreliable effects of the local +message handling system are avoided. And perhaps more important: many +useful features can only be exploited with this library. The reason +is obvious: we cannot dig in the internals of other implementations. +It is likely that the discrepancy between the GNU implementation and +others will get bigger in the time coming. So better change now! + +The third option is: + + --with-catgets + +The X/Open catgets functions which might be found in the local C +library are not used by default. The reason is already described +above: the GNU gettext library provides many useful extension which +cannot be emulated with catgets(). Beside this the utility programs +for generating the catalog used by catgets() vary heavily between +different systems. You should select this feature only if you really +don't want to use the GNU gettext library and do not want to extended +functionality (but I do not see any good reason for such a choice). + + +Other files you might look into: + +`ABOUT-NLS' - current state of the GNU internationalization effort +`COPYING' - copying conditions +`INSTALL' - general compilation and installation rules +`NEWS' - major changes in the current version +`THANKS' - list of contributors + + +Some points you might be interested in before installing the package: + +1. If you change any of the files in package the Makefile rules will + schedule a recompution of the gettext.pot file. But this is not + possible without this package already installed. + If you don't have this package already installed and modified + any of the files build the package first with + --disable-nls + When this is done you will get a runnable xgettext program which + can be used to recompute gettext.pot. + +2. The package contains a file misc/magic.add. This is intended to be + added to your /etc/magic file. After adding this the `file' command + will recognize GNU message catalog files (.mo files). + +3. If your system's C library already provides the gettext interface + it might be a good idea to configure the package with + --program-prefix=g + + Systems affected by this are: + Solaris 2.x, future GNU and GNU/Linux systems + + One point to mention here is that at least Solaris 2.3 does not have + all function of the Uniforum proposal implement. More specific, the + dcgettext() function is missing. For programmers/maintainers it + is therefore nowaday better to avoid using this function. + +4. Some system have a very dumb^H^H^H^Hstrange version of msgfmt, the + one which comes with xview. This one is *not* usable. It's best + you delete^H^H^H^H^H^Hrename it or install this package as in the + point above with + --program-prefix=g + +5. On some system it is better to have strings aligned (I've been told + Sparcs like strings aligned to 8 byte boundaries). If you want to + have the output of msgfmt aligned you can use the -a option. But you + also could change the default value to be different from 1. Take + a look at the config.h file, built by configure. + (If you change the default value the test of msgfmt will fail!) + +6. The locale name alias scheme implemented here is in a similar form + implemented in the X Window System. Especially the alias data base + file can be shared. Normally this file is found at something like + + /usr/lib/X11/locale/locale.alias + + If you have the X Window System installed try to find this file and + specify the path at the make run: + + make aliaspath='/usr/lib/X11/locale:/usr/local/lib/locale' + + (or whatever is appropriate for you). The file name is always + locale.alias. + In the misc/ subdirectory you find an example for an alias database file. + +7. The msgmerge program performs fuzzy search in the message sets. It + might run a long time on slow systems. I saw this problem when running + it on my old i386DX25. The time can really be several minutes, + especially if you have long messages and/or a great number of + them. + If you have a faster implementation of the fstrcmp() function and + want to share it with the rest of use, please contact me. + +8. On some systems it will not be possible to compile this package. + It is not only this package but any other GNU package, too. These + systems do not provide the simplest functionality to run configure. + Today are known the following systems: + + configure name description + -------------- ----------- + mips-mips-riscos 2.1.1AC RISCos diff --git a/debian/gettext-kde/gettext-kde-0.10.35/README-alpha b/debian/gettext-kde/gettext-kde-0.10.35/README-alpha new file mode 100644 index 00000000..633fa11e --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/README-alpha @@ -0,0 +1,5 @@ +This is a test release of GNU gettext. +Please do not send reports about this release to any +GNU mailing list or newsgroup. + +Please send comments and problems to [email protected]. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/README.gemtext b/debian/gettext-kde/gettext-kde-0.10.35/README.gemtext new file mode 100644 index 00000000..9079f1ac --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/README.gemtext @@ -0,0 +1,435 @@ +$Revision: 1.1 $ +$Date: 1997/05/01 10:44:54 $ +20 +!!! README for gemtext. !!! +If you think the above mentioned date is old check out +http://stud.uni-sb.de/~gufl0000/atari/gemtext. You will find the latest +version there. You will also find links to ftp sites from where you can +download gemtext via anonymous ftp. + +See the file INSTALL for installing gemtext. +See the file COPYING for licensing. +See the file NEWS for information that is not covered by either this file +or the provided manual pages. All information concerning features of +gemtext included in any text file that comes along with this package is +subject to change without notice! + +========================================================================== + +This is the gemtext package. The gemtext package offers standardized i18n +(internationalization) features for GEM programs. The package is intended +to help programmers to internationalize their programs. If you aren't a +programmer you might want to read the file ABOUT-NLS to get an idea of +national language support. But you won't need gemtext. + +GEM is a registered trademark of Digital Research Company. GEM is mainly +used on Atari computers or the various emulations available today on other +platforms. You can also find the so-called PC-GEM for IBM compatible +machines. If you neither use an Atari nor emulate the Atari's OS you +won't need gemtext too. Still it might be a good idea to have a look at +the file ABOUT-NLS. + +All programs and libraries contained in this package will work on their +own, only depending on some executables and libraries that can be found in +most Unix-like environments. Yet, you will only benefit from gemtext if +you have the GNU gettext package or another internationalization package +that can be compared with gettext already installed. You will find the +latest version of GNU gettext at + + ftp://prep.ai.mit.edu/pub/gnu + +It compiles without any problems with the GNU C-compiler and MiNTLib PL46. +(Well, there's a little problem: If your msgfmt keeps on crashing with a +bus error try to replace the module obstack.o in your MiNTLib with the +obstack.c that comes along with GNU gettext. But this is a bug in the +MiNTLib and not in GNU gettext.) + +In the following I will refer to any computer that can make use of +xgemtext as 'Atari'. I also expect you to be familiar with the C +programming language and with the well known data structures and function +calls that are necessary for programming GEM applications. + +He, she, they... Quote from the gettext info file: + "In this manual, we use *he* when speaking of the programmer or + maintainer, *she* when speaking of the translator, and *they* when + speaking of the installers or end users of the translated program. + This is only a convenience for clarifying the documentation. It + is *absolutely* not meant to imply that some roles are more + appropriate to males or females. Besides, as you might guess, GNU + `gettext' is meant to be useful for people using computers, + whatever their sex, race, religion or nationality!" + +Last but not least: xgemtext is written in C++. Hence you will need a +C++ compiler to compile the package. GNU C++ is a good choice if you +don't already have one. If you don't have the system resources to run the +compiler you will have to try to get an already compiled version. Good +news: The library (which is the more important part of the gemtext +package) is entirely written in plain C to allow easy porting to different +compiler systems. + + + +CONTENTS +======== + 1. Why gemtext? + 2. Alternatives for i18n + 3. How to use the GNU gettext package + 4. How to use the gemtext package + 5. The library rintl + 6. Charsets: Atari versus ISO-Latin 1 + 7. Miscellanea + + + +1. Why gemtext? +=============== + +The Atari's GUI (Graphical User Interface) offers possibilities for +native language support for a long time already. All necessary graphical +data and text for the user interface is usually kept in a so-called +resource file. For example the program foobar.app will normally look for +the resource file foobar.rsc in the same directory. A programmer aware of +i18n will usually provide several of these resource file each of them +containing the entire data in different languages, called e. g. en.rsc, +fr.rsc, it.rsc and so on. The users have to rename the particular +resource file in their language to foobar.rsc and the program will still +behave the same but will display its messages in the chosen language. + +This procedere is suboptimal for various reasons. + +- The most obvious one is that you keep loads of redundant data in the + extra provided resouce files. Usually the strings in the resource + files occupy very little space in comparison to the graphical data. + +- GEM applications usually expect their resource files to reside at a + fixed location and to have a fixed name. Hence, in a multi-user + environment you have to choose one particular language for each + application or you have to keep different copies of both your resource + and other data files. + +- Once you have decided to include your resources into your source code + you have to say goodbye to the idea of i18n. + +- Probably the most important disadvantage of the current system is the + effort you have to take in updating your applications. Whenever you + have changed the tree structure in your resource file you will have to + edit every other resource file immediately if you do the translation + yourself. If you let somebody else do your translations she will have + enormous difficulties. She will have to click through the entire + resource tree, taking care not to change the data structures + unwillingly, and picking out the texts that have changed. If you + haven't found some trickier system it is probably easier to restart the + translation from the beginning. + +- Whenever your application has to display a message you have to edit + your resource file even for little ones like: + + form_alert (1, "[1][ Memory exhausted! ][ Damned ]"); + + Every string that has to be translated has to appear in the resource + file. Considering that most resource file formats are restricted to 64 + kB of length and that most GEM libraries can handle only one single + resource file this is often a severe restriction in the design of the + GUI. + + + +2. Alternatives for i18n +======================== + +As far as programs are concerned that have to be run via a command line +interpreter, there is already a portable, standardized system for message +internationalization, the GNU gettext package. It offers tools for +preparing all kinds of source files for i18n, tools that help both the +programmer and translator to keep track of updated versions (and the +maintainers, too) and it comes along with a free C library that gives +access to the translated messages at runtime of the program depending on +the setting of documented environment variables. + +You should get a copy of the GNU gettext package now. Yet, if you are too +curious to download it at once, just go ahead but you might want to reread +this file later as it refers to information that is available only with +the GNU gettext package. + +The gemtext package should also be useful with NLS-packages (Native +Language Support) other than GNU gettext to the degree that GNU gettext +itself is compatible with other standardized packages. Yet, it has been +only tested with GNU gettext as it is the only available one for Atari. + + + +3. How to use the GNU gettext package +===================================== + +Forget about the whole GUI thing for a short while to get roughly an idea +of programming with the GNU gettext package. We'll come back to the GUI +shortly. + +NOTE: This section isn't meant to be an exhaustive description of the GNU +gettext package. It is intended to give you an overview. If you already +know the GNU gettext package you might safely skip this section. + +Localizing messages in a C program is very easily done. At first you need +some (usually three) lines of extra code to tell the NLS library functions +where to find the translated messages. Then you have to go through your +code and decide for every string whether you want to get it translated or +not. Strings that should be translated have to be embedded in a function +call to gettext (). Thus instead of writing: + + printf ("Hello world!\n"); + +you would now write + + printf (gettext ("Hello world!\n")); + +When you're fed up with typing g-e-t-t-e-x-t over and over again you will +follow the habit of most of your colleagues and + + #define _(s) gettext (s) + +well knowing that now only three extra keystrokes will make the rest of +the world happy. + +Very handy, very easy, isn't it? Unfortunately it doesn't work if you use +strings for example in initialized structures or arrays. Really? Just to +make sure that you don't abandon the whole thing already, I will tell you +a secret: It still works! Read the gettext info file and follow the +nodes Sources -> Special cases. + +After having marked all translatable strings in your sources you will want +to extract them for translation by + + xgettext *.c + +producing a file messages.po that contains both the original strings and +space for the translations. After the file being translated you will +compile it into a binary by a call to the program msgfmt. This binary +file will then usually be moved to + + /usr/(local/)share/locale/de/LC_MESSAGES/foobar.mo + +provided that your program has been translated into German ('de' is the +ISO-639 2-letter country code for Germany). + +Now you set one of the envariables LANGUAGE, LANG or LC_ALL to 'de' and +recompile your sources. Your linker will then complain about the +reference to 'gettext' not being resolved and you will fix the problem by +linking the program with the 'intl'-library that comes along with gettext +(and gemtext, too). Surprise, surprise! Your program has learned to say +hello to the world in yet another language. + +After long and satisfying experiences with your chef-d'oeuvre you might +feel that it is not enough to say hello to the world. You want to say +hello to the whole universe, too. So what now? Redo the whole thing? +No! You simply update your sources and extract a new messages file. +Before translating the file entirely again you should have msgmerge have a +glimpse at both the original and the updated file. The program msgmerge +is very clever and will probably guess what you have done. It will +produce a new .po file that will already contain the strings you have +translated the last time. It will also not cast away those strings that +you do not care to translate any longer. It will comment them out +instead, thus allowing you to change your mind again later. This feature +is also very handy for corrected misspellings or minor modifications to +strings. If msgmerge encounters such a case it will mark the maybe +incorrect translation it guesses to be best as a "fuzzy" translation. If +you agree with msgmerge, simply remove the "fuzzy" comment. + +Well, that's it in brief. Again, if you want to understand the GNU +gettext package in its whole powerfulness you can't help reading the +documentation. + + + +4. How to use the gemtext package +================================= + +Probably you have already seen that it's no longer necessary to put +strings for alert boxes or other free strings in your resource files. +What has worked with printf will work with form_alert, too. + +And what about resources integrated in your source files? Why not? Most +resource construction sets offer the possibility to produce a C source +file as output and running a simple awk script on this file will already +do the whole job for you. (An important advantage of integrated resources +is that you're not restricted to 64 kB anymore). + +But if you don't bother to write all the routines to fix adresses of +object trees and so on you will estimate the help of xgemtext from this +package. + +Running + + xgemtext *.rsc + +in your source directory will extract all strings from your resource files +placing them in a file messages.c looking more or less like this: + + /* This file was automatically produced by xgemtext <version> */ + + #ifndef gettext_noop + #define gettext_noop(s) (s) + #endif + + const char* volatile nls_rsc_strings[] = { + gettext_noop (" Foobar"), + gettext_noop (" File"), + gettext_noop (" Options"), + gettext_noop (" About Foobar..."), + gettext_noop (" Open"), + ... /* All other strings in your resource. */ + 0L + } + +It looks like a real C source file and it actually is one. Yet, usually +you will never compile it nor link the corresponding object file. But you +never know... + +Various options control xgemtext's behavior while extracting the strings +from your resources, see the manual page for detailed information. Of +course it does not extract only strings from objects of type G_TEXT, +G_STRING etc. but from all kinds of objects containing text, including +icons and bitmaps. + +So what's the purpose of messages.c if not compiling? You can run +it (together with your other sources) through xgettext and now you have +your resource strings in a .po file that can be processed with all the +tools from the GNU gettext package. + + + +5. The library rintl +==================== + +Your resource file hasn't been patched by xgemtext. So, how to get the +translated strings into the objects where they should go? You load your +resource as usual. Now you simply have to take the habit to call +gettree() for each object tree after fixing the object addresses via +rsrc_gaddr(). The library function gettree() will walk thru the specified +object tree replacing each pointer to a string with a pointer to the +translated versions. It will also modify some members of the internal +data structures (string length etc.) to the appropriate values. + +For simple objects this is all that you have to do. For more complicated +ones translating the strings might leave your carefully designed objects a +mess, beginning with menues. Remember that all string lengths may have +been arbitrarily changed, resulting in objects that might hide each other +or ugly looking gaps between objects that were meant to be close to each +other. + +You will find numerous functions in the library rintl that will try to +bring your objects back to a tolerable outer appearance again, each of +them being called rnl<object_type>(). You will also find a function +called rnltree() that will try to do the job for entire object trees. You +can control the behavior of these adapt functions in numerous ways that +should meet as many requirements as possible. You can specify spaces to +be left between objects, margins to the tree borders, minimum widths of +button objects and so on. You can also tell the functions not to walk +thru the whole object tree but stopping at a certain level, thus allowing +you to process different parts of your objects each with individual values +for the control flags and variables. + +Menus usually require special treatment. rnlmenu() will usually to the +job in a satisfying manner. + +As you might guess the result still can't be perfect. Your objects might +need a little (or a whole lot of) fine tuning after being translated. +Special care is also expected from the translator. She has to follow some +simple rules while doing her job. You yourself, the programmer, should +follow some rules when designing your object trees. The rnltree() +function will work best if it finds all object children in rows and +columns of constant height. This can be easily achieved by putting object +children belonging logically together into visible or invisible boxes. + +For each library function you will find a manual page describing its +functionality in detail. + +In the subdirectory ``example'' after building the binaries you will find +a simple example program showing all this in a simple manner. Set the +envariable LANGUAGE to one of the values de (German), it (Italian), fr +(French), nl (Dutch), ga (Irish) or pt (portuguese) to select +your preferred language. Setting the envariable to an unknown +value will make the example program choose the default values +``C'' (in this case English). + +Select the menu entry ``International...'' to see a simple text displayed +in your selected language. The entry ``Language...'' might allow you to +change the language even at runtime but this depends on the existence of +the putenv() function in your standard C library. If putenv() is not +found the entry will be disabled. You have to change the language on the +command line. + +In the ``Options'' menu you can follow the metamorphosis of a GEM dialog, +first without any treatment, then after a call to rnltree() and finally +after some additional beauty cures. See the source and the manual +pages rnltree(3) and rnlpush(3) for details. + + + +6. Charsets: Atari versus ISO-Latin 1 +===================================== + +There's a dilemma with the i18n thing. On other platforms (especially of +the workstation sector) you can not only localize the language but also +the charset to utilize. AFAIK there's no C library available that allows +you to do so on Atari. + +A couple of years ago there was but one choice for a charset in the Atari +sector, the charset of the Atari's built-in system font. Now more and +more Atari users have switched to the universally used ISO-Latin 1 charset +also known as i-8859-1, especially when using a command line interpreter. +If you use already internationalized GNU packages you will come across +this charset, too. (Note that both ISO-Latin 1 and the Atari charset are +intended for use with western european languages, the Atari's charset +to a certain extent also for Hebrew and Greek. Hence the following refers +only to those languages). + +I have chosen the following way: As it is very unlikely that you use an +ISO-Latin 1 charset with GEM, the files containing the messages for the +example program - which has a GUI - have to be read with the Atari +charset. But these files shouldn't go into your locale directory. The +whole thing is provided as an example and should stay where it is (i. e. +it isn't installed). + +For xgemtext you have the choice. If you use an ISO-Latin-1 font (as you +should do) simply follow the instructions in ABOUT-NLS. If you insist on +using a font with an Atari codeset set the environment variable LANGUAGE +(or LC_ALL or LC_xxx) to <ll>.atarist where <ll> should specify the +language you want to use. When installing xgemtext the appropriate +directories in your locale directory get created. They will be called +<localedir>/<ll>.atarist/LC_MESSAGES. + + +7. Miscellanea +============== + +Now something that might leave you a little uneasy: The translating +project relies on the original programs being written in English. Say you +have written your program in Rhaeto-Romance and you want to have it +translated into Irish. Well, the diligent translator from the Aron +Islands is lucky enough to understand English and she probably won't +bother to learn Rhaeto-Romance. The only possibility to solve the problem +is to agree upon one base language and this language is English. If you +have made it until here through this document I'm sure you will manage to +write the messages in your sources and resources in English, too. + +Of course you will have to explain your users how to benefit from the new +i18n features of your program. Include the file ABOUT-NLS that is part +of the GNU gettext distribution. This will tell your users the +necessary measures to take. + +You should also include a copy of the file ATARI.NLS in your sources. +This file is intended to be read by translators. They will find some +useful hints for translating messages for GEM programs. + +Note that gemtext is *not* part of the GNU project! Bug reports, +comments, compliments should be sent to the author, flames and criticism +to /dev/null. Please also note that everything you find in the directory +intl *is* part of the GNU gettext package. Thus, any comments concerning +files in this subdirectory should be directed to the maintainer of the GNU +gettext package. There are some other files that consist partly or +entirely of copyrighted material by the Free Software Foundation. If in +doubt check the header texts. + +Hope you have fun with gemtext! + +Guido Flohr <[email protected]>. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/THANKS b/debian/gettext-kde/gettext-kde-0.10.35/THANKS new file mode 100644 index 00000000..6c3ac495 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/THANKS @@ -0,0 +1,57 @@ +The GNU NLS utility package is the first full featured package +directed to NLS support in the GNU packages. It has it's roots in the +GNU C Library development and of course the (never officially +released) GNU locale package, mostly written by Jim Meyering. +Therefore a lot of people participated in the process of creating this +software. + +Written in April-June 1995 by +Ulrich Drepper [email protected] + +Special thanks to Fran�ois Pinard <[email protected]>, who did a +major part of the testing and provided the Emacs PO mode, wrote major +parts of the manual, and contributed the Perl interface gettext.perl. + +Peter Miller <[email protected]> invested a lot of his time in making +gettext usable in other but GNU projects and wrote the msgmerge, msgcmp, +and msgunfmt programs. + +Thanks to all of the following for their valuable +hints/fixes/discussions/contributions: + +Andreas Schwab [email protected] +Bang Jun Young [email protected] +Bill Perry [email protected] +Bruno Haible [email protected] +Christian von Roques [email protected] +Derek Clegg [email protected] +Enrique Melero G�mez [email protected] +Eric Backus [email protected] +Francesco Potort� [email protected] +Frank Donahoe [email protected] +Greg McGary [email protected] +G�ran Uddeborg [email protected] +Jakub Jelinek [email protected] +Jim Meyering [email protected] +Joshua R. Poulson [email protected] +Karl Berry [email protected] +Karl Eichwalder [email protected] +Kaveh R. Ghazi [email protected] +Kenichi Handa <[email protected]> +Larry Schwimmer [email protected] +Marcus Daniels [email protected] +Max de Mendizabal [email protected] +Michel Robitaille [email protected] +Nils Naumann [email protected] +Noah Friedman [email protected] +Paul Eggert [email protected] +Roland McGrath [email protected] +Sakai Kiyotaka [email protected] +Santiago Vila Doncel [email protected] +Thomas E. Dickey [email protected] +Tom Tromey [email protected] +Uwe Ohse [email protected] + + +Thanks to all members of the translation teams for the different +languages. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/TODO b/debian/gettext-kde/gettext-kde-0.10.35/TODO new file mode 100644 index 00000000..8b115d36 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/TODO @@ -0,0 +1,11 @@ +This is simply a loose collection of things I think future versions +should have/provide. If you have further suggestions please tell me. + +* documentation, documentation, documentation ... + +* use UTF encoding for distributions + +* programs should know about different character sets + +* make xgettext understand other languages beside C/C++: Shell scripts, + Perl, Tcl?, Scheme, ELisp, AWK diff --git a/debian/gettext-kde/gettext-kde-0.10.35/acconfig.h b/debian/gettext-kde/gettext-kde-0.10.35/acconfig.h new file mode 100644 index 00000000..56b79565 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/acconfig.h @@ -0,0 +1,82 @@ +/* Special definitions, processed by autoheader. + Copyright (C) 1995, 1996, 1997 Free Software Foundation. + Ulrich Drepper <[email protected]>, 1995. */ + +/* Default value for alignment of strings in .mo file. */ +#define DEFAULT_OUTPUT_ALIGNMENT 1 + +#ifndef PARAMS +# if __STDC__ +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif +#endif + +@TOP@ + +/* Define to the name of the distribution. */ +#undef PACKAGE + +/* Define to the version of the distribution. */ +#undef VERSION + +/* Define if you have obstacks. */ +#undef HAVE_OBSTACK + +/* Define if <stddef.h> defines ptrdiff_t. */ +#undef HAVE_PTRDIFF_T + +/* Define if your locale.h file contains LC_MESSAGES. */ +#undef HAVE_LC_MESSAGES + +/* Define if you have the parse_printf_format function. */ +#undef HAVE_PARSE_PRINTF_FORMAT + +/* Define to 1 if NLS is requested. */ +#undef ENABLE_NLS + +/* Define as 1 if you have catgets and don't want to use GNU gettext. */ +#undef HAVE_CATGETS + +/* Define as 1 if you have gettext and don't want to use GNU gettext. */ +#undef HAVE_GETTEXT + +/* Define as 1 if you have the stpcpy function. */ +#undef HAVE_STPCPY + +@BOTTOM@ + +/* We don't test for the basename function but still want to use the + version in the libc when compiling for a system using glibc. */ +#ifdef __GNU_LIBRARY__ +# define HAVE_BASENAME 1 +#endif + +/* On GNU systems we want to use the extensions. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + + +/* A file name cannot consist of any character possible. INVALID_PATH_CHAR + contains the characters not allowed. */ +#ifndef MSDOS +# define INVALID_PATH_CHAR "\1\2\3\4\5\6\7\10\11\12\13\14\15\16\17\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37 \177/" +#else +/* Something like this for MSDOG. */ +# define INVALID_PATH_CHAR "\1\2\3\4\5\6\7\10\11\12\13\14\15\16\17\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37 \177\\:." +#endif + +/* Length from which starting on warnings about too long strings are given. + Several systems have limits for strings itself, more have problems with + strings in their tools (important here: gencat). 1024 bytes is a + conservative limit. Because many translation let the message size grow + (German translations are always bigger) choose a length < 1024. */ +#define WARN_ID_LEN 900 + +/* This is the page width for the message_print function. It should + not be set to more than 79 characters (Emacs users will appreciate + it). It is used to wrap the msgid and msgstr strings, and also to + wrap the file position (#:) comments. */ +#define PAGE_WIDTH 79 diff --git a/debian/gettext-kde/gettext-kde-0.10.35/aclocal.m4 b/debian/gettext-kde/gettext-kde-0.10.35/aclocal.m4 new file mode 100644 index 00000000..389ebf82 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/aclocal.m4 @@ -0,0 +1,818 @@ +dnl aclocal.m4 generated automatically by aclocal 1.3 + +dnl Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +dnl This Makefile.in is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. + +# Do all the work for Automake. This macro actually does too much -- +# some checks are only needed if your package does certain things. +# But this isn't really a big deal. + +# serial 1 + +dnl Usage: +dnl AM_INIT_AUTOMAKE(package,version, [no-define]) + +AC_DEFUN(AM_INIT_AUTOMAKE, +[AC_REQUIRE([AM_PROG_INSTALL]) +PACKAGE=[$1] +AC_SUBST(PACKAGE) +VERSION=[$2] +AC_SUBST(VERSION) +dnl test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi +ifelse([$3],, +AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE") +AC_DEFINE_UNQUOTED(VERSION, "$VERSION")) +AC_REQUIRE([AM_SANITY_CHECK]) +AC_REQUIRE([AC_ARG_PROGRAM]) +dnl FIXME This is truly gross. +missing_dir=`cd $ac_aux_dir && pwd` +AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) +AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) +AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) +AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) +AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) +AC_REQUIRE([AC_PROG_MAKE_SET])]) + + +# serial 1 + +AC_DEFUN(AM_PROG_INSTALL, +[AC_REQUIRE([AC_PROG_INSTALL]) +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' +AC_SUBST(INSTALL_SCRIPT)dnl +]) + +# +# Check to make sure that the build environment is sane. +# + +AC_DEFUN(AM_SANITY_CHECK, +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "[$]*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "[$]*" != "X $srcdir/configure conftestfile" \ + && test "[$]*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "[$]2" = conftestfile + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +rm -f conftest* +AC_MSG_RESULT(yes)]) + +dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) +dnl The program must properly implement --version. +AC_DEFUN(AM_MISSING_PROG, +[AC_MSG_CHECKING(for working $2) +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if ($2 --version) < /dev/null > /dev/null 2>&1; then + $1=$2 + AC_MSG_RESULT(found) +else + $1="$3/missing $2" + AC_MSG_RESULT(missing) +fi +AC_SUBST($1)]) + +# Like AC_CONFIG_HEADER, but automatically create stamp file. + +AC_DEFUN(AM_CONFIG_HEADER, +[AC_PREREQ([2.12]) +AC_CONFIG_HEADER([$1]) +dnl When config.status generates a header, we must update the stamp-h file. +dnl This file resides in the same directory as the config header +dnl that is generated. We must strip everything past the first ":", +dnl and everything past the last "/". +AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl +ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, +<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, +<<am_indx=1 +for am_file in <<$1>>; do + case " <<$>>CONFIG_HEADERS " in + *" <<$>>am_file "*<<)>> + echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx + ;; + esac + am_indx=`expr "<<$>>am_indx" + 1` +done<<>>dnl>>) +changequote([,]))]) + + +# serial 24 AM_PROG_LIBTOOL +AC_DEFUN(AM_PROG_LIBTOOL, +[AC_REQUIRE([AM_ENABLE_SHARED])dnl +AC_REQUIRE([AM_ENABLE_STATIC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_RANLIB])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AM_PROG_LD])dnl +AC_REQUIRE([AM_PROG_NM])dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +dnl +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Check for any special flags to pass to ltconfig. +libtool_flags= +test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" +test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" +test "$silent" = yes && libtool_flags="$libtool_flags --silent" +test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" +test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case "$host" in +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + CFLAGS="$CFLAGS -belf" + ;; +esac + +# Actually configure libtool. ac_aux_dir is where install-sh is found. +CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ +LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \ +${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \ +$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \ +|| AC_MSG_ERROR([libtool configure failed]) +]) + +# AM_ENABLE_SHARED - implement the --enable-shared flag +# Usage: AM_ENABLE_SHARED[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN(AM_ENABLE_SHARED, +[define([AM_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(shared, +changequote(<<, >>)dnl +<< --enable-shared build shared libraries [default=>>AM_ENABLE_SHARED_DEFAULT] +changequote([, ])dnl +[ --enable-shared=PKGS only build shared libraries if the current package + appears as an element in the PKGS list], +[p=${PACKAGE-default} +case "$enableval" in +yes) enable_shared=yes ;; +no) enable_shared=no ;; +*) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_shared=AM_ENABLE_SHARED_DEFAULT)dnl +]) + +# AM_DISABLE_SHARED - set the default shared flag to --disable-shared +AC_DEFUN(AM_DISABLE_SHARED, +[AM_ENABLE_SHARED(no)]) + +# AM_DISABLE_STATIC - set the default static flag to --disable-static +AC_DEFUN(AM_DISABLE_STATIC, +[AM_ENABLE_STATIC(no)]) + +# AM_ENABLE_STATIC - implement the --enable-static flag +# Usage: AM_ENABLE_STATIC[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN(AM_ENABLE_STATIC, +[define([AM_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(static, +changequote(<<, >>)dnl +<< --enable-static build static libraries [default=>>AM_ENABLE_STATIC_DEFAULT] +changequote([, ])dnl +[ --enable-static=PKGS only build shared libraries if the current package + appears as an element in the PKGS list], +[p=${PACKAGE-default} +case "$enableval" in +yes) enable_static=yes ;; +no) enable_static=no ;; +*) + enable_static=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_static=AM_ENABLE_STATIC_DEFAULT)dnl +]) + + +# AM_PROG_LD - find the path to the GNU or non-GNU linker +AC_DEFUN(AM_PROG_LD, +[AC_ARG_WITH(gnu-ld, +[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], +test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) +AC_REQUIRE([AC_PROG_CC]) +ac_prog=ld +if test "$ac_cv_prog_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + ac_prog=`($CC -print-prog-name=ld) 2>&5` + case "$ac_prog" in + # Accept absolute paths. + /* | [A-Za-z]:\\*) + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(ac_cv_path_LD, +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog"; then + ac_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + ac_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$ac_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_SUBST(LD) +AM_PROG_LD_GNU +]) + +AC_DEFUN(AM_PROG_LD_GNU, +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then + ac_cv_prog_gnu_ld=yes +else + ac_cv_prog_gnu_ld=no +fi]) +]) + +# AM_PROG_NM - find the path to a BSD-compatible name lister +AC_DEFUN(AM_PROG_NM, +[AC_MSG_CHECKING([for BSD-compatible nm]) +AC_CACHE_VAL(ac_cv_path_NM, +[case "$NM" in +/* | [A-Za-z]:\\*) + ac_cv_path_NM="$NM" # Let the user override the test with a path. + ;; +*) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -B" + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -p" + else + ac_cv_path_NM="$ac_dir/nm" + fi + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm + ;; +esac]) +NM="$ac_cv_path_NM" +AC_MSG_RESULT([$NM]) +AC_SUBST(NM) +]) + +# From Ulrich Drepper. + +# serial 1 + +AC_DEFUN(AM_TYPE_PTRDIFF_T, + [AC_CACHE_CHECK([for ptrdiff_t], am_cv_type_ptrdiff_t, + [AC_TRY_COMPILE([#include <stddef.h>], [ptrdiff_t p], + am_cv_type_ptrdiff_t=yes, am_cv_type_ptrdiff_t=no)]) + if test $am_cv_type_ptrdiff_t = yes; then + AC_DEFINE(HAVE_PTRDIFF_T) + fi +]) + +dnl From Jim Meyering. Use this if you use the GNU error.[ch]. +dnl FIXME: Migrate into libit + +AC_DEFUN(AM_FUNC_ERROR_AT_LINE, +[AC_CACHE_CHECK([for error_at_line], am_cv_lib_error_at_line, + [AC_TRY_LINK([],[error_at_line(0, 0, "", 0, "");], + am_cv_lib_error_at_line=yes, + am_cv_lib_error_at_line=no)]) + if test $am_cv_lib_error_at_line = no; then + LIBOBJS="$LIBOBJS error.o" + fi + AC_SUBST(LIBOBJS)dnl +]) + +# Macro to add for using GNU gettext. +# Ulrich Drepper <[email protected]>, 1995. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +# serial 5 + +AC_DEFUN(AM_WITH_NLS, + [AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE(nls, + [ --disable-nls do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT($USE_NLS) + AC_SUBST(USE_NLS) + + USE_INCLUDED_LIBINTL=no + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + AC_DEFINE(ENABLE_NLS) + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH(included-gettext, + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If gettext or catgets are available (in this order) we + dnl use this. Else we have to fall back to GNU NLS library. + dnl catgets is only used if permitted by option --with-catgets. + nls_cv_header_intl= + nls_cv_header_libgt= + CATOBJEXT=NONE + + AC_CHECK_HEADER(libintl.h, + [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc, + [AC_TRY_LINK([#include <libintl.h>], [return (int) gettext ("")], + gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)]) + + if test "$gt_cv_func_gettext_libc" != "yes"; then + AC_CHECK_LIB(intl, bindtextdomain, + [AC_CACHE_CHECK([for gettext in libintl], + gt_cv_func_gettext_libintl, + [AC_CHECK_LIB(intl, gettext, + gt_cv_func_gettext_libintl=yes, + gt_cv_func_gettext_libintl=no)], + gt_cv_func_gettext_libintl=no)]) + fi + + if test "$gt_cv_func_gettext_libc" = "yes" \ + || test "$gt_cv_func_gettext_libintl" = "yes"; then + AC_DEFINE(HAVE_GETTEXT) + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl + if test "$MSGFMT" != "no"; then + AC_CHECK_FUNCS(dcgettext) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr], + [CATOBJEXT=.gmo + DATADIRNAME=share], + [CATOBJEXT=.mo + DATADIRNAME=lib]) + INSTOBJEXT=.mo + fi + fi + ]) + + if test "$CATOBJEXT" = "NONE"; then + AC_MSG_CHECKING([whether catgets can be used]) + AC_ARG_WITH(catgets, + [ --with-catgets use catgets functions if available], + nls_cv_use_catgets=$withval, nls_cv_use_catgets=no) + AC_MSG_RESULT($nls_cv_use_catgets) + + if test "$nls_cv_use_catgets" = "yes"; then + dnl No gettext in C library. Try catgets next. + AC_CHECK_LIB(i, main) + AC_CHECK_FUNC(catgets, + [AC_DEFINE(HAVE_CATGETS) + INTLOBJS="\$(CATOBJS)" + AC_PATH_PROG(GENCAT, gencat, no)dnl + if test "$GENCAT" != "no"; then + AC_PATH_PROG(GMSGFMT, gmsgfmt, no) + if test "$GMSGFMT" = "no"; then + AM_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no) + fi + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.cat + INSTOBJEXT=.cat + DATADIRNAME=lib + INTLDEPS='$(top_builddir)/intl/libintl.a' + INTLLIBS=$INTLDEPS + LIBS=`echo $LIBS | sed -e 's/-lintl//'` + nls_cv_header_intl=intl/libintl.h + nls_cv_header_libgt=intl/libgettext.h + fi]) + fi + fi + + if test "$CATOBJEXT" = "NONE"; then + dnl Neither gettext nor catgets in included in the C library. + dnl Fall back on GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + INTLOBJS="\$(GETTOBJS)" + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + AC_SUBST(MSGFMT) + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.gmo + INSTOBJEXT=.mo + DATADIRNAME=share + INTLDEPS='$(top_builddir)/intl/libintl.a' + INTLLIBS=$INTLDEPS + LIBS=`echo $LIBS | sed -e 's/-lintl//'` + nls_cv_header_intl=intl/libintl.h + nls_cv_header_libgt=intl/libgettext.h + fi + + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is no GNU xgettext we define it as : so that the + dnl Makefiles still can work. + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + AC_MSG_RESULT( + [found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + fi + + # We need to process the po/ directory. + POSUB=po + else + DATADIRNAME=share + nls_cv_header_intl=intl/libintl.h + nls_cv_header_libgt=intl/libgettext.h + fi + AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl) + AC_OUTPUT_COMMANDS( + [case "$CONFIG_FILES" in *po/Makefile.in*) + sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile + esac]) + + + # If this is used in GNU gettext we have to set USE_NLS to `yes' + # because some of the sources are only built for this goal. + if test "$PACKAGE" = gettext; then + USE_NLS=yes + USE_INCLUDED_LIBINTL=yes + fi + + dnl These rules are solely for the distribution goal. While doing this + dnl we only have to keep exactly one list of the available catalogs + dnl in configure.in. + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + dnl Make all variables we use known to autoconf. + AC_SUBST(USE_INCLUDED_LIBINTL) + AC_SUBST(CATALOGS) + AC_SUBST(CATOBJEXT) + AC_SUBST(DATADIRNAME) + AC_SUBST(GMOFILES) + AC_SUBST(INSTOBJEXT) + AC_SUBST(INTLDEPS) + AC_SUBST(INTLLIBS) + AC_SUBST(INTLOBJS) + AC_SUBST(POFILES) + AC_SUBST(POSUB) + ]) + +AC_DEFUN(AM_GNU_GETTEXT, + [AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_PROG_RANLIB])dnl + AC_REQUIRE([AC_ISC_POSIX])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + AC_REQUIRE([AC_C_CONST])dnl + AC_REQUIRE([AC_C_INLINE])dnl + AC_REQUIRE([AC_TYPE_OFF_T])dnl + AC_REQUIRE([AC_TYPE_SIZE_T])dnl + AC_REQUIRE([AC_FUNC_ALLOCA])dnl + AC_REQUIRE([AC_FUNC_MMAP])dnl + + AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \ +unistd.h sys/param.h]) + AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \ +strdup __argz_count __argz_stringify __argz_next]) + + if test "${ac_cv_func_stpcpy+set}" != "set"; then + AC_CHECK_FUNCS(stpcpy) + fi + if test "${ac_cv_func_stpcpy}" = "yes"; then + AC_DEFINE(HAVE_STPCPY) + fi + + AM_LC_MESSAGES + AM_WITH_NLS + + if test "x$CATOBJEXT" != "x"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + AC_MSG_CHECKING(for catalogs to be installed) + NEW_LINGUAS= + for lang in ${LINGUAS=$ALL_LINGUAS}; do + case "$ALL_LINGUAS" in + *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;; + esac + done + LINGUAS=$NEW_LINGUAS + AC_MSG_RESULT($LINGUAS) + fi + + dnl Construct list of names of catalog files to be constructed. + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + dnl The reference to <locale.h> in the installed <libintl.h> file + dnl must be resolved because we cannot expect the users of this + dnl to define HAVE_LOCALE_H. + if test $ac_cv_header_locale_h = yes; then + INCLUDE_LOCALE_H="#include <locale.h>" + else + INCLUDE_LOCALE_H="\ +/* The system does not provide the header <locale.h>. Take care yourself. */" + fi + AC_SUBST(INCLUDE_LOCALE_H) + + dnl Determine which catalog format we have (if any is needed) + dnl For now we know about two different formats: + dnl Linux libc-5 and the normal X/Open format + test -d intl || mkdir intl + if test "$CATOBJEXT" = ".cat"; then + AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen) + + dnl Transform the SED scripts while copying because some dumb SEDs + dnl cannot handle comments. + sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed + fi + dnl po2tbl.sed is always needed. + sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \ + $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed + + dnl In the intl/Makefile.in we have a special dependency which makes + dnl only sense for gettext. We comment this out for non-gettext + dnl packages. + if test "$PACKAGE" = "gettext"; then + GT_NO="#NO#" + GT_YES= + else + GT_NO= + GT_YES="#YES#" + fi + AC_SUBST(GT_NO) + AC_SUBST(GT_YES) + + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but ($top_srcdir). + dnl Try to locate is. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) + + dnl *** For now the libtool support in intl/Makefile is not for real. + l= + AC_SUBST(l) + + dnl Generate list of files to be processed by xgettext which will + dnl be included in po/Makefile. + test -d po || mkdir po + if test "x$srcdir" != "x."; then + if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then + posrcprefix="$srcdir/" + else + posrcprefix="../$srcdir/" + fi + else + posrcprefix="../" + fi + rm -f po/POTFILES + sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ + < $srcdir/po/POTFILES.in > po/POTFILES + ]) + +# Search path for a program which passes the given test. +# Ulrich Drepper <[email protected]>, 1996. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +# serial 1 + +dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN(AM_PATH_PROG_WITH_TEST, +[# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + /*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in ifelse([$5], , $PATH, [$5]); do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test -n "[$]$1"; then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) + +# Check whether LC_MESSAGES is available in <locale.h>. +# Ulrich Drepper <[email protected]>, 1995. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +# serial 1 + +AC_DEFUN(AM_LC_MESSAGES, + [if test $ac_cv_header_locale_h = yes; then + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES], + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) + if test $am_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES) + fi + fi]) + + +# serial 1 + +AC_DEFUN(AM_PATH_LISPDIR, + [# If set to t, that means we are running in a shell under Emacs. + # If you have an Emacs named "t", then use the full path. + test "$EMACS" = t && EMACS= + AC_PATH_PROG(EMACS, emacs xemacs, no) + if test $EMACS != "no"; then + AC_MSG_CHECKING([where .elc files should go]) + dnl Set default value + lispdir="\$(datadir)/emacs/site-lisp" + if test "x$prefix" = "xNONE"; then + if test -d $ac_default_prefix/share/emacs/site-lisp; then + lispdir="\$(prefix)/share/emacs/site-lisp" + else + if test -d $ac_default_prefix/lib/emacs/site-lisp; then + lispdir="\$(prefix)/lib/emacs/site-lisp" + fi + fi + else + if test -d $prefix/share/emacs/site-lisp; then + lispdir="\$(prefix)/share/emacs/site-lisp" + else + if test -d $prefix/lib/emacs/site-lisp; then + lispdir="\$(prefix)/lib/emacs/site-lisp" + fi + fi + fi + AC_MSG_RESULT($lispdir) + fi + AC_SUBST(lispdir)]) + diff --git a/debian/gettext-kde/gettext-kde-0.10.35/config.guess b/debian/gettext-kde/gettext-kde-0.10.35/config.guess new file mode 100755 index 00000000..413ed41c --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/config.guess @@ -0,0 +1,883 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. +# +# This file 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Written by Per Bothner <[email protected]>. +# The master version of this file is at the FSF in /home/gd/gnu/lib. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit system type (host/target name). +# +# Only a few systems have been added to this list; please add others +# (but try to keep the structure clean). +# + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# ([email protected] 8/24/94.) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15 + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + cat <<EOF >dummy.s + .globl main + .ent main +main: + .frame \$30,0,\$26,0 + .prologue 0 + .long 0x47e03d80 # implver $0 + lda \$2,259 + .long 0x47e20c21 # amask $2,$1 + srl \$1,8,\$2 + sll \$2,2,\$2 + sll \$0,3,\$0 + addl \$1,\$0,\$0 + addl \$2,\$0,\$0 + ret \$31,(\$26),1 + .end main +EOF + ${CC-cc} dummy.s -o dummy 2>/dev/null + if test "$?" = 0 ; then + ./dummy + case "$?" in + 7) + UNAME_MACHINE="alpha" + ;; + 15) + UNAME_MACHINE="alphaev5" + ;; + 14) + UNAME_MACHINE="alphaev56" + ;; + 10) + UNAME_MACHINE="alphapca56" + ;; + 16) + UNAME_MACHINE="alphaev6" + ;; + esac + fi + rm -f dummy.s dummy + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]` + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-cbm-sysv4 + exit 0;; + amiga:NetBSD:*:*) + echo m68k-cbm-netbsd${UNAME_RELEASE} + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc64:OpenBSD:*:*) + echo mips64el-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hkmips:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + arm32:NetBSD:*:*) + echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + SR2?01:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:*|MIS*:OSx*:*:*) + # [email protected] (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + atari*:NetBSD:*:*) + echo m68k-atari-netbsd${UNAME_RELEASE} + exit 0 ;; + atari*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3*:NetBSD:*:*) + echo m68k-sun-netbsd${UNAME_RELEASE} + exit 0 ;; + sun3*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:NetBSD:*:*) + echo m68k-apple-netbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + sed 's/^ //' << EOF >dummy.c + int main (argc, argv) int argc; char **argv; { + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + ${CC-cc} dummy.c -o dummy \ + && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ + -o ${TARGET_BINARY_INTERFACE}x = x ] ; then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i?86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + sed 's/^ //' << EOF >dummy.c + #include <sys/systemcfg.h> + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:4) + if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=4.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[3478]??:HP-UX:*:*) + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;; + 9000/8?? ) HP_ARCH=hppa1.0 ;; + esac + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + sed 's/^ //' << EOF >dummy.c + #include <unistd.h> + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i?86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*X-MP:*:*:*) + echo xmp-cray-unicos + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} + exit 0 ;; + CRAY-2:*:*:*) + echo cray2-cray-unicos + exit 0 ;; + F300:UNIX_System_V:*:*) + FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + F301:UNIX_System_V:*:*) + echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` + exit 0 ;; + hp3[0-9][05]:NetBSD:*:*) + echo m68k-hp-netbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + i?86:BSD/386:*:* | *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + *:NetBSD:*:*) + echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + i*:CYGWIN*:*) + echo i386-pc-cygwin32 + exit 0 ;; + i*:MINGW*:*) + echo i386-pc-mingw32 + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin32 + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + *:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. + ld_help_string=`ld --help 2>&1` + ld_supported_emulations=`echo $ld_help_string \ + | sed -ne '/supported emulations:/!d + s/[ ][ ]*/ /g + s/.*supported emulations: *// + s/ .*// + p'` + case "$ld_supported_emulations" in + i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;; + i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;; + sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;; + esac + + if test "${UNAME_MACHINE}" = "alpha" ; then + sed 's/^ //' <<EOF >dummy.s + .globl main + .ent main + main: + .frame \$30,0,\$26,0 + .prologue 0 + .long 0x47e03d80 # implver $0 + lda \$2,259 + .long 0x47e20c21 # amask $2,$1 + srl \$1,8,\$2 + sll \$2,2,\$2 + sll \$0,3,\$0 + addl \$1,\$0,\$0 + addl \$2,\$0,\$0 + ret \$31,(\$26),1 + .end main +EOF + LIBC="" + ${CC-cc} dummy.s -o dummy 2>/dev/null + if test "$?" = 0 ; then + ./dummy + case "$?" in + 7) + UNAME_MACHINE="alpha" + ;; + 15) + UNAME_MACHINE="alphaev5" + ;; + 14) + UNAME_MACHINE="alphaev56" + ;; + 10) + UNAME_MACHINE="alphapca56" + ;; + 16) + UNAME_MACHINE="alphaev6" + ;; + esac + + objdump --private-headers dummy | \ + grep ld.so.1 > /dev/null + if test "$?" = 0 ; then + LIBC="libc1" + fi + fi + rm -f dummy.s dummy + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 + elif test "${UNAME_MACHINE}" = "mips" ; then + cat >dummy.c <<EOF +main(argc, argv) + int argc; + char *argv[]; +{ +#ifdef __MIPSEB__ + printf ("%s-unknown-linux-gnu\n", argv[1]); +#endif +#ifdef __MIPSEL__ + printf ("%sel-unknown-linux-gnu\n", argv[1]); +#endif + return 0; +} +EOF + ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + else + # Either a pre-BFD a.out linker (linux-gnuoldld) + # or one that does not give us useful --help. + # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. + # If ld does not provide *any* "supported emulations:" + # that means it is gnuoldld. + echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" + test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 + + case "${UNAME_MACHINE}" in + i?86) + VENDOR=pc; + ;; + *) + VENDOR=unknown; + ;; + esac + # Determine whether the default compiler is a.out or elf + cat >dummy.c <<EOF +#include <features.h> +main(argc, argv) + int argc; + char *argv[]; +{ +#ifdef __ELF__ +# ifdef __GLIBC__ +# if __GLIBC__ >= 2 + printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +#else + printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); +#endif + return 0; +} +EOF + ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 + rm -f dummy.c dummy + fi ;; +# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions +# are messed up and put the nodename in both sysname and nodename. + i?86:DYNIX/ptx:4*:*) + echo i386-sequent-sysv4 + exit 0 ;; + i?86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} + fi + exit 0 ;; + i?86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` + echo ${UNAME_MACHINE}-pc-isc$UNAME_REL + elif /bin/uname -X 2>/dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` + (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + pc:*:*:*) + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + i?86:LynxOS:2.*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says <[email protected]> + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes <[email protected]>. + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From [email protected]. + echo i860-stratus-sysv4 + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:*:6*) + echo mips-sony-newsos6 + exit 0 ;; + R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +cat >dummy.c <<EOF +#ifdef _SEQUENT_ +# include <sys/types.h> +# include <sys/utsname.h> +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include <sys/param.h> + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +#if !defined (ultrix) + printf ("vax-dec-bsd\n"); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0 +rm -f dummy.c dummy + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +#echo '(Unable to guess system type)' 1>&2 + +exit 1 diff --git a/debian/gettext-kde/gettext-kde-0.10.35/config.h.in b/debian/gettext-kde/gettext-kde-0.10.35/config.h.in new file mode 100644 index 00000000..fd20da22 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/config.h.in @@ -0,0 +1,240 @@ +/* config.h.in. Generated automatically from configure.in by autoheader. */ +/* Special definitions, processed by autoheader. + Copyright (C) 1995, 1996, 1997 Free Software Foundation. + Ulrich Drepper <[email protected]>, 1995. */ + +/* Default value for alignment of strings in .mo file. */ +#define DEFAULT_OUTPUT_ALIGNMENT 1 + +#ifndef PARAMS +# if __STDC__ +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif +#endif + + +/* Define if using alloca.c. */ +#undef C_ALLOCA + +/* Define to empty if the keyword does not work. */ +#undef const + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +#undef CRAY_STACKSEG_END + +/* Define if you have alloca, as a function or macro. */ +#undef HAVE_ALLOCA + +/* Define if you have <alloca.h> and it should be used (not on Ultrix). */ +#undef HAVE_ALLOCA_H + +/* Define if you don't have vprintf but do have _doprnt. */ +#undef HAVE_DOPRNT + +/* Define if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* Define if you have the vprintf function. */ +#undef HAVE_VPRINTF + +/* Define as __inline if that's what the C compiler calls it. */ +#undef inline + +/* Define to `long' if <sys/types.h> doesn't define. */ +#undef off_t + +/* Define if you need to in order for stat and other things to work. */ +#undef _POSIX_SOURCE + +/* Define to `unsigned' if <sys/types.h> doesn't define. */ +#undef size_t + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +#undef STACK_DIRECTION + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to the name of the distribution. */ +#undef PACKAGE + +/* Define to the version of the distribution. */ +#undef VERSION + +/* Define if <stddef.h> defines ptrdiff_t. */ +#undef HAVE_PTRDIFF_T + +/* Define if your locale.h file contains LC_MESSAGES. */ +#undef HAVE_LC_MESSAGES + +/* Define if you have the parse_printf_format function. */ +#undef HAVE_PARSE_PRINTF_FORMAT + +/* Define to 1 if NLS is requested. */ +#undef ENABLE_NLS + +/* Define as 1 if you have catgets and don't want to use GNU gettext. */ +#undef HAVE_CATGETS + +/* Define as 1 if you have gettext and don't want to use GNU gettext. */ +#undef HAVE_GETTEXT + +/* Define as 1 if you have the stpcpy function. */ +#undef HAVE_STPCPY + +/* Define if you have the __argz_count function. */ +#undef HAVE___ARGZ_COUNT + +/* Define if you have the __argz_next function. */ +#undef HAVE___ARGZ_NEXT + +/* Define if you have the __argz_stringify function. */ +#undef HAVE___ARGZ_STRINGIFY + +/* Define if you have the dcgettext function. */ +#undef HAVE_DCGETTEXT + +/* Define if you have the getcwd function. */ +#undef HAVE_GETCWD + +/* Define if you have the getdelim function. */ +#undef HAVE_GETDELIM + +/* Define if you have the getline function. */ +#undef HAVE_GETLINE + +/* Define if you have the getpagesize function. */ +#undef HAVE_GETPAGESIZE + +/* Define if you have the mblen function. */ +#undef HAVE_MBLEN + +/* Define if you have the memcpy function. */ +#undef HAVE_MEMCPY + +/* Define if you have the memmove function. */ +#undef HAVE_MEMMOVE + +/* Define if you have the memset function. */ +#undef HAVE_MEMSET + +/* Define if you have the munmap function. */ +#undef HAVE_MUNMAP + +/* Define if you have the putenv function. */ +#undef HAVE_PUTENV + +/* Define if you have the setenv function. */ +#undef HAVE_SETENV + +/* Define if you have the setlocale function. */ +#undef HAVE_SETLOCALE + +/* Define if you have the stpcpy function. */ +#undef HAVE_STPCPY + +/* Define if you have the stpncpy function. */ +#undef HAVE_STPNCPY + +/* Define if you have the strcasecmp function. */ +#undef HAVE_STRCASECMP + +/* Define if you have the strchr function. */ +#undef HAVE_STRCHR + +/* Define if you have the strcspn function. */ +#undef HAVE_STRCSPN + +/* Define if you have the strdup function. */ +#undef HAVE_STRDUP + +/* Define if you have the strerror function. */ +#undef HAVE_STRERROR + +/* Define if you have the strncasecmp function. */ +#undef HAVE_STRNCASECMP + +/* Define if you have the strstr function. */ +#undef HAVE_STRSTR + +/* Define if you have the strtoul function. */ +#undef HAVE_STRTOUL + +/* Define if you have the uname function. */ +#undef HAVE_UNAME + +/* Define if you have the vasprintf function. */ +#undef HAVE_VASPRINTF + +/* Define if you have the <argz.h> header file. */ +#undef HAVE_ARGZ_H + +/* Define if you have the <limits.h> header file. */ +#undef HAVE_LIMITS_H + +/* Define if you have the <locale.h> header file. */ +#undef HAVE_LOCALE_H + +/* Define if you have the <malloc.h> header file. */ +#undef HAVE_MALLOC_H + +/* Define if you have the <nl_types.h> header file. */ +#undef HAVE_NL_TYPES_H + +/* Define if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define if you have the <sys/param.h> header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define if you have the <values.h> header file. */ +#undef HAVE_VALUES_H + +/* Define if you have the i library (-li). */ +#undef HAVE_LIBI + +/* We don't test for the basename function but still want to use the + version in the libc when compiling for a system using glibc. */ +#ifdef __GNU_LIBRARY__ +# define HAVE_BASENAME 1 +#endif + +/* On GNU systems we want to use the extensions. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + + +/* A file name cannot consist of any character possible. INVALID_PATH_CHAR + contains the characters not allowed. */ +#ifndef MSDOS +# define INVALID_PATH_CHAR "\1\2\3\4\5\6\7\10\11\12\13\14\15\16\17\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37 \177/" +#else +/* Something like this for MSDOG. */ +# define INVALID_PATH_CHAR "\1\2\3\4\5\6\7\10\11\12\13\14\15\16\17\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37 \177\\:." +#endif + +/* Length from which starting on warnings about too long strings are given. + Several systems have limits for strings itself, more have problems with + strings in their tools (important here: gencat). 1024 bytes is a + conservative limit. Because many translation let the message size grow + (German translations are always bigger) choose a length < 1024. */ +#define WARN_ID_LEN 900 + +/* This is the page width for the message_print function. It should + not be set to more than 79 characters (Emacs users will appreciate + it). It is used to wrap the msgid and msgstr strings, and also to + wrap the file position (#:) comments. */ +#define PAGE_WIDTH 79 diff --git a/debian/gettext-kde/gettext-kde-0.10.35/config.sub b/debian/gettext-kde/gettext-kde-0.10.35/config.sub new file mode 100755 index 00000000..213a6d47 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/config.sub @@ -0,0 +1,954 @@ +#! /bin/sh +# Configuration validation subroutine script, version 1.1. +# Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file 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. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +if [ x$1 = x ] +then + echo Configuration name missing. 1>&2 + echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 + echo "or $0 ALIAS" 1>&2 + echo where ALIAS is a recognized configuration type. 1>&2 + exit 1 +fi + +# First pass through any local machine types. +case $1 in + *local*) + echo $1 + exit 0 + ;; + *) + ;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + linux-gnu*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple) + os= + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ + | arme[lb] | pyramid | mn10200 | mn10300 \ + | tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \ + | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \ + | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \ + | mips64 | mipsel | mips64el | mips64orion | mips64orionel \ + | mipstx39 | mipstx39el \ + | sparc | sparclet | sparclite | sparc64 | v850) + basic_machine=$basic_machine-unknown + ;; + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i[3456]86) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + vax-* | tahoe-* | i[3456]86-* | i860-* | m32r-* | m68k-* | m68000-* \ + | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ + | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ + | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \ + | xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* \ + | alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \ + | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \ + | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ + | sparc64-* | mips64-* | mipsel-* \ + | mips64el-* | mips64orion-* | mips64orionel-* \ + | mipstx39-* | mipstx39el-* \ + | f301-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-cbm + ;; + amigaos | amigados) + basic_machine=m68k-cbm + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-cbm + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | ymp) + basic_machine=ymp-cray + os=-unicos + ;; + cray2) + basic_machine=cray2-cray + os=-unicos + ;; + [ctj]90-cray) + basic_machine=c90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + os=-mvs + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i[3456]86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i[3456]86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i[3456]86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i[3456]86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + miniframe) + basic_machine=m68000-convergent + ;; + mipsel*-linux*) + basic_machine=mipsel-unknown + os=-linux-gnu + ;; + mips*-linux*) + basic_machine=mips-unknown + os=-linux-gnu + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + np1) + basic_machine=np1-gould + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5) + basic_machine=i586-intel + ;; + pentiumpro | p6) + basic_machine=i686-intel + ;; + pentium-* | p5-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + k5) + # We don't have specific support for AMD's K5 yet, so just call it a Pentium + basic_machine=i586-amd + ;; + nexen) + # We don't have specific support for Nexgen yet, so just call it a Pentium + basic_machine=i586-nexgen + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=rs6000-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + xmp) + basic_machine=xmp-cray + os=-unicos + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + mips) + if [ x$os = x-linux-gnu ]; then + basic_machine=mips-unknown + else + basic_machine=mips-mips + fi + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sparc) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -ctix* | -uts*) + os=-sysv + ;; + -ns2 ) + os=-nextstep2 + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -xenix) + os=-xenix + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-semi) + os=-aout + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-ibm) + os=-aix + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f301-fujitsu) + os=-uxpv + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -hpux*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os diff --git a/debian/gettext-kde/gettext-kde-0.10.35/configure b/debian/gettext-kde/gettext-kde-0.10.35/configure new file mode 100755 index 00000000..5c467b10 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/configure @@ -0,0 +1,4504 @@ +#! /bin/sh + +# From configure.in Revision: 1.143 + + + +# Do all the work for Automake. This macro actually does too much -- +# some checks are only needed if your package does certain things. +# But this isn't really a big deal. + +# serial 1 + + + + + +# serial 1 + + + +# +# Check to make sure that the build environment is sane. +# + + + + + +# Like AC_CONFIG_HEADER, but automatically create stamp file. + + + + +# serial 24 AM_PROG_LIBTOOL + + +# AM_ENABLE_SHARED - implement the --enable-shared flag +# Usage: AM_ENABLE_SHARED[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. + + +# AM_DISABLE_SHARED - set the default shared flag to --disable-shared + + +# AM_DISABLE_STATIC - set the default static flag to --disable-static + + +# AM_ENABLE_STATIC - implement the --enable-static flag +# Usage: AM_ENABLE_STATIC[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. + + + +# AM_PROG_LD - find the path to the GNU or non-GNU linker + + + + +# AM_PROG_NM - find the path to a BSD-compatible name lister + + +# From Ulrich Drepper. + +# serial 1 + + + + + + +# Macro to add for using GNU gettext. +# Ulrich Drepper <[email protected]>, 1995. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +# serial 5 + + + + + +# Search path for a program which passes the given test. +# Ulrich Drepper <[email protected]>, 1996. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +# serial 1 + + + +# Check whether LC_MESSAGES is available in <locale.h>. +# Ulrich Drepper <[email protected]>, 1995. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +# serial 1 + + + + +# serial 1 + + + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.12 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --enable-shared build shared libraries [default=yes] + --enable-shared=PKGS only build shared libraries if the current package + appears as an element in the PKGS list" +ac_help="$ac_help + --enable-static build static libraries [default=yes] + --enable-static=PKGS only build shared libraries if the current package + appears as an element in the PKGS list" +ac_help="$ac_help + --with-gnu-ld assume the C compiler uses GNU ld [default=no]" +ac_help="$ac_help + --disable-nls do not use Native Language Support" +ac_help="$ac_help + --with-included-gettext use the GNU gettext library included here" +ac_help="$ac_help + --with-catgets use catgets functions if available" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.12" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=src/msgfmt.c + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says [email protected]. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:681: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + for ac_prog in ginstall installbsd scoinst install; do + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + # OSF/1 installbsd also uses dspmsg, but is usable. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 +echo "configure:734: checking whether build environment is sane" >&5 +# Just in case +sleep 1 +echo timestamp > conftestfile +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "$*" != "X $srcdir/configure conftestfile" \ + && test "$*" != "X conftestfile $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { echo "configure: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" 1>&2; exit 1; } + fi + + test "$2" = conftestfile + ) +then + # Ok. + : +else + { echo "configure: error: newly created file is older than distributed files! +Check your system clock" 1>&2; exit 1; } +fi +rm -f conftest* +echo "$ac_t""yes" 1>&6 +if test "$program_transform_name" = s,x,x,; then + program_transform_name= +else + # Double any \ or $. echo might interpret backslashes. + cat <<\EOF_SED > conftestsed +s,\\,\\\\,g; s,\$,$$,g +EOF_SED + program_transform_name="`echo $program_transform_name|sed -f conftestsed`" + rm -f conftestsed +fi +test "$program_prefix" != NONE && + program_transform_name="s,^,${program_prefix},; $program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" + +# sed with no file args requires a program. +test "$program_transform_name" = "" && program_transform_name="s,x,x," + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:791: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + +PACKAGE=gettext + +VERSION=0.10.35 + +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } +fi +cat >> confdefs.h <<EOF +#define PACKAGE "$PACKAGE" +EOF + +cat >> confdefs.h <<EOF +#define VERSION "$VERSION" +EOF + + + +missing_dir=`cd $ac_aux_dir && pwd` +echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 +echo "configure:837: checking for working aclocal" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (aclocal --version) < /dev/null > /dev/null 2>&1; then + ACLOCAL=aclocal + echo "$ac_t""found" 1>&6 +else + ACLOCAL="$missing_dir/missing aclocal" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 +echo "configure:850: checking for working autoconf" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoconf --version) < /dev/null > /dev/null 2>&1; then + AUTOCONF=autoconf + echo "$ac_t""found" 1>&6 +else + AUTOCONF="$missing_dir/missing autoconf" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working automake""... $ac_c" 1>&6 +echo "configure:863: checking for working automake" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (automake --version) < /dev/null > /dev/null 2>&1; then + AUTOMAKE=automake + echo "$ac_t""found" 1>&6 +else + AUTOMAKE="$missing_dir/missing automake" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 +echo "configure:876: checking for working autoheader" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoheader --version) < /dev/null > /dev/null 2>&1; then + AUTOHEADER=autoheader + echo "$ac_t""found" 1>&6 +else + AUTOHEADER="$missing_dir/missing autoheader" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 +echo "configure:889: checking for working makeinfo" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (makeinfo --version) < /dev/null > /dev/null 2>&1; then + MAKEINFO=makeinfo + echo "$ac_t""found" 1>&6 +else + MAKEINFO="$missing_dir/missing makeinfo" + echo "$ac_t""missing" 1>&6 +fi + + + + + + +ALL_LINGUAS="da de es fr ko nl no no@nynorsk pl pt sl sv" + +# Check whether --enable-shared or --disable-shared was given. +if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + p=${PACKAGE-default} +case "$enableval" in +yes) enable_shared=yes ;; +no) enable_shared=no ;; +*) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac +else + enable_shared=yes +fi + +# Check whether --enable-static or --disable-static was given. +if test "${enable_static+set}" = set; then + enableval="$enable_static" + p=${PACKAGE-default} +case "$enableval" in +yes) enable_static=yes ;; +no) enable_static=no ;; +*) + enable_static=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac +else + enable_static=yes +fi + + +# Make sure we can run config.sub. +if $ac_config_sub sun4 >/dev/null 2>&1; then : +else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } +fi + +echo $ac_n "checking host system type""... $ac_c" 1>&6 +echo "configure:961: checking host system type" >&5 + +host_alias=$host +case "$host_alias" in +NONE) + case $nonopt in + NONE) + if host_alias=`$ac_config_guess`; then : + else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } + fi ;; + *) host_alias=$nonopt ;; + esac ;; +esac + +host=`$ac_config_sub $host_alias` +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$host" 1>&6 + +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:984: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1013: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1042: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + ac_prog_rejected=no + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:1090: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext <<EOF +#line 1100 "configure" +#include "confdefs.h" +main(){return(0);} +EOF +if { (eval echo configure:1104: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1124: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:1129: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <<EOF +#ifdef __GNUC__ + yes; +#endif +EOF +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1138: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes + ac_test_CFLAGS="${CFLAGS+set}" + ac_save_CFLAGS="$CFLAGS" + CFLAGS= + echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:1153: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 + if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" + elif test $ac_cv_prog_cc_g = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-O2" + fi +else + GCC= + test "${CFLAGS+set}" = set || CFLAGS="-g" +fi + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + + +ac_prog=ld +if test "$ac_cv_prog_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 +echo "configure:1193: checking for ld used by GCC" >&5 + ac_prog=`($CC -print-prog-name=ld) 2>&5` + case "$ac_prog" in + # Accept absolute paths. + /* | A-Za-z:\\*) + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 +echo "configure:1211: checking for GNU ld" >&5 +else + echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 +echo "configure:1214: checking for non-GNU ld" >&5 +fi +if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog"; then + ac_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + ac_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$ac_cv_path_LD" +if test -n "$LD"; then + echo "$ac_t""$LD" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi +test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } + +echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 +echo "configure:1250: checking if the linker ($LD) is GNU ld" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then + ac_cv_prog_gnu_ld=yes +else + ac_cv_prog_gnu_ld=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 + + +echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 +echo "configure:1266: checking for BSD-compatible nm" >&5 +if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$NM" in +/* | A-Za-z:\\*) + ac_cv_path_NM="$NM" # Let the user override the test with a path. + ;; +*) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -B" + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -p" + else + ac_cv_path_NM="$ac_dir/nm" + fi + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm + ;; +esac +fi + +NM="$ac_cv_path_NM" +echo "$ac_t""$NM" 1>&6 + + +echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 +echo "configure:1303: checking whether ln -s works" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + rm -f conftestdata +if ln -s X conftestdata 2>/dev/null +then + rm -f conftestdata + ac_cv_prog_LN_S="ln -s" +else + ac_cv_prog_LN_S=ln +fi +fi +LN_S="$ac_cv_prog_LN_S" +if test "$ac_cv_prog_LN_S" = "ln -s"; then + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + +# Check for any special flags to pass to ltconfig. +libtool_flags= +test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" +test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" +test "$silent" = yes && libtool_flags="$libtool_flags --silent" +test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" +test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case "$host" in +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 1339 "configure"' > conftest.$ac_ext + if { (eval echo configure:1340: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + CFLAGS="$CFLAGS -belf" + ;; +esac + +# Actually configure libtool. ac_aux_dir is where install-sh is found. +CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ +LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \ +${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \ +$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \ +|| { echo "configure: error: libtool configure failed" 1>&2; exit 1; } + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1372: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1401: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + ac_prog_rejected=no + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:1449: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext <<EOF +#line 1459 "configure" +#include "confdefs.h" +main(){return(0);} +EOF +if { (eval echo configure:1463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1483: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:1488: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <<EOF +#ifdef __GNUC__ + yes; +#endif +EOF +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1497: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes + ac_test_CFLAGS="${CFLAGS+set}" + ac_save_CFLAGS="$CFLAGS" + CFLAGS= + echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:1512: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 + if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" + elif test $ac_cv_prog_cc_g = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-O2" + fi +else + GCC= + test "${CFLAGS+set}" = set || CFLAGS="-g" +fi + +echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 +echo "configure:1540: checking for POSIXized ISC" >&5 +if test -d /etc/conf/kconfig.d && + grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 +then + echo "$ac_t""yes" 1>&6 + ISC=yes # If later tests want to check for ISC. + cat >> confdefs.h <<\EOF +#define _POSIX_SOURCE 1 +EOF + + if test "$GCC" = yes; then + CC="$CC -posix" + else + CC="$CC -Xp" + fi +else + echo "$ac_t""no" 1>&6 + ISC= +fi + + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' + +for ac_prog in 'bison -y' byacc +do +# Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1568: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$YACC"; then + ac_cv_prog_YACC="$YACC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_YACC="$ac_prog" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +YACC="$ac_cv_prog_YACC" +if test -n "$YACC"; then + echo "$ac_t""$YACC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +test -n "$YACC" && break +done +test -n "$YACC" || YACC="yacc" + + + +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:1600: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext <<EOF +#line 1615 "configure" +#include "confdefs.h" +#include <assert.h> +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1621: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext <<EOF +#line 1632 "configure" +#include "confdefs.h" +#include <assert.h> +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1638: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + +echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +echo "configure:1661: checking for ANSI C header files" >&5 +if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 1666 "configure" +#include "confdefs.h" +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1674: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + ac_cv_header_stdc=yes +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +cat > conftest.$ac_ext <<EOF +#line 1691 "configure" +#include "confdefs.h" +#include <string.h> +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. +cat > conftest.$ac_ext <<EOF +#line 1709 "configure" +#include "confdefs.h" +#include <stdlib.h> +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. +if test "$cross_compiling" = yes; then + : +else + cat > conftest.$ac_ext <<EOF +#line 1730 "configure" +#include "confdefs.h" +#include <ctype.h> +#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int main () { int i; for (i = 0; i < 256; i++) +if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); +exit (0); } + +EOF +if { (eval echo configure:1741: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_header_stdc=no +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_header_stdc" 1>&6 +if test $ac_cv_header_stdc = yes; then + cat >> confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + +for ac_hdr in limits.h malloc.h string.h unistd.h values.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:1768: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 1773 "configure" +#include "confdefs.h" +#include <$ac_hdr> +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1778: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <<EOF +#define $ac_tr_hdr 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi +done + + +echo $ac_n "checking for working const""... $ac_c" 1>&6 +echo "configure:1806: checking for working const" >&5 +if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 1811 "configure" +#include "confdefs.h" + +int main() { + +/* Ultrix mips cc rejects this. */ +typedef int charset[2]; const charset x; +/* SunOS 4.1.1 cc rejects this. */ +char const *const *ccp; +char **p; +/* NEC SVR4.0.2 mips cc rejects this. */ +struct point {int x, y;}; +static struct point const zero = {0,0}; +/* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in an arm + of an if-expression whose if-part is not a constant expression */ +const char *g = "string"; +ccp = &g + (g ? g-g : 0); +/* HPUX 7.0 cc rejects these. */ +++ccp; +p = (char**) ccp; +ccp = (char const *const *) p; +{ /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; +} +{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; +} +{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; +} +{ /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; +} +{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; +} + +; return 0; } +EOF +if { (eval echo configure:1860: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_const=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_const=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_c_const" 1>&6 +if test $ac_cv_c_const = no; then + cat >> confdefs.h <<\EOF +#define const +EOF + +fi + +echo $ac_n "checking for inline""... $ac_c" 1>&6 +echo "configure:1881: checking for inline" >&5 +if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat > conftest.$ac_ext <<EOF +#line 1888 "configure" +#include "confdefs.h" + +int main() { +} $ac_kw foo() { +; return 0; } +EOF +if { (eval echo configure:1895: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_inline=$ac_kw; break +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +done + +fi + +echo "$ac_t""$ac_cv_c_inline" 1>&6 +case "$ac_cv_c_inline" in + inline | yes) ;; + no) cat >> confdefs.h <<\EOF +#define inline +EOF + ;; + *) cat >> confdefs.h <<EOF +#define inline $ac_cv_c_inline +EOF + ;; +esac + +echo $ac_n "checking for off_t""... $ac_c" 1>&6 +echo "configure:1921: checking for off_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 1926 "configure" +#include "confdefs.h" +#include <sys/types.h> +#if STDC_HEADERS +#include <stdlib.h> +#include <stddef.h> +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "off_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_off_t=yes +else + rm -rf conftest* + ac_cv_type_off_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_off_t" 1>&6 +if test $ac_cv_type_off_t = no; then + cat >> confdefs.h <<\EOF +#define off_t long +EOF + +fi + +echo $ac_n "checking for size_t""... $ac_c" 1>&6 +echo "configure:1954: checking for size_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 1959 "configure" +#include "confdefs.h" +#include <sys/types.h> +#if STDC_HEADERS +#include <stdlib.h> +#include <stddef.h> +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_size_t=yes +else + rm -rf conftest* + ac_cv_type_size_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_size_t" 1>&6 +if test $ac_cv_type_size_t = no; then + cat >> confdefs.h <<\EOF +#define size_t unsigned +EOF + +fi + +echo $ac_n "checking for ptrdiff_t""... $ac_c" 1>&6 +echo "configure:1987: checking for ptrdiff_t" >&5 +if eval "test \"`echo '$''{'am_cv_type_ptrdiff_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 1992 "configure" +#include "confdefs.h" +#include <stddef.h> +int main() { +ptrdiff_t p +; return 0; } +EOF +if { (eval echo configure:1999: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + am_cv_type_ptrdiff_t=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + am_cv_type_ptrdiff_t=no +fi +rm -f conftest* +fi + +echo "$ac_t""$am_cv_type_ptrdiff_t" 1>&6 + if test $am_cv_type_ptrdiff_t = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_PTRDIFF_T 1 +EOF + + fi + + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 +echo "configure:2023: checking for working alloca.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2028 "configure" +#include "confdefs.h" +#include <alloca.h> +int main() { +char *p = alloca(2 * sizeof(int)); +; return 0; } +EOF +if { (eval echo configure:2035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + ac_cv_header_alloca_h=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_alloca_h=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_header_alloca_h" 1>&6 +if test $ac_cv_header_alloca_h = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_ALLOCA_H 1 +EOF + +fi + +echo $ac_n "checking for alloca""... $ac_c" 1>&6 +echo "configure:2056: checking for alloca" >&5 +if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2061 "configure" +#include "confdefs.h" + +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# if HAVE_ALLOCA_H +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +#endif + +int main() { +char *p = (char *) alloca(1); +; return 0; } +EOF +if { (eval echo configure:2084: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + ac_cv_func_alloca_works=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_func_alloca_works=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_func_alloca_works" 1>&6 +if test $ac_cv_func_alloca_works = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_ALLOCA 1 +EOF + +fi + +if test $ac_cv_func_alloca_works = no; then + # The SVR3 libPW and SVR4 libucb both contain incompatible functions + # that cause trouble. Some versions do not even contain alloca or + # contain a buggy version. If you still want to use their alloca, + # use ar to extract alloca.o from them instead of compiling alloca.c. + ALLOCA=alloca.o + cat >> confdefs.h <<\EOF +#define C_ALLOCA 1 +EOF + + +echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 +echo "configure:2116: checking whether alloca needs Cray hooks" >&5 +if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2121 "configure" +#include "confdefs.h" +#if defined(CRAY) && ! defined(CRAY2) +webecray +#else +wenotbecray +#endif + +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "webecray" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_os_cray=yes +else + rm -rf conftest* + ac_cv_os_cray=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_os_cray" 1>&6 +if test $ac_cv_os_cray = yes; then +for ac_func in _getb67 GETB67 getb67; do + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:2146: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2151 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<EOF +#define CRAY_STACKSEG_END $ac_func +EOF + + break +else + echo "$ac_t""no" 1>&6 +fi + +done +fi + +echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 +echo "configure:2201: checking stack direction for C alloca" >&5 +if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_c_stack_direction=0 +else + cat > conftest.$ac_ext <<EOF +#line 2209 "configure" +#include "confdefs.h" +find_stack_direction () +{ + static char *addr = 0; + auto char dummy; + if (addr == 0) + { + addr = &dummy; + return find_stack_direction (); + } + else + return (&dummy > addr) ? 1 : -1; +} +main () +{ + exit (find_stack_direction() < 0); +} +EOF +if { (eval echo configure:2228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + ac_cv_c_stack_direction=1 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_c_stack_direction=-1 +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_c_stack_direction" 1>&6 +cat >> confdefs.h <<EOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +EOF + +fi + +echo $ac_n "checking for vprintf""... $ac_c" 1>&6 +echo "configure:2250: checking for vprintf" >&5 +if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2255 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char vprintf(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char vprintf(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_vprintf) || defined (__stub___vprintf) +choke me +#else +vprintf(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_vprintf=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_vprintf=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'vprintf`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_VPRINTF 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi + +if test "$ac_cv_func_vprintf" != yes; then +echo $ac_n "checking for _doprnt""... $ac_c" 1>&6 +echo "configure:2302: checking for _doprnt" >&5 +if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2307 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char _doprnt(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char _doprnt(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub__doprnt) || defined (__stub____doprnt) +choke me +#else +_doprnt(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2330: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func__doprnt=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func__doprnt=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'_doprnt`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_DOPRNT 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi + +fi + +for ac_func in getcwd mblen memcpy strchr strerror uname +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:2357: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2362 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <<EOF +#define $ac_tr_func 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi +done + +for ac_func in getline memmove memset stpcpy stpncpy strcspn \ +strncasecmp strstr strtoul vasprintf +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:2413: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2418 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2441: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <<EOF +#define $ac_tr_func 1 +EOF + +else + echo "$ac_t""no" 1>&6 +LIBOBJS="$LIBOBJS ${ac_func}.o" +fi +done + + +if test $ac_cv_func_getline != yes; then + for ac_func in getdelim +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:2471: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2476 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <<EOF +#define $ac_tr_func 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi +done + +fi + +echo $ac_n "checking for parse_printf_format""... $ac_c" 1>&6 +echo "configure:2526: checking for parse_printf_format" >&5 +if eval "test \"`echo '$''{'ac_cv_func_parse_printf_format'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2531 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char parse_printf_format(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char parse_printf_format(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_parse_printf_format) || defined (__stub___parse_printf_format) +choke me +#else +parse_printf_format(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_parse_printf_format=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_parse_printf_format=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'parse_printf_format`\" = yes"; then + echo "$ac_t""yes" 1>&6 + gt_cv_func_parse_printf_format=yes +else + echo "$ac_t""no" 1>&6 +gt_cv_func_parse_printf_format=no +fi + +if test $gt_cv_func_parse_printf_format = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_PARSE_PRINTF_FORMAT 1 +EOF + +else + LIBOBJS="$LIBOBJS printf-prs.o" +fi + +echo $ac_n "checking for error_at_line""... $ac_c" 1>&6 +echo "configure:2584: checking for error_at_line" >&5 +if eval "test \"`echo '$''{'am_cv_lib_error_at_line'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2589 "configure" +#include "confdefs.h" + +int main() { +error_at_line(0, 0, "", 0, ""); +; return 0; } +EOF +if { (eval echo configure:2596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + am_cv_lib_error_at_line=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + am_cv_lib_error_at_line=no +fi +rm -f conftest* +fi + +echo "$ac_t""$am_cv_lib_error_at_line" 1>&6 + if test $am_cv_lib_error_at_line = no; then + LIBOBJS="$LIBOBJS error.o" + fi + + +for ac_hdr in unistd.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:2618: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2623 "configure" +#include "confdefs.h" +#include <$ac_hdr> +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2628: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <<EOF +#define $ac_tr_hdr 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi +done + +for ac_func in getpagesize +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:2657: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2662 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <<EOF +#define $ac_tr_func 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi +done + +echo $ac_n "checking for working mmap""... $ac_c" 1>&6 +echo "configure:2710: checking for working mmap" >&5 +if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_mmap_fixed_mapped=no +else + cat > conftest.$ac_ext <<EOF +#line 2718 "configure" +#include "confdefs.h" + +/* Thanks to Mike Haertel and Jim Avera for this test. + Here is a matrix of mmap possibilities: + mmap private not fixed + mmap private fixed at somewhere currently unmapped + mmap private fixed at somewhere already mapped + mmap shared not fixed + mmap shared fixed at somewhere currently unmapped + mmap shared fixed at somewhere already mapped + For private mappings, we should verify that changes cannot be read() + back from the file, nor mmap's back from the file at a different + address. (There have been systems where private was not correctly + implemented like the infamous i386 svr4.0, and systems where the + VM page cache was not coherent with the filesystem buffer cache + like early versions of FreeBSD and possibly contemporary NetBSD.) + For shared mappings, we should conversely verify that changes get + propogated back to all the places they're supposed to be. + + Grep wants private fixed already mapped. + The main things grep needs to know about mmap are: + * does it exist and is it safe to write into the mmap'd area + * how to use it (BSD variants) */ +#include <sys/types.h> +#include <fcntl.h> +#include <sys/mman.h> + +/* This mess was copied from the GNU getpagesize.h. */ +#ifndef HAVE_GETPAGESIZE +# ifdef HAVE_UNISTD_H +# include <unistd.h> +# endif + +/* Assume that all systems that can run configure have sys/param.h. */ +# ifndef HAVE_SYS_PARAM_H +# define HAVE_SYS_PARAM_H 1 +# endif + +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# ifdef HAVE_SYS_PARAM_H +# include <sys/param.h> +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ + +#ifdef __cplusplus +extern "C" { void *malloc(unsigned); } +#else +char *malloc(); +#endif + +int +main() +{ + char *data, *data2, *data3; + int i, pagesize; + int fd; + + pagesize = getpagesize(); + + /* + * First, make a file with some known garbage in it. + */ + data = malloc(pagesize); + if (!data) + exit(1); + for (i = 0; i < pagesize; ++i) + *(data + i) = rand(); + umask(0); + fd = creat("conftestmmap", 0600); + if (fd < 0) + exit(1); + if (write(fd, data, pagesize) != pagesize) + exit(1); + close(fd); + + /* + * Next, try to mmap the file at a fixed address which + * already has something else allocated at it. If we can, + * also make sure that we see the same garbage. + */ + fd = open("conftestmmap", O_RDWR); + if (fd < 0) + exit(1); + data2 = malloc(2 * pagesize); + if (!data2) + exit(1); + data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap(data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + exit(1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + exit(1); + + /* + * Finally, make sure that changes to the mapped area + * do not percolate back to the file as seen by read(). + * (This is a bug on some variants of i386 svr4.0.) + */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = malloc(pagesize); + if (!data3) + exit(1); + if (read(fd, data3, pagesize) != pagesize) + exit(1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + exit(1); + close(fd); + unlink("conftestmmap"); + exit(0); +} + +EOF +if { (eval echo configure:2858: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + ac_cv_func_mmap_fixed_mapped=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_func_mmap_fixed_mapped=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_func_mmap_fixed_mapped" 1>&6 +if test $ac_cv_func_mmap_fixed_mapped = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_MMAP 1 +EOF + +fi + + + for ac_hdr in argz.h limits.h locale.h nl_types.h malloc.h string.h \ +unistd.h sys/param.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:2886: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2891 "configure" +#include "confdefs.h" +#include <$ac_hdr> +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2896: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <<EOF +#define $ac_tr_hdr 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi +done + + for ac_func in getcwd munmap putenv setenv setlocale strchr strcasecmp \ +strdup __argz_count __argz_stringify __argz_next +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:2926: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2931 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2954: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <<EOF +#define $ac_tr_func 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi +done + + + if test "${ac_cv_func_stpcpy+set}" != "set"; then + for ac_func in stpcpy +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:2983: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2988 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3011: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <<EOF +#define $ac_tr_func 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi +done + + fi + if test "${ac_cv_func_stpcpy}" = "yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_STPCPY 1 +EOF + + fi + + if test $ac_cv_header_locale_h = yes; then + echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6 +echo "configure:3045: checking for LC_MESSAGES" >&5 +if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 3050 "configure" +#include "confdefs.h" +#include <locale.h> +int main() { +return LC_MESSAGES +; return 0; } +EOF +if { (eval echo configure:3057: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + am_cv_val_LC_MESSAGES=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + am_cv_val_LC_MESSAGES=no +fi +rm -f conftest* +fi + +echo "$ac_t""$am_cv_val_LC_MESSAGES" 1>&6 + if test $am_cv_val_LC_MESSAGES = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_LC_MESSAGES 1 +EOF + + fi + fi + echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6 +echo "configure:3078: checking whether NLS is requested" >&5 + # Check whether --enable-nls or --disable-nls was given. +if test "${enable_nls+set}" = set; then + enableval="$enable_nls" + USE_NLS=$enableval +else + USE_NLS=yes +fi + + echo "$ac_t""$USE_NLS" 1>&6 + + + USE_INCLUDED_LIBINTL=no + + if test "$USE_NLS" = "yes"; then + cat >> confdefs.h <<\EOF +#define ENABLE_NLS 1 +EOF + + echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6 +echo "configure:3098: checking whether included gettext is requested" >&5 + # Check whether --with-included-gettext or --without-included-gettext was given. +if test "${with_included_gettext+set}" = set; then + withval="$with_included_gettext" + nls_cv_force_use_gnu_gettext=$withval +else + nls_cv_force_use_gnu_gettext=no +fi + + echo "$ac_t""$nls_cv_force_use_gnu_gettext" 1>&6 + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + nls_cv_header_intl= + nls_cv_header_libgt= + CATOBJEXT=NONE + + ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for libintl.h""... $ac_c" 1>&6 +echo "configure:3117: checking for libintl.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 3122 "configure" +#include "confdefs.h" +#include <libintl.h> +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:3127: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6 +echo "configure:3144: checking for gettext in libc" >&5 +if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 3149 "configure" +#include "confdefs.h" +#include <libintl.h> +int main() { +return (int) gettext ("") +; return 0; } +EOF +if { (eval echo configure:3156: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + gt_cv_func_gettext_libc=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + gt_cv_func_gettext_libc=no +fi +rm -f conftest* +fi + +echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6 + + if test "$gt_cv_func_gettext_libc" != "yes"; then + echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6 +echo "configure:3172: checking for bindtextdomain in -lintl" >&5 +ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lintl $LIBS" +cat > conftest.$ac_ext <<EOF +#line 3180 "configure" +#include "confdefs.h" +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char bindtextdomain(); + +int main() { +bindtextdomain() +; return 0; } +EOF +if { (eval echo configure:3191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6 +echo "configure:3207: checking for gettext in libintl" >&5 +if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6 +echo "configure:3212: checking for gettext in -lintl" >&5 +ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lintl $LIBS" +cat > conftest.$ac_ext <<EOF +#line 3220 "configure" +#include "confdefs.h" +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char gettext(); + +int main() { +gettext() +; return 0; } +EOF +if { (eval echo configure:3231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + gt_cv_func_gettext_libintl=yes +else + echo "$ac_t""no" 1>&6 +gt_cv_func_gettext_libintl=no +fi + +fi + +echo "$ac_t""$gt_cv_func_gettext_libintl" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + fi + + if test "$gt_cv_func_gettext_libc" = "yes" \ + || test "$gt_cv_func_gettext_libintl" = "yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_GETTEXT 1 +EOF + + # Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3270: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$MSGFMT" in + /*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then + ac_cv_path_MSGFMT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test -n "$MSGFMT"; then + echo "$ac_t""$MSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + if test "$MSGFMT" != "no"; then + for ac_func in dcgettext +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:3304: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 3309 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3332: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <<EOF +#define $ac_tr_func 1 +EOF + +else + echo "$ac_t""no" 1>&6 +fi +done + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3359: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GMSGFMT" in + /*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_GMSGFMT="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT="$ac_cv_path_GMSGFMT" +if test -n "$GMSGFMT"; then + echo "$ac_t""$GMSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + # Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3391: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$XGETTEXT" in + /*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test -n "$XGETTEXT"; then + echo "$ac_t""$XGETTEXT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + cat > conftest.$ac_ext <<EOF +#line 3423 "configure" +#include "confdefs.h" + +int main() { +extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr +; return 0; } +EOF +if { (eval echo configure:3431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + CATOBJEXT=.gmo + DATADIRNAME=share +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CATOBJEXT=.mo + DATADIRNAME=lib +fi +rm -f conftest* + INSTOBJEXT=.mo + fi + fi + +else + echo "$ac_t""no" 1>&6 +fi + + + if test "$CATOBJEXT" = "NONE"; then + echo $ac_n "checking whether catgets can be used""... $ac_c" 1>&6 +echo "configure:3454: checking whether catgets can be used" >&5 + # Check whether --with-catgets or --without-catgets was given. +if test "${with_catgets+set}" = set; then + withval="$with_catgets" + nls_cv_use_catgets=$withval +else + nls_cv_use_catgets=no +fi + + echo "$ac_t""$nls_cv_use_catgets" 1>&6 + + if test "$nls_cv_use_catgets" = "yes"; then + echo $ac_n "checking for main in -li""... $ac_c" 1>&6 +echo "configure:3467: checking for main in -li" >&5 +ac_lib_var=`echo i'_'main | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-li $LIBS" +cat > conftest.$ac_ext <<EOF +#line 3475 "configure" +#include "confdefs.h" + +int main() { +main() +; return 0; } +EOF +if { (eval echo configure:3482: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo i | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <<EOF +#define $ac_tr_lib 1 +EOF + + LIBS="-li $LIBS" + +else + echo "$ac_t""no" 1>&6 +fi + + echo $ac_n "checking for catgets""... $ac_c" 1>&6 +echo "configure:3510: checking for catgets" >&5 +if eval "test \"`echo '$''{'ac_cv_func_catgets'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 3515 "configure" +#include "confdefs.h" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char catgets(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char catgets(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_catgets) || defined (__stub___catgets) +choke me +#else +catgets(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3538: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + rm -rf conftest* + eval "ac_cv_func_catgets=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_catgets=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'catgets`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_CATGETS 1 +EOF + + INTLOBJS="\$(CATOBJS)" + # Extract the first word of "gencat", so it can be a program name with args. +set dummy gencat; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3560: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GENCAT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GENCAT" in + /*) + ac_cv_path_GENCAT="$GENCAT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_GENCAT="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_GENCAT" && ac_cv_path_GENCAT="no" + ;; +esac +fi +GENCAT="$ac_cv_path_GENCAT" +if test -n "$GENCAT"; then + echo "$ac_t""$GENCAT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + if test "$GENCAT" != "no"; then + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3592: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GMSGFMT" in + /*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_GMSGFMT="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="no" + ;; +esac +fi +GMSGFMT="$ac_cv_path_GMSGFMT" +if test -n "$GMSGFMT"; then + echo "$ac_t""$GMSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test "$GMSGFMT" = "no"; then + # Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3625: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GMSGFMT" in + /*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then + ac_cv_path_GMSGFMT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="no" + ;; +esac +fi +GMSGFMT="$ac_cv_path_GMSGFMT" +if test -n "$GMSGFMT"; then + echo "$ac_t""$GMSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + fi + # Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3660: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$XGETTEXT" in + /*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test -n "$XGETTEXT"; then + echo "$ac_t""$XGETTEXT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.cat + INSTOBJEXT=.cat + DATADIRNAME=lib + INTLDEPS='$(top_builddir)/intl/libintl.a' + INTLLIBS=$INTLDEPS + LIBS=`echo $LIBS | sed -e 's/-lintl//'` + nls_cv_header_intl=intl/libintl.h + nls_cv_header_libgt=intl/libgettext.h + fi +else + echo "$ac_t""no" 1>&6 +fi + + fi + fi + + if test "$CATOBJEXT" = "NONE"; then + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + INTLOBJS="\$(GETTOBJS)" + # Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3718: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$MSGFMT" in + /*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then + ac_cv_path_MSGFMT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="msgfmt" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test -n "$MSGFMT"; then + echo "$ac_t""$MSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3752: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GMSGFMT" in + /*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_GMSGFMT="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT="$ac_cv_path_GMSGFMT" +if test -n "$GMSGFMT"; then + echo "$ac_t""$GMSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + # Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3784: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$XGETTEXT" in + /*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test -n "$XGETTEXT"; then + echo "$ac_t""$XGETTEXT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.gmo + INSTOBJEXT=.mo + DATADIRNAME=share + INTLDEPS='$(top_builddir)/intl/libintl.a' + INTLLIBS=$INTLDEPS + LIBS=`echo $LIBS | sed -e 's/-lintl//'` + nls_cv_header_intl=intl/libintl.h + nls_cv_header_libgt=intl/libgettext.h + fi + + if test "$XGETTEXT" != ":"; then + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + echo "$ac_t""found xgettext program is not GNU xgettext; ignore it" 1>&6 + XGETTEXT=":" + fi + fi + + # We need to process the po/ directory. + POSUB=po + else + DATADIRNAME=share + nls_cv_header_intl=intl/libintl.h + nls_cv_header_libgt=intl/libgettext.h + fi + + + + + # If this is used in GNU gettext we have to set USE_NLS to `yes' + # because some of the sources are only built for this goal. + if test "$PACKAGE" = gettext; then + USE_NLS=yes + USE_INCLUDED_LIBINTL=yes + fi + + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + + + + + + + + + + + + + + if test "x$CATOBJEXT" != "x"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6 +echo "configure:3877: checking for catalogs to be installed" >&5 + NEW_LINGUAS= + for lang in ${LINGUAS=$ALL_LINGUAS}; do + case "$ALL_LINGUAS" in + *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;; + esac + done + LINGUAS=$NEW_LINGUAS + echo "$ac_t""$LINGUAS" 1>&6 + fi + + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + if test $ac_cv_header_locale_h = yes; then + INCLUDE_LOCALE_H="#include <locale.h>" + else + INCLUDE_LOCALE_H="\ +/* The system does not provide the header <locale.h>. Take care yourself. */" + fi + + + test -d intl || mkdir intl + if test "$CATOBJEXT" = ".cat"; then + ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6 +echo "configure:3905: checking for linux/version.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 3910 "configure" +#include "confdefs.h" +#include <linux/version.h> +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:3915: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + msgformat=linux +else + echo "$ac_t""no" 1>&6 +msgformat=xopen +fi + + + sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed + fi + sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \ + $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed + + if test "$PACKAGE" = "gettext"; then + GT_NO="#NO#" + GT_YES= + else + GT_NO= + GT_YES="#YES#" + fi + + + + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + + + l= + + + test -d po || mkdir po + if test "x$srcdir" != "x."; then + if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then + posrcprefix="$srcdir/" + else + posrcprefix="../$srcdir/" + fi + else + posrcprefix="../" + fi + rm -f po/POTFILES + sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ + < $srcdir/po/POTFILES.in > po/POTFILES + + +# If set to t, that means we are running in a shell under Emacs. + # If you have an Emacs named "t", then use the full path. + test "$EMACS" = t && EMACS= + # Extract the first word of "emacs xemacs", so it can be a program name with args. +set dummy emacs xemacs; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3986: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_EMACS'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$EMACS" in + /*) + ac_cv_path_EMACS="$EMACS" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_EMACS="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_EMACS" && ac_cv_path_EMACS="no" + ;; +esac +fi +EMACS="$ac_cv_path_EMACS" +if test -n "$EMACS"; then + echo "$ac_t""$EMACS" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test $EMACS != "no"; then + echo $ac_n "checking where .elc files should go""... $ac_c" 1>&6 +echo "configure:4017: checking where .elc files should go" >&5 + lispdir="\$(datadir)/emacs/site-lisp" + if test "x$prefix" = "xNONE"; then + if test -d $ac_default_prefix/share/emacs/site-lisp; then + lispdir="\$(prefix)/share/emacs/site-lisp" + else + if test -d $ac_default_prefix/lib/emacs/site-lisp; then + lispdir="\$(prefix)/lib/emacs/site-lisp" + fi + fi + else + if test -d $prefix/share/emacs/site-lisp; then + lispdir="\$(prefix)/share/emacs/site-lisp" + else + if test -d $prefix/lib/emacs/site-lisp; then + lispdir="\$(prefix)/lib/emacs/site-lisp" + fi + fi + fi + echo "$ac_t""$lispdir" 1>&6 + fi + + +ACLOCAL_VERSION=`sed -e 's/.*Last updated for gettext-\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/p' -e d $srcdir/aclocal.m4` + + +aclocaldir='${datadir}/aclocal' + + + +test -d intl || mkdir intl +echo "GNU gettext library from $PACKAGE-$VERSION" > intl/VERSION + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +DEFS=-DHAVE_CONFIG_H + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS <<EOF +#! /bin/sh +# Generated automatically by configure. +# Run this file to recreate the current configuration. +# This directory was configured as follows, +# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.12" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo "Makefile lib/Makefile intl/Makefile src/Makefile \ + po/Makefile.in doc/Makefile tests/Makefile m4/Makefile \ + misc/Makefile misc/gettextize intl/intlh.inst config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS <<EOF + +# Protect against being on the right side of a sed subst in config.status. +sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; + s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g +s%@PACKAGE@%$PACKAGE%g +s%@VERSION@%$VERSION%g +s%@ACLOCAL@%$ACLOCAL%g +s%@AUTOCONF@%$AUTOCONF%g +s%@AUTOMAKE@%$AUTOMAKE%g +s%@AUTOHEADER@%$AUTOHEADER%g +s%@MAKEINFO@%$MAKEINFO%g +s%@SET_MAKE@%$SET_MAKE%g +s%@host@%$host%g +s%@host_alias@%$host_alias%g +s%@host_cpu@%$host_cpu%g +s%@host_vendor@%$host_vendor%g +s%@host_os@%$host_os%g +s%@RANLIB@%$RANLIB%g +s%@CC@%$CC%g +s%@LD@%$LD%g +s%@NM@%$NM%g +s%@LN_S@%$LN_S%g +s%@LIBTOOL@%$LIBTOOL%g +s%@YACC@%$YACC%g +s%@CPP@%$CPP%g +s%@ALLOCA@%$ALLOCA%g +s%@LIBOBJS@%$LIBOBJS%g +s%@USE_NLS@%$USE_NLS%g +s%@MSGFMT@%$MSGFMT%g +s%@GMSGFMT@%$GMSGFMT%g +s%@XGETTEXT@%$XGETTEXT%g +s%@GENCAT@%$GENCAT%g +s%@USE_INCLUDED_LIBINTL@%$USE_INCLUDED_LIBINTL%g +s%@CATALOGS@%$CATALOGS%g +s%@CATOBJEXT@%$CATOBJEXT%g +s%@DATADIRNAME@%$DATADIRNAME%g +s%@GMOFILES@%$GMOFILES%g +s%@INSTOBJEXT@%$INSTOBJEXT%g +s%@INTLDEPS@%$INTLDEPS%g +s%@INTLLIBS@%$INTLLIBS%g +s%@INTLOBJS@%$INTLOBJS%g +s%@POFILES@%$POFILES%g +s%@POSUB@%$POSUB%g +s%@INCLUDE_LOCALE_H@%$INCLUDE_LOCALE_H%g +s%@GT_NO@%$GT_NO%g +s%@GT_YES@%$GT_YES%g +s%@MKINSTALLDIRS@%$MKINSTALLDIRS%g +s%@l@%$l%g +s%@EMACS@%$EMACS%g +s%@lispdir@%$lispdir%g +s%@ACLOCAL_VERSION@%$ACLOCAL_VERSION%g +s%@aclocaldir@%$aclocaldir%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <<EOF + +CONFIG_FILES=\${CONFIG_FILES-"Makefile lib/Makefile intl/Makefile src/Makefile \ + po/Makefile.in doc/Makefile tests/Makefile m4/Makefile \ + misc/Makefile misc/gettextize intl/intlh.inst"} +EOF +cat >> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' +ac_dC='\3' +ac_dD='%g' +# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". +ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='\([ ]\)%\1#\2define\3' +ac_uC=' ' +ac_uD='\4%g' +# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_eB='$%\1#\2define\3' +ac_eC=' ' +ac_eD='%g' + +if test "${CONFIG_HEADERS+set}" != set; then +EOF +cat >> $CONFIG_STATUS <<EOF + CONFIG_HEADERS="config.h" +EOF +cat >> $CONFIG_STATUS <<\EOF +fi +for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + echo creating $ac_file + + rm -f conftest.frag conftest.in conftest.out + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + cat $ac_file_inputs > conftest.in + +EOF + +# Transform confdefs.h into a sed script conftest.vals that substitutes +# the proper values into config.h.in to produce config.h. And first: +# Protect against being on the right side of a sed subst in config.status. +# Protect against being in an unquoted here document in config.status. +rm -f conftest.vals +cat > conftest.hdr <<\EOF +s/[\\&%]/\\&/g +s%[\\$`]%\\&%g +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp +s%ac_d%ac_u%gp +s%ac_u%ac_e%gp +EOF +sed -n -f conftest.hdr confdefs.h > conftest.vals +rm -f conftest.hdr + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >> conftest.vals <<\EOF +s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% +EOF + +# Break up conftest.vals because some shells have a limit on +# the size of here documents, and old seds have small limits too. + +rm -f conftest.tail +while : +do + ac_lines=`grep -c . conftest.vals` + # grep -c gives empty output for an empty file on some AIX systems. + if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi + # Write a limited-size here document to conftest.frag. + echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS + echo 'CEOF + sed -f conftest.frag conftest.in > conftest.out + rm -f conftest.in + mv conftest.out conftest.in +' >> $CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + rm -f conftest.vals + mv conftest.tail conftest.vals +done +rm -f conftest.vals + +cat >> $CONFIG_STATUS <<\EOF + rm -f conftest.frag conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.in >> conftest.h + rm -f conftest.in + if cmp -s $ac_file conftest.h 2>/dev/null; then + echo "$ac_file is unchanged" + rm -f conftest.h + else + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + fi + rm -f $ac_file + mv conftest.h $ac_file + fi +fi; done + +EOF + +cat >> $CONFIG_STATUS <<EOF +ac_sources="$nls_cv_header_libgt" +ac_dests="$nls_cv_header_intl" +EOF + +cat >> $CONFIG_STATUS <<\EOF +srcdir=$ac_given_srcdir +while test -n "$ac_sources"; do + set $ac_dests; ac_dest=$1; shift; ac_dests=$* + set $ac_sources; ac_source=$1; shift; ac_sources=$* + + echo "linking $srcdir/$ac_source to $ac_dest" + + if test ! -r $srcdir/$ac_source; then + { echo "configure: error: $srcdir/$ac_source: File not found" 1>&2; exit 1; } + fi + rm -f $ac_dest + + # Make relative symlinks. + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dest_dir=`echo $ac_dest|sed 's%/[^/][^/]*$%%'` + if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then + # The dest file is in a subdirectory. + test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir" + ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dest_dir_suffix. + ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dest_dir_suffix= ac_dots= + fi + + case "$srcdir" in + [/$]*) ac_rel_source="$srcdir/$ac_source" ;; + *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;; + esac + + # Make a symlink if possible; otherwise try a hard link. + if ln -s $ac_rel_source $ac_dest 2>/dev/null || + ln $srcdir/$ac_source $ac_dest; then : + else + { echo "configure: error: can not link $ac_dest to $srcdir/$ac_source" 1>&2; exit 1; } + fi +done +EOF +cat >> $CONFIG_STATUS <<EOF + + + +EOF +cat >> $CONFIG_STATUS <<\EOF +test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h +case "$CONFIG_FILES" in *po/Makefile.in*) + sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile + esac + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/debian/gettext-kde/gettext-kde-0.10.35/configure.in b/debian/gettext-kde/gettext-kde-0.10.35/configure.in new file mode 100644 index 00000000..7365fe92 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/configure.in @@ -0,0 +1,80 @@ +dnl Process this file with autoconf to produce a configure script. +AC_PREREQ(2.12) +AC_REVISION($Revision: 1.143 $) +AC_INIT(src/msgfmt.c) +AM_INIT_AUTOMAKE(gettext, 0.10.35) +AM_CONFIG_HEADER(config.h) + +dnl Set of available languages. +ALL_LINGUAS="da de es fr ko nl no no@nynorsk pl pt sl sv" + +dnl Checks for programs. +AM_PROG_LIBTOOL +AC_PROG_CC +AC_ISC_POSIX +AM_PROG_INSTALL +AC_PROG_YACC + +dnl Checks for libraries. + +dnl Checks for header files. +AC_HEADER_STDC +AC_HAVE_HEADERS(limits.h malloc.h string.h unistd.h values.h) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_C_INLINE +AC_TYPE_OFF_T +AC_TYPE_SIZE_T +AM_TYPE_PTRDIFF_T + +dnl Checks for library functions. +AC_FUNC_ALLOCA +AC_FUNC_VPRINTF +AC_CHECK_FUNCS([getcwd mblen memcpy strchr strerror uname]) +AC_REPLACE_FUNCS([getline memmove memset stpcpy stpncpy strcspn \ +strncasecmp strstr strtoul vasprintf]) +if test $ac_cv_func_getline != yes; then + AC_CHECK_FUNCS(getdelim) +fi + +AC_CHECK_FUNC(parse_printf_format, gt_cv_func_parse_printf_format=yes, + gt_cv_func_parse_printf_format=no) +if test $gt_cv_func_parse_printf_format = yes; then + AC_DEFINE(HAVE_PARSE_PRINTF_FORMAT) +else + LIBOBJS="$LIBOBJS printf-prs.o" +fi + +AM_FUNC_ERROR_AT_LINE + +dnl These are the only lines required to internationalize the package. +dnl (OK, not quite, the AC_OUTPUT has also some parts.) +AM_GNU_GETTEXT + +dnl Check for Emacs and where to install .elc files. +AM_PATH_LISPDIR + +dnl The gettextize script test for the version of the aclocal.m4 file in +dnl user's project. This must correspond to the number the aclocal.m4 +dnl here has. Extract it. +changequote(,)dnl +ACLOCAL_VERSION=`sed -e 's/.*Last updated for gettext-\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/p' -e d $srcdir/aclocal.m4` +changequote([, ])dnl +AC_SUBST(ACLOCAL_VERSION) + +aclocaldir='${datadir}/aclocal' +AC_SUBST(aclocaldir) + + +dnl Generate the version information file in the intl/ directory. +test -d intl || mkdir intl +echo "GNU gettext library from $PACKAGE-$VERSION" > intl/VERSION + +AC_OUTPUT([Makefile lib/Makefile intl/Makefile src/Makefile \ + po/Makefile.in doc/Makefile tests/Makefile m4/Makefile \ + misc/Makefile misc/gettextize intl/intlh.inst]) +dnl misc/Makefile misc/gettextize intl/intlh.inst], +dnl [case "$CONFIG_FILES" in *po/Makefile.in*) +dnl sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile +dnl esac]) diff --git a/debian/gettext-kde/gettext-kde-0.10.35/debian/changelog b/debian/gettext-kde/gettext-kde-0.10.35/debian/changelog new file mode 100644 index 00000000..13d15424 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/debian/changelog @@ -0,0 +1,53 @@ +gettext-kde (0.10.35-debian11.0.0+3~a) bullseye; urgency=low + + * Change debhelper compatibility level to 9 + + -- Slávek Banko <[email protected]> Tue, 07 Apr 2020 12:10:50 +0200 + +gettext-kde (0.10.35-ubuntu20.04.0+2~a) focal; urgency=low + + * Change debhelper compatibility level to 7 + + -- Slávek Banko <[email protected]> Sat, 13 Aug 2016 18:53:28 +0200 + +gettext-kde (0.10.35-ubuntu16.10.0+1~a) yakkety; urgency=low + + [ Michele Calgaro ] + * debian/control: + + fix automake dependency + * misc/Makefile.am + + fix build with automake-1.14 + + -- Slávek Banko <[email protected]> Sun, 21 Sep 2014 15:58:48 +0200 + +gettext-kde (0.10.35-1debian7.0.0+0~raspbian) raspbian-wheezy; urgency=low + + * Switch to quilt format + + -- Slávek Banko <[email protected]> Wed, 05 Mar 2014 23:32:42 +0100 + +gettext-kde (0.10.35-0ubuntu4) lucid; urgency=low + + * rebuild rest of main for armel armv7/thumb2 optimization; + UbuntuSpec:mobile-lucid-arm-gcc-v7-thumb2 + + -- Alexander Sack <[email protected]> Fri, 05 Mar 2010 04:34:39 +0100 + +gettext-kde (0.10.35-0ubuntu3) karmic; urgency=low + + * No-change rebuild to gain FORTIFY defaults. + + -- Kees Cook <[email protected]> Sat, 09 May 2009 10:13:35 -0700 + +gettext-kde (0.10.35-0ubuntu2) gutsy; urgency=low + + * No-change upload to enable stack protector. + + -- Kees Cook <[email protected]> Tue, 14 Aug 2007 10:19:11 -0700 + +gettext-kde (0.10.35-0ubuntu1) dapper; urgency=low + + * Initial release, based on SuSE's kdesdk packaging + + -- Jonathan Riddell <[email protected]> Tue, 15 Nov 2005 17:53:44 +0000 + diff --git a/debian/gettext-kde/gettext-kde-0.10.35/debian/compat b/debian/gettext-kde/gettext-kde-0.10.35/debian/compat new file mode 100644 index 00000000..ec635144 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/debian/compat @@ -0,0 +1 @@ +9 diff --git a/debian/gettext-kde/gettext-kde-0.10.35/debian/control b/debian/gettext-kde/gettext-kde-0.10.35/debian/control new file mode 100644 index 00000000..ed430540 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/debian/control @@ -0,0 +1,13 @@ +Source: gettext-kde +Section: deps-r14/devel +Priority: optional +Maintainer: Jonathan Riddell <[email protected]> +Build-Depends: debhelper (>= 9~), autotools-dev, libtool, automake +Standards-Version: 3.6.2 + +Package: gettext-kde +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: version of gettext used by TDE + TDE and TDE programs use this older patched version of + xgettext to create .pot files from program's i18n strings. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/debian/copyright b/debian/gettext-kde/gettext-kde-0.10.35/debian/copyright new file mode 100644 index 00000000..eeb74b64 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/debian/copyright @@ -0,0 +1,21 @@ +This package was debianised by Jonathan Riddell <[email protected]> on +Tue, 15 Nov 2005 17:53:44 +0000. + +It was downloaded from ftp://ftp.kde.org/pub/kde/devel/gettext-kde/gettext-0.10.35-kde.tar.gz + +GNU gettext was written by Ulrich Drepper <[email protected]>. + +Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, 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. + +On Debian systems, the complete text of the GNU General Public License +can be found in `/usr/share/common-licenses/GPL'. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/debian/docs b/debian/gettext-kde/gettext-kde-0.10.35/debian/docs new file mode 100644 index 00000000..8e9ff6e7 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/debian/docs @@ -0,0 +1,6 @@ +BUGS +NEWS +README +README-alpha +README.gemtext +TODO diff --git a/debian/gettext-kde/gettext-kde-0.10.35/debian/patches/automake-1.14.diff b/debian/gettext-kde/gettext-kde-0.10.35/debian/patches/automake-1.14.diff new file mode 100644 index 00000000..9f3bdbbe --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/debian/patches/automake-1.14.diff @@ -0,0 +1,10 @@ +Index: b/misc/Makefile.am +=================================================================== +--- a/misc/Makefile.am ++++ b/misc/Makefile.am +@@ -27,5 +27,3 @@ + lisp_LISP = po-mode.el + + bin_SCRIPTS = gettextize +- +-locale_DATA = locale.alias diff --git a/debian/gettext-kde/gettext-kde-0.10.35/debian/patches/gettext-0.10.35.diff b/debian/gettext-kde/gettext-kde-0.10.35/debian/patches/gettext-0.10.35.diff new file mode 100644 index 00000000..b68a66ce --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/debian/patches/gettext-0.10.35.diff @@ -0,0 +1,41 @@ +Index: b/configure.in +=================================================================== +--- a/configure.in ++++ b/configure.in +@@ -26,7 +26,6 @@ + AC_C_INLINE + AC_TYPE_OFF_T + AC_TYPE_SIZE_T +-AM_TYPE_PTRDIFF_T + + dnl Checks for library functions. + AC_FUNC_ALLOCA +@@ -38,15 +37,7 @@ + AC_CHECK_FUNCS(getdelim) + fi + +-AC_CHECK_FUNC(parse_printf_format, gt_cv_func_parse_printf_format=yes, +- gt_cv_func_parse_printf_format=no) +-if test $gt_cv_func_parse_printf_format = yes; then +- AC_DEFINE(HAVE_PARSE_PRINTF_FORMAT) +-else +- LIBOBJS="$LIBOBJS printf-prs.o" +-fi +- +-AM_FUNC_ERROR_AT_LINE ++AC_DEFINE(HAVE_PARSE_PRINTF_FORMAT) + + dnl These are the only lines required to internationalize the package. + dnl (OK, not quite, the AC_OUTPUT has also some parts.) +Index: b/src/xgettext.c +=================================================================== +--- a/src/xgettext.c ++++ b/src/xgettext.c +@@ -48,7 +48,6 @@ + #include "dir-list.h" + #include "error.h" + #include "hash.h" +-#include "getline.h" + #include "system.h" + #include "po.h" + #include "message.h" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/debian/patches/series b/debian/gettext-kde/gettext-kde-0.10.35/debian/patches/series new file mode 100644 index 00000000..f4126883 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/debian/patches/series @@ -0,0 +1,2 @@ +gettext-0.10.35.diff +automake-1.14.diff diff --git a/debian/gettext-kde/gettext-kde-0.10.35/debian/rules b/debian/gettext-kde/gettext-kde-0.10.35/debian/rules new file mode 100755 index 00000000..14cd845a --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/debian/rules @@ -0,0 +1,112 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + + +CFLAGS = -Wall -g + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +config.status: configure + dh_testdir + # Add here commands to configure the package. + + rm -f missing mkinstalldirs ltconfig install-sh ltmain.sh libtool + libtoolize --force + aclocal -I m4 + automake -a + autoheader + autoconf + + CFLAGS="$(CFLAGS)" ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info + + +build: build-stamp + +build-stamp: config.status + dh_testdir + + # Add here commands to compile the package. + $(MAKE) -C intl + $(MAKE) -C lib + $(MAKE) -C src xgettext + #docbook-to-man debian/gettext-kde.sgml > gettext-kde.1 + + touch build-stamp + +clean: + dh_testdir + dh_testroot + rm -f build-stamp + + # Add here commands to clean up after the build process. + -$(MAKE) distclean + + dh_clean + + rm -f config.sub config.guess elisp-comp depcomp missing install-sh ltmain.sh + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/gettext-kde. + mkdir -p debian/gettext-kde/usr/bin/ + install -m 755 src/xgettext debian/gettext-kde/usr/bin/kde-xgettext + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs ChangeLog + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_python +# dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install diff --git a/debian/gettext-kde/gettext-kde-0.10.35/debian/source/format b/debian/gettext-kde/gettext-kde-0.10.35/debian/source/format new file mode 100644 index 00000000..163aaf8d --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/gettext-kde/gettext-kde-0.10.35/debian/source/options b/debian/gettext-kde/gettext-kde-0.10.35/debian/source/options new file mode 100644 index 00000000..d71748bb --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/debian/source/options @@ -0,0 +1,3 @@ +# Use xz instead of gzip +compression = "xz" +compression-level = 9 diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/ChangeLog b/debian/gettext-kde/gettext-kde-0.10.35/doc/ChangeLog new file mode 100644 index 00000000..e9b286d7 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/ChangeLog @@ -0,0 +1,418 @@ +1997-09-06 02:13 Ulrich Drepper <[email protected]> + + * gettext.texi: Fix names of autoconf macros now that they are in + automake. + File NLS is now named ABOUT-NLS. + Reported by Bruno Haible <[email protected]>. + + * nls.texi: Better description of --with-included-gettext. + +1997-08-01 15:50 Ulrich Drepper <[email protected]> + + * Makefile.am (AUTOMAKE_OPTIONS): Require version 1.2. + +1997-04-12 17:45 Ulrich Drepper <[email protected]> + + * mdate-sh: Update from libit version. + + * mdate-sh: Handle ls output with file type in ls output is + starting with -. + +1997-04-05 18:14 Ulrich Drepper <[email protected]> + + * mdate-sh: Use ls command with -d so that we also can handle + directories. Patch by Bruno Haible. + +1997-03-11 16:24 Ulrich Drepper <[email protected]> + + * nls.texi: Don't mention removed translation teams anymore. + +Sat Dec 7 17:53:26 1996 Ulrich Drepper <[email protected]> + + * gettext.texi: We don't need the hack for getting the cedille + character anymore. + +Tue Dec 3 15:46:09 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (EXTRA_DIST): texinfo.tex is now automatically + distributed. + +Sun Aug 18 16:55:02 1996 Ulrich Drepper <[email protected]> + + * nls.texi: Set STATUS to August. + +Mon Jun 17 02:29:15 1996 Ulrich Drepper <[email protected]> + + * gettext.texi: More small fixes. + +Sat Jun 15 16:55:00 1996 Ulrich Drepper <[email protected]> + + * nls.texi, gettext.texi: Some better words by Fran�ois Pinard. + +Fri Jun 14 18:47:23 1996 Santiago Vila Doncel <[email protected]> + + * gettext.texi: Correct a few typos. + +Tue Jun 11 19:31:16 1996 Ulrich Drepper <[email protected]> + + * gettext.texi: A few corrections by Thomas Esken. + +Tue Jun 11 15:29:56 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (AUTOMAKE_OPTIONS): Add variable. Must be defined + in all subdirs. + +Tue Jun 4 03:43:17 1996 Ulrich Drepper <[email protected]> + + * gettext.texi: + Tons of changes. A first step for a real, uptodate manual. + +Sun Jun 2 21:21:18 1996 Ulrich Drepper <[email protected]> + + * iso-apdx.sed, Makefile.am, ISO_639: Initial revision. + +Sun May 26 18:21:25 1996 Ulrich Drepper <[email protected]> + + * nls.texi: Add Arabic. + +Fri May 24 18:24:56 1996 Ulrich Drepper <[email protected]> + + * nls.texi: Add Ukrainian. + +Tue May 21 14:25:02 1996 Ulrich Drepper <[email protected]> + + * nls.texi: Fix typo: outself -> ourself. + + * nls.texi: Correct Indonesian. + Add Slovenian and Hungarian. + +Sun May 19 15:08:24 1996 Ulrich Drepper <[email protected]> + + * nls.texi: Update language list. Add Hebrew and Latin. + +Sat May 4 00:41:17 1996 Ulrich Drepper <[email protected]> + + * nls.texi: Rewording by Fran�ois Pinard. + + * nls.texi: Change explicitely' to `explicitly'. By Fran�ois Pinard. + +Fri May 3 17:21:48 1996 Ulrich Drepper <[email protected]> + + * matrix.texi: 9605031921 + +Wed Apr 10 22:04:29 1996 Ulrich Drepper <drepper@myware> + + * nls.texi: matrix.texi now contains table commands. + + * matrix.texi: Update for 960410. + +Wed Apr 10 21:58:17 1996 Fran�ois Pinard <[email protected]> + + * nls.texi: Add Korean to list of languages. + +Tue Apr 9 23:28:08 1996 Fran�ois Pinard <[email protected]> + + * nls.texi: Some better words. + +Sat Apr 6 11:13:18 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Add matrix.texi. Reported by Fran�ois + Pinard. + +Wed Apr 3 23:40:29 1996 Fran�ois Pinard <[email protected]> + + * nls.texi: Correct typo: ones -> one. + +Tue Apr 2 18:53:01 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (all-gettext): New goal. Same as all. + +Tue Apr 2 16:13:11 1996 Ulrich Drepper <drepper@myware> + + * nls.texi: + Document change in aclocal.m4. Describe --with-catgets option. + +Mon Mar 25 23:21:49 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Append iso-apdx.sed, ISO_639, + iso-apdx.texi. + (gettext.info, gettext.dvi): Depend on iso-apdx.texi. + (iso-apdx.texi): New rules. Create file from ISO_639. + +Mon Mar 25 02:55:23 1996 Fran�ois Pinard <[email protected]> + + * gettext.texi: Latest update of PO mode documentation. + +Sat Mar 23 14:07:57 1996 Fran�ois Pinard <[email protected]> + + * gettext.texi: Added changes concerning PO mode changes. + +Sat Mar 23 13:46:49 1996 Frank Donahoe <[email protected]> + + * gettext.texi: Fixed many problems with the English language. + +Wed Mar 13 21:06:17 1996 Ulrich Drepper <drepper@myware> + + * nls.texi: Changed gnu-translation@prep to gnu-translation@gnu. + Suggested by Franc,ois Pinard. + +Fri Mar 1 23:46:28 1996 Ulrich Drepper <drepper@myware> + + * nls.texi: STATUS is 1996, not 1995. + +Thu Feb 15 03:45:30 1996 Ulrich Drepper <drepper@myware> + + * gettext.texi: Update documentation for + - `--force' option + - `-d -' option + - new intl/po subdir handling + +Mon Feb 12 01:33:49 1996 Ulrich Drepper <drepper@myware> + + * nls.texi: STATUS is January. + + * nls.texi: Omitted pl at lower side. + + * nls.texi: Add pl for gettext to matrix. + +Fri Dec 29 14:00:17 1995 Ulrich Drepper <drepper@myware> + + * nls.texi: Incorporate some improvements by Franc,ois Pinard. + +Sun Dec 24 14:30:49 1995 Ulrich Drepper <drepper@myware> + + * nls.texi: Small corrections. + Updte table for ko translation of gettext. + +Tue Dec 19 22:13:40 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (Makefile): Explicitly use $(SHELL) for running + shell scripts. + +Fri Dec 15 19:34:50 1995 Karl Eichwalder <[email protected]> + + * gettext.texi: Correct list of needed macros form aclocal.m4. + +Mon Dec 4 16:19:29 1995 Ulrich Drepper <drepper@myware> + + * nls.texi (STATUS): Set to November. + +Mon Dec 4 16:14:18 1995 Ulrich Drepper <drepper@myware> + + * nls.texi: Update matrix for official release. + +Sun Nov 26 01:22:07 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: Fix some typos. + +Sat Nov 25 02:45:46 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (version.texi): Also depend on ../configure.in. + +Thu Nov 23 01:26:35 1995 Ulrich Drepper <drepper@myware> + + * nls.texi: + Change README.NLS to ABOUT-NLS. Reported by Franc,ois Pinard. + +Tue Nov 14 12:43:22 1995 Ulrich Drepper <drepper@myware> + + * nls.texi: Mention Japanese translation for shar in table. + +Thu Nov 9 01:14:49 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: + Document new option --directory and --files-from of xgettext program. + +Tue Nov 7 10:54:43 1995 Ulrich Drepper <drepper@myware> + + * nls.texi: CLISP now uses GNU gettext. + +Mon Nov 6 17:05:39 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: Some more cleanups by Franc,ois Pinard. + +Mon Nov 6 00:36:37 1995 Ulrich Drepper <drepper@> + + * nls.texi: Add comment about problems with systems which have GNU + gettext previously installed. + +Sun Nov 5 21:56:51 1995 Ulrich Drepper <drepper@myware> + + * nls.texi: + Advise about always using GNU gettext moved to here from ../README. + + * gettext.texi: Fix some typos reported by Franc,ois Pinard. + In descripton of _N change the name to N_. + + * Makefile.in (gettext.info): + Remove old .info* files before generating new ones. + (stamp-vti): Remove old stamp before generating new one. + +Sun Nov 5 19:40:11 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist-gettext): Make synonym for dist. + +Sun Nov 5 17:59:31 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Add nls.texi. + + * nls.texi: Initial revision. + + * gettext.texi: Protect RFC and number by @w. + +Sun Nov 5 11:38:00 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist): Suppress error message when ln failed. + Remove Emacs local variable definition. + (dist): Get files from $(srcdir) explicitly. + + * gettext.texi: Add some comments about gettext_noop and _N. + Describe defaults keywords for -k option of xgettext. + +Fri Nov 3 00:20:35 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: Some small changes by Franc,ois. + +Sat Oct 28 23:26:28 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: + Add warning about language changing and not using GNU gettext library. + +Sat Oct 28 17:15:07 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: Run spell checker. :-) It was necessary. + + * gettext.texi: Document usage of libintl in other programs. + Describe changing of language in programs. + +Sun Sep 17 23:16:16 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: Remove references to ISO 639 in description of + locale variable settings. + +Wed Aug 23 20:49:57 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: Applied Franc,ois' patch from 950821. + +Sat Aug 19 17:41:06 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: Make only install-data depend on `all'. + + * Makefile.in (install-src): + Make behave like install. I.e. really install the manual. + +Fri Aug 18 12:33:43 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: Changes of 950817 by Franc,ois Pinard. + +Mon Aug 14 23:52:20 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (install-src): New no-op goal. + +Tue Aug 8 01:39:45 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: + Add description of dcgettext() optimization for gcc-2.7. + +Fri Aug 4 15:47:10 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist): Remove `copying instead' message. + +Tue Aug 1 15:58:17 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: Some typos fixed. Email address update for Eugene + H. Dorr. By Franc,ois Pinard. + + * Makefile.in (stamp-vti): + Use $(SHELL) and make compilation offside $(srcdir) possible. + +Tue Aug 1 08:51:30 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (install-data): Use sed instead of expr to get basename. + +Sun Jul 30 22:17:14 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: Minor corrections to menus and typos by Franc,ois. + Some more words about LIBS rule in src/Makefile.in. + PO mode file is now installed automatically. + +Wed Jul 26 01:00:11 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: + Includes latest of Franc,ois' changes for the maintainer chapter. + Many little changes and addons. + +Mon Jul 24 00:51:38 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: Typo changes by Franc,ois. + Added section about special cases in translatable strings. + Added section about changing Makefiles for Maintainers. + Various minor addons. + +Wed Jul 19 02:05:45 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: + Fix typo: keywoards -> keywords. Reported by Franc,ois Pinard. + + * gettext.texi: + Franc,ois added description of the last changes in Emacs PO mode + which allow marking translatable strings in C sources. + +Tue Jul 18 21:25:44 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Now we have again gettext.info-[1-4]. + + * gettext.texi (Comparison): + Some points on comparing catgets vs. gettext are written. + +Mon Jul 17 01:03:49 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: Typo fixed. Reported by Franc,ois Pinard. + +Sun Jul 16 13:25:05 1995 Ulrich Drepper <drepper@myware> + + * gettext.texi: + Latest version for 0.7.4. Changes all by Franc,ois Pinard. + +Sun Jul 16 00:17:28 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): + With the current makeinfo (1.63) there are only gettext.info-[123] + produced. Remove gettext.info-4. Reported by Erik Backus. + +Thu Jul 13 01:41:14 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (check): New no-op goal. + + * gettext.texi: Version of 950712 by Franc,ois. + +Wed Jul 12 00:32:58 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): now we have gettext.info{,-[1-4]} + + * gettext.texi: First version after rewrite by Franc,ois Pinard. + +Mon Jul 3 23:36:25 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: Correct for new manual with NLS and po-mode chapter. + Do construct po-mode.{texi,dvi} use nls.texi. + Last correction on install goal was wrong. + Correct installation and unistallation rules. + + * gettext.texi: Version with po-mode and NLS chapter. + Minor changes by Franc,ois. + + * gettext.texi: Make NLS part an include file. + +Sun Jul 2 12:32:37 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): fix typo. + + * gettext.texi: some more things written about using GNU gettext + in own projects. + +Sun Jul 2 01:47:02 1995 Ulrich Drepper <drepper@myware> + + * First official release. This directory now contains a very + preliminary version of the gettext manual with a quite complete + chapter for todays Emacs PO mode by Franc,ois Pinard. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/ISO_639 b/debian/gettext-kde/gettext-kde-0.10.35/doc/ISO_639 new file mode 100644 index 00000000..c90684f6 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/ISO_639 @@ -0,0 +1,180 @@ +Technical contents of ISO 639:1988 (E/F) +"Code for the representation of names of languages". + +Typed by [email protected] 1990-11-30 +Minor corrections, 1992-09-08 by Keld Simonsen +Sundanese corrected, 1992-11-11 by Keld Simonsen +Telugu corrected, 1995-08-24 by Keld Simonsen +Hebrew, Indonesian, Yiddish corrected 1995-10-10 by Michael Everson +Inuktitut, Uighur, Zhuang added 1995-10-10 by Michael Everson +Sinhalese corrected, 1995-10-10 by Michael Everson +Faeroese corrected to Faroese, 1995-11-18 by Keld Simonsen + +Two-letter lower-case symbols are used. +The Registration Authority for ISO 639 is Infoterm, Osterreichisches +Normungsinstitut (ON), Postfach 130, A-1021 Vienna, Austria. + +aa Afar +ab Abkhazian +af Afrikaans +am Amharic +ar Arabic +as Assamese +ay Aymara +az Azerbaijani + +ba Bashkir +be Byelorussian +bg Bulgarian +bh Bihari +bi Bislama +bn Bengali; Bangla +bo Tibetan +br Breton + +ca Catalan +co Corsican +cs Czech +cy Welsh + +da Danish +de German +dz Bhutani + +el Greek +en English +eo Esperanto +es Spanish +et Estonian +eu Basque + +fa Persian +fi Finnish +fj Fiji +fo Faroese +fr French +fy Frisian + +ga Irish +gd Scots Gaelic +gl Galician +gn Guarani +gu Gujarati + +ha Hausa +he Hebrew (formerly iw) +hi Hindi +hr Croatian +hu Hungarian +hy Armenian + +ia Interlingua +id Indonesian (formerly in) +ie Interlingue +ik Inupiak +is Icelandic +it Italian +iu Inuktitut + +ja Japanese +jw Javanese + +ka Georgian +kk Kazakh +kl Greenlandic +km Cambodian +kn Kannada +ko Korean +ks Kashmiri +ku Kurdish +ky Kirghiz + +la Latin +ln Lingala +lo Laothian +lt Lithuanian +lv Latvian, Lettish + +mg Malagasy +mi Maori +mk Macedonian +ml Malayalam +mn Mongolian +mo Moldavian +mr Marathi +ms Malay +mt Maltese +my Burmese + +na Nauru +ne Nepali +nl Dutch +no Norwegian + +oc Occitan +om (Afan) Oromo +or Oriya + +pa Punjabi +pl Polish +ps Pashto, Pushto +pt Portuguese + +qu Quechua + +rm Rhaeto-Romance +rn Kirundi +ro Romanian +ru Russian +rw Kinyarwanda + +sa Sanskrit +sd Sindhi +sg Sangro +sh Serbo-Croatian +si Sinhalese +sk Slovak +sl Slovenian +sm Samoan +sn Shona +so Somali +sq Albanian +sr Serbian +ss Siswati +st Sesotho +su Sundanese +sv Swedish +sw Swahili + +ta Tamil +te Telugu +tg Tajik +th Thai +ti Tigrinya +tk Turkmen +tl Tagalog +tn Setswana +to Tonga +tr Turkish +ts Tsonga +tt Tatar +tw Twi + +ug Uighur +uk Ukrainian +ur Urdu +uz Uzbek + +vi Vietnamese +vo Volapuk + +wo Wolof + +xh Xhosa + +yi Yiddish (formerly ji) +yo Yoruba + +za Zhuang +zh Chinese +zu Zulu diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/Makefile.am b/debian/gettext-kde/gettext-kde-0.10.35/doc/Makefile.am new file mode 100644 index 00000000..661c9785 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/Makefile.am @@ -0,0 +1,32 @@ +## Makefile for the doc subdirectory of the GNU NLS Utilities +## Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, 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. + +## Process this file with automake to produce Makefile.in. + +AUTOMAKE_OPTIONS = 1.2 gnits + +SED = sed + +info_TEXINFOS = gettext.texi +gettext_TEXINFOS = iso-apdx.texi + +EXTRA_DIST = iso-apdx.sed ISO_639 nls.texi matrix.texi + +iso-apdx.texi: ISO_639 iso-apdx.sed + $(SED) -f $(srcdir)/iso-apdx.sed $(srcdir)/ISO_639 > iso-apdx.tmp + rm -f $(srcdir)/iso-apdx.texi + mv iso-apdx.tmp $(srcdir)/iso-apdx.texi diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/Makefile.in b/debian/gettext-kde/gettext-kde-0.10.35/doc/Makefile.in new file mode 100644 index 00000000..3a121be4 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/Makefile.in @@ -0,0 +1,348 @@ +# Makefile.in generated automatically by automake 1.3 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +ACLOCAL_VERSION = @ACLOCAL_VERSION@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +DATADIRNAME = @DATADIRNAME@ +EMACS = @EMACS@ +GENCAT = @GENCAT@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GT_NO = @GT_NO@ +GT_YES = @GT_YES@ +INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ +INSTOBJEXT = @INSTOBJEXT@ +INTLDEPS = @INTLDEPS@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +LD = @LD@ +LIBOBJS = @LIBOBJS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +NM = @NM@ +PACKAGE = @PACKAGE@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +YACC = @YACC@ +aclocaldir = @aclocaldir@ +l = @l@ +lispdir = @lispdir@ + +AUTOMAKE_OPTIONS = 1.2 gnits + +SED = sed + +info_TEXINFOS = gettext.texi +gettext_TEXINFOS = iso-apdx.texi + +EXTRA_DIST = iso-apdx.sed ISO_639 nls.texi matrix.texi +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +TEXI2DVI = texi2dvi +TEXINFO_TEX = $(srcdir)/texinfo.tex +INFO_DEPS = gettext.info +DVIS = gettext.dvi +TEXINFOS = gettext.texi +DIST_COMMON = $(gettext_TEXINFOS) ChangeLog Makefile.am Makefile.in \ +mdate-sh stamp-vti texinfo.tex version.texi + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP = --best +all: Makefile $(INFO_DEPS) + +.SUFFIXES: +.SUFFIXES: .dvi .info .ps .texi .texinfo .txi +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnits --include-deps doc/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +version.texi: stamp-vti + cp $(srcdir)/stamp-vti $(srcdir)/version.texi + +stamp-vti: gettext.texi $(top_srcdir)/configure.in + @echo "@set UPDATED `cd $(srcdir) \ + && $(SHELL) ./mdate-sh gettext.texi`" > vti.tmp + @echo "@set EDITION $(VERSION)" >> vti.tmp + @echo "@set VERSION $(VERSION)" >> vti.tmp + @cmp -s vti.tmp $(srcdir)/stamp-vti \ + || (echo "Updating $(srcdir)/stamp-vti"; \ + cp vti.tmp $(srcdir)/stamp-vti) + -@rm -f vti.tmp + +mostlyclean-vti: + -rm -f vti.tmp + +clean-vti: + +distclean-vti: + +maintainer-clean-vti: + -rm -f stamp-vti version.texi + +gettext.info: gettext.texi version.texi $(gettext_TEXINFOS) +gettext.dvi: gettext.texi version.texi $(gettext_TEXINFOS) + + +DVIPS = dvips + +.texi.info: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + +.texi.dvi: + TEXINPUTS=$(srcdir):$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + +.texi: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + +.texinfo.info: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + +.texinfo: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + +.texinfo.dvi: + TEXINPUTS=$(srcdir):$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + +.txi.info: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + +.txi.dvi: + TEXINPUTS=$(srcdir):$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + +.txi: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` +.dvi.ps: + $(DVIPS) $< -o $@ + +install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(infodir) + @for file in $(INFO_DEPS); do \ + d=$(srcdir); \ + for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \ + if test -f $$d/$$ifile; then \ + echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile"; \ + $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; \ + else : ; fi; \ + done; \ + done + @$(POST_INSTALL) + @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ + for file in $(INFO_DEPS); do \ + echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\ + install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\ + done; \ + else : ; fi + +uninstall-info: + $(PRE_UNINSTALL) + @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ + ii=yes; \ + else ii=; fi; \ + for file in $(INFO_DEPS); do \ + test -z "$ii" \ + || install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \ + done + @$(NORMAL_UNINSTALL) + for file in $(INFO_DEPS); do \ + (cd $(DESTDIR)$(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \ + done + +dist-info: $(INFO_DEPS) + for base in $(INFO_DEPS); do \ + d=$(srcdir); \ + for file in `cd $$d && eval echo $$base*`; do \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done; \ + done + +mostlyclean-aminfo: + -rm -f gettext.aux gettext.cp gettext.cps gettext.dvi gettext.fn \ + gettext.fns gettext.ky gettext.kys gettext.ps gettext.log \ + gettext.pg gettext.toc gettext.tp gettext.tps gettext.vr \ + gettext.vrs gettext.op gettext.tr gettext.cv gettext.cn + +clean-aminfo: + +distclean-aminfo: + +maintainer-clean-aminfo: + for i in $(INFO_DEPS); do \ + rm -f $$i; \ + if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \ + rm -f $$i-[0-9]*; \ + fi; \ + done +tags: TAGS +TAGS: + + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = doc + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done + $(MAKE) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info +info: $(INFO_DEPS) +dvi: $(DVIS) +check: all + $(MAKE) +installcheck: +install-exec: + @$(NORMAL_INSTALL) + +install-data: install-info-am + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: uninstall-info + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(infodir) + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-vti mostlyclean-aminfo mostlyclean-generic + +clean: clean-vti clean-aminfo clean-generic mostlyclean + +distclean: distclean-vti distclean-aminfo distclean-generic clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-vti maintainer-clean-aminfo \ + maintainer-clean-generic distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: mostlyclean-vti distclean-vti clean-vti maintainer-clean-vti \ +install-info-am uninstall-info mostlyclean-aminfo distclean-aminfo \ +clean-aminfo maintainer-clean-aminfo tags distdir info dvi installcheck \ +install-exec install-data install uninstall all installdirs \ +mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +iso-apdx.texi: ISO_639 iso-apdx.sed + $(SED) -f $(srcdir)/iso-apdx.sed $(srcdir)/ISO_639 > iso-apdx.tmp + rm -f $(srcdir)/iso-apdx.texi + mv iso-apdx.tmp $(srcdir)/iso-apdx.texi + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info b/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info new file mode 100644 index 00000000..94342c50 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info @@ -0,0 +1,125 @@ +This is Info file gettext.info, produced by Makeinfo version 1.68 from +the input file gettext.texi. + +INFO-DIR-SECTION GNU Gettext Utilities +START-INFO-DIR-ENTRY +* Gettext: (gettext). GNU gettext utilities. +* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. +* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. +* msgmerge: (gettext)msgmerge Invocation. Update two PO files into one. +* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. +END-INFO-DIR-ENTRY + + This file provides documentation for GNU `gettext' utilities. It +also serves as a reference for the free Translation Project. + + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Foundation. + + +Indirect: +gettext.info-1: 1425 +gettext.info-2: 48171 +gettext.info-3: 95467 +gettext.info-4: 143902 +gettext.info-5: 193500 + +Tag Table: +(Indirect) +Node: Top1425 +Node: Introduction6602 +Node: Why8466 +Node: Concepts11521 +Node: Aspects14934 +Node: Files20982 +Node: Overview23250 +Node: Basics33886 +Node: Installation34716 +Node: PO Files36454 +Node: Main PO Commands43213 +Node: Entry Positioning48171 +Node: Normalizing53435 +Node: Sources57891 +Node: Triggering59162 +Node: Mark Keywords61518 +Node: Marking65068 +Node: c-format72713 +Node: Special cases76460 +Node: Initial79323 +Node: xgettext Invocation79645 +Node: C Sources Context82872 +Node: Compendium87849 +Node: Updating88552 +Node: msgmerge Invocation89074 +Node: Translated Entries89248 +Node: Fuzzy Entries90540 +Node: Untranslated Entries93628 +Node: Obsolete Entries95467 +Node: Modifying Translations98595 +Node: Modifying Comments108783 +Node: Auxiliary113094 +Node: Binaries116175 +Node: msgfmt Invocation116439 +Node: MO Files119066 +Node: Users126478 +Node: Matrix127959 +Node: Installers129162 +Node: End Users130350 +Node: Programmers130979 +Node: catgets132153 +Node: Interface to catgets133558 +Node: Problems with catgets135559 +Node: gettext136457 +Node: Interface to gettext137694 +Node: Ambiguities140036 +Node: Locating Catalogs142593 +Node: Optimized gettext143902 +Node: Comparison147490 +Node: Using libintl.a153203 +Node: gettext grok153974 +Node: Temp Programmers156833 +Node: Temp Implementations157273 +Node: Temp catgets158639 +Node: Temp WSI160326 +Node: Temp Notes162314 +Node: Translators162803 +Node: Trans Intro 0163182 +Node: Trans Intro 1165821 +Node: Discussions167666 +Node: Organization170821 +Node: Central Coordination172802 +Node: National Teams173930 +Node: Sub-Cultures176442 +Node: Organizational Ideas177361 +Node: Mailing Lists178363 +Node: Information Flow180166 +Node: Maintainers182299 +Node: Flat and Non-Flat184059 +Node: Prerequisites185820 +Node: gettextize Invocation189928 +Node: Adjusting Files193500 +Node: po/POTFILES.in194723 +Node: configure.in195664 +Node: aclocal197791 +Node: acconfig198970 +Node: Makefile199584 +Node: src/Makefile201772 +Node: Conclusion204169 +Node: History204658 +Node: References208118 +Node: Country Codes209673 + +End Tag Table diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info-1 b/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info-1 new file mode 100644 index 00000000..5310a04a --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info-1 @@ -0,0 +1,993 @@ +This is Info file gettext.info, produced by Makeinfo version 1.68 from +the input file gettext.texi. + +INFO-DIR-SECTION GNU Gettext Utilities +START-INFO-DIR-ENTRY +* Gettext: (gettext). GNU gettext utilities. +* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. +* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. +* msgmerge: (gettext)msgmerge Invocation. Update two PO files into one. +* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. +END-INFO-DIR-ENTRY + + This file provides documentation for GNU `gettext' utilities. It +also serves as a reference for the free Translation Project. + + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Foundation. + + +File: gettext.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir) + +GNU `gettext' utilities +*********************** + +* Menu: + +* Introduction:: Introduction +* Basics:: PO Files and PO Mode Basics +* Sources:: Preparing Program Sources +* Initial:: Making the Initial PO File +* Updating:: Updating Existing PO Files +* Binaries:: Producing Binary MO Files +* Users:: The User's View +* Programmers:: The Programmer's View +* Translators:: The Translator's View +* Maintainers:: The Maintainer's View +* Conclusion:: Concluding Remarks + +* Country Codes:: ISO 639 country codes + + -- The Detailed Node Listing -- + +Introduction + +* Why:: The Purpose of GNU `gettext' +* Concepts:: I18n, L10n, and Such +* Aspects:: Aspects in Native Language Support +* Files:: Files Conveying Translations +* Overview:: Overview of GNU `gettext' + +PO Files and PO Mode Basics + +* Installation:: Completing GNU `gettext' Installation +* PO Files:: The Format of PO Files +* Main PO Commands:: Main Commands +* Entry Positioning:: Entry Positioning +* Normalizing:: Normalizing Strings in Entries + +Preparing Program Sources + +* Triggering:: Triggering `gettext' Operations +* Mark Keywords:: How Marks Appears in Sources +* Marking:: Marking Translatable Strings +* c-format:: Telling something about the following string +* Special cases:: Special Cases of Translatable Strings + +Making the Initial PO File + +* xgettext Invocation:: Invoking the `xgettext' Program +* C Sources Context:: C Sources Context +* Compendium:: Using Translation Compendiums + +Updating Existing PO Files + +* msgmerge Invocation:: Invoking the `msgmerge' Program +* Translated Entries:: +* Fuzzy Entries:: Fuzzy translated Entries +* Untranslated Entries:: Untranslated Entries +* Obsolete Entries:: Obsolete Entries +* Modifying Translations:: Modifying Translations +* Modifying Comments:: Modifying Comments +* Auxiliary:: Consulting Auxiliary PO Files + +Producing Binary MO Files + +* msgfmt Invocation:: Invoking the `msgfmt' Program +* MO Files:: The Format of GNU MO Files + +The User's View + +* Matrix:: The Current `ABOUT-NLS' Matrix +* Installers:: Magic for Installers +* End Users:: Magic for End Users + +The Programmer's View + +* catgets:: About `catgets' +* gettext:: About `gettext' +* Comparison:: Comparing the two interfaces +* Using libintl.a:: Using libintl.a in own programs +* gettext grok:: Being a `gettext' grok +* Temp Programmers:: Temporary Notes for the Programmers Chapter + +About `catgets' + +* Interface to catgets:: The interface +* Problems with catgets:: Problems with the `catgets' interface?! + +About `gettext' + +* Interface to gettext:: The interface +* Ambiguities:: Solving ambiguities +* Locating Catalogs:: Locating message catalog files +* Optimized gettext:: Optimization of the *gettext functions + +Temporary Notes for the Programmers Chapter + +* Temp Implementations:: Temporary - Two Possible Implementations +* Temp catgets:: Temporary - About `catgets' +* Temp WSI:: Temporary - Why a single implementation +* Temp Notes:: Temporary - Notes + +The Translator's View + +* Trans Intro 0:: Introduction 0 +* Trans Intro 1:: Introduction 1 +* Discussions:: Discussions +* Organization:: Organization +* Information Flow:: Information Flow + +Organization + +* Central Coordination:: Central Coordination +* National Teams:: National Teams +* Mailing Lists:: Mailing Lists + +National Teams + +* Sub-Cultures:: Sub-Cultures +* Organizational Ideas:: Organizational Ideas + +The Maintainer's View + +* Flat and Non-Flat:: Flat or Non-Flat Directory Structures +* Prerequisites:: Prerequisite Works +* gettextize Invocation:: Invoking the `gettextize' Program +* Adjusting Files:: Files You Must Create or Alter + +Files You Must Create or Alter + +* po/POTFILES.in:: `POTFILES.in' in `po/' +* configure.in:: `configure.in' at top level +* aclocal:: `aclocal.m4' at top level +* acconfig:: `acconfig.h' at top level +* Makefile:: `Makefile.in' at top level +* src/Makefile:: `Makefile.in' in `src/' + +Concluding Remarks + +* History:: History of GNU `gettext' +* References:: Related Readings + + +File: gettext.info, Node: Introduction, Next: Basics, Prev: Top, Up: Top + +Introduction +************ + + This manual is still in *DRAFT* state. Some sections are still + empty, or almost. We keep merging material from other sources + (essentially e-mail folders) while the proper integration of this + material is delayed. + + In this manual, we use *he* when speaking of the programmer or +maintainer, *she* when speaking of the translator, and *they* when +speaking of the installers or end users of the translated program. +This is only a convenience for clarifying the documentation. It is +*absolutely* not meant to imply that some roles are more appropriate to +males or females. Besides, as you might guess, GNU `gettext' is meant +to be useful for people using computers, whatever their sex, race, +religion or nationality! + + This chapter explains the goals sought in the creation of GNU +`gettext' and the free Translation Project. Then, it explains a few +broad concepts around Native Language Support, and positions message +translation with regard to other aspects of national and cultural +variance, as they apply to to programs. It also surveys those files +used to convey the translations. It explains how the various tools +interact in the initial generation of these files, and later, how the +maintenance cycle should usually operate. + + Please send suggestions and corrections to: + + Internet address: + +Please include the manual's edition number and update date in your +messages. + +* Menu: + +* Why:: The Purpose of GNU `gettext' +* Concepts:: I18n, L10n, and Such +* Aspects:: Aspects in Native Language Support +* Files:: Files Conveying Translations +* Overview:: Overview of GNU `gettext' + + +File: gettext.info, Node: Why, Next: Concepts, Prev: Introduction, Up: Introduction + +The Purpose of GNU `gettext' +============================ + + Usually, programs are written and documented in English, and use +English at execution time to interact with users. This is true not +only of GNU software, but also of a great deal of commercial and free +software. Using a common language is quite handy for communication +between developers, maintainers and users from all countries. On the +other hand, most people are less comfortable with English than with +their own native language, and would prefer to use their mother tongue +for day to day's work, as far as possible. Many would simply *love* to +see their computer screen showing a lot less of English, and far more +of their own language. + + However, to many people, this dream might appear so far fetched that +they may believe it is not even worth spending time thinking about it. +They have no confidence at all that the dream might ever become true. +Yet some have not lost hope, and have organized themselves. The +Translation Project is a formalization of this hope into a workable +structure, which has a good chance to get all of us nearer the +achievement of a truly multi-lingual set of programs. + + GNU `gettext' is an important step for the Translation Project, as +it is an asset on which we may build many other steps. This package +offers to programmers, translators and even users, a well integrated +set of tools and documentation. Specifically, the GNU `gettext' +utilities are a set of tools that provides a framework within which +other free packages may produce multi-lingual messages. These tools +include a set of conventions about how programs should be written to +support message catalogs, a directory and file naming organization for +the message catalogs themselves, a runtime library supporting the +retrieval of translated messages, and a few stand-alone programs to +massage in various ways the sets of translatable strings, or already +translated strings. A special mode for GNU Emacs also helps ease +interested parties into preparing these sets, or bringing them up to +date. + + GNU `gettext' is designed to minimize the impact of +internationalization on program sources, keeping this impact as small +and hardly noticeable as possible. Internationalization has better +chances of succeeding if it is very light weighted, or at least, appear +to be so, when looking at program sources. + + The Translation Project also uses the GNU `gettext' distribution as +a vehicle for documenting its structure and methods. This goes beyond +the strict technicalities of documenting the GNU `gettext' proper. By +so doing, translators will find in a single place, as far as possible, +all they need to know for properly doing their translating work. Also, +this supplemental documentation might also help programmers, and even +curious users, in understanding how GNU `gettext' is related to the +remainder of the Translation Project, and consequently, have a glimpse +at the *big picture*. + + +File: gettext.info, Node: Concepts, Next: Aspects, Prev: Why, Up: Introduction + +I18n, L10n, and Such +==================== + + Two long words appear all the time when we discuss support of native +language in programs, and these words have a precise meaning, worth +being explained here, once and for all in this document. The words are +*internationalization* and *localization*. Many people, tired of +writing these long words over and over again, took the habit of writing +"i18n" and "l10n" instead, quoting the first and last letter of each +word, and replacing the run of intermediate letters by a number merely +telling how many such letters there are. But in this manual, in the +sake of clarity, we will patiently write the names in full, each time... + + By "internationalization", one refers to the operation by which a +program, or a set of programs turned into a package, is made aware of +and able to support multiple languages. This is a generalization +process, by which the programs are untied from calling only English +strings or other English specific habits, and connected to generic ways +of doing the same, instead. Program developers may use various +techniques to internationalize their programs. Some of these have been +standardized. GNU `gettext' offers one of these standards. *Note +Programmers::. + + By "localization", one means the operation by which, in a set of +programs already internationalized, one gives the program all needed +information so that it can adapt itself to handle its input and output +in a fashion which is correct for some native language and cultural +habits. This is a particularisation process, by which generic methods +already implemented in an internationalized program are used in +specific ways. The programming environment puts several functions to +the programmers disposal which allow this runtime configuration. The +formal description of specific set of cultural habits for some country, +together with all associated translations targeted to the same native +language, is called the "locale" for this language or country. Users +achieve localization of programs by setting proper values to special +environment variables, prior to executing those programs, identifying +which locale should be used. + + In fact, locale message support is only one component of the cultural +data that makes up a particular locale. There are a whole host of +routines and functions provided to aid programmers in developing +internationalized software and which allow them to access the data +stored in a particular locale. When someone presently refers to a +particular locale, they are obviously referring to the data stored +within that particular locale. Similarly, if a programmer is referring +to "accessing the locale routines", they are referring to the complete +suite of routines that access all of the locale's information. + + One uses the expression "Native Language Support", or merely NLS, +for speaking of the overall activity or feature encompassing both +internationalization and localization, allowing for multi-lingual +interactions in a program. In a nutshell, one could say that +internationalization is the operation by which further localizations +are made possible. + + Also, very roughly said, when it comes to multi-lingual messages, +internationalization is usually taken care of by programmers, and +localization is usually taken care of by translators. + + +File: gettext.info, Node: Aspects, Next: Files, Prev: Concepts, Up: Introduction + +Aspects in Native Language Support +================================== + + For a totally multi-lingual distribution, there are many things to +translate beyond output messages. + + * As of today, GNU `gettext' offers a complete toolset for + translating messages output by C programs. Perl scripts and shell + scripts will also need to be translated. Even if there are today + some hooks by which this can be done, these hooks are not + integrated as well as they should be. + + * Some programs, like `autoconf' or `bison', are able to produce + other programs (or scripts). Even if the generating programs + themselves are internationalized, the generated programs they + produce may need internationalization on their own, and this + indirect internationalization could be automated right from the + generating program. In fact, quite usually, generating and + generated programs could be internationalized independently, as + the effort needed is fairly orthogonal. + + * A few programs include textual tables which might need translation + themselves, independently of the strings contained in the program + itself. For example, RFC 1345 gives an English description for + each character which GNU `recode' is able to reconstruct at + execution. Since these descriptions are extracted from the RFC by + mechanical means, translating them properly would require a prior + translation of the RFC itself. + + * Almost all programs accept options, which are often worded out so + to be descriptive for the English readers; one might want to + consider offering translated versions for program options as well. + + * Many programs read, interpret, compile, or are somewhat driven by + input files which are texts containing keywords, identifiers, or + replies which are inherently translatable. For example, one may + want `gcc' to allow diacriticized characters in identifiers or use + translated keywords; `rm -i' might accept something else than `y' + or `n' for replies, etc. Even if the program will eventually make + most of its output in the foreign languages, one has to decide + whether the input syntax, option values, etc., are to be localized + or not. + + * The manual accompanying a package, as well as all documentation + files in the distribution, could surely be translated, too. + Translating a manual, with the intent of later keeping up with + updates, is a major undertaking in itself, generally. + + As we already stressed, translation is only one aspect of locales. +Other internationalization aspects are not currently handled by GNU +`gettext', but perhaps may be handled in future versions. There are +many attributes that are needed to define a country's cultural +conventions. These attributes include beside the country's native +language, the formatting of the date and time, the representation of +numbers, the symbols for currency, etc. These local "rules" are termed +the country's locale. The locale represents the knowledge needed to +support the country's native attributes. + + There are a few major areas which may vary between countries and +hence, define what a locale must describe. The following list helps +putting multi-lingual messages into the proper context of other tasks +related to locales, and also presents some other areas which GNU +`gettext' might eventually tackle, maybe, one of these days. + +*Characters and Codesets* + The codeset most commonly used through out the USA and most English + speaking parts of the world is the ASCII codeset. However, there + are many characters needed by various locales that are not found + within this codeset. The 8-bit ISO 8859-1 code set has most of + the special characters needed to handle the major European + languages. However, in many cases, the ISO 8859-1 font is not + adequate. Hence each locale will need to specify which codeset + they need to use and will need to have the appropriate character + handling routines to cope with the codeset. + +*Currency* + The symbols used vary from country to country as does the position + used by the symbol. Software needs to be able to transparently + display currency figures in the native mode for each locale. + +*Dates* + The format of date varies between locales. For example, Christmas + day in 1994 is written as 12/25/94 in the USA and as 25/12/94 in + Australia. Other countries might use ISO 8061 dates, etc. + + Time of the day may be noted as HH:MM, HH.MM, or otherwise. Some + locales require time to be specified in 24-hour mode rather than + as AM or PM. Further, the nature and yearly extent of the + Daylight Saving correction vary widely between countries. + +*Numbers* + Numbers can be represented differently in different locales. For + example, the following numbers are all written correctly for their + respective locales: + + 12,345.67 English + 12.345,67 French + 1,2345.67 Asia + + Some programs could go further and use different unit systems, like + English units or Metric units, or even take into account variants + about how numbers are spelled in full. + +*Messages* + The most obvious area is the language support within a locale. + This is where GNU `gettext' provides the means for developers and + users to easily change the language that the software uses to + communicate to the user. + + In the near future we see no chance that components of locale +outside of message handling will be made available for use in other +packages. The reason for this is that most modern systems provide a +more or less reasonable support for at least some of the missing +components. Another point is that the GNU `libc' and Linux will get a +new and complete implementation of the whole locale functionality which +could be adopted by system lacking a reasonable locale support. + + +File: gettext.info, Node: Files, Next: Overview, Prev: Aspects, Up: Introduction + +Files Conveying Translations +============================ + + The letters PO in `.po' files means Portable Object, to distinguish +it from `.mo' files, where MO stands for Machine Object. This +paradigm, as well as the PO file format, is inspired by the NLS +standard developed by Uniforum, and implemented by Sun in their Solaris +system. + + PO files are meant to be read and edited by humans, and associate +each original, translatable string of a given package with its +translation in a particular target language. A single PO file is +dedicated to a single target language. If a package supports many +languages, there is one such PO file per language supported, and each +package has its own set of PO files. These PO files are best created by +the `xgettext' program, and later updated or refreshed through the +`msgmerge' program. Program `xgettext' extracts all marked messages +from a set of C files and initializes a PO file with empty +translations. Program `msgmerge' takes care of adjusting PO files +between releases of the corresponding sources, commenting obsolete +entries, initializing new ones, and updating all source line +references. Files ending with `.pot' are kind of base translation +files found in distributions, in PO file format, and `.pox' files are +often temporary PO files. + + MO files are meant to be read by programs, and are binary in nature. +A few systems already offer tools for creating and handling MO files as +part of the Native Language Support coming with the system, but the +format of these MO files is often different from system to system, and +non-portable. They do not necessary use `.mo' for file extensions, but +since system libraries are also used for accessing these files, it +works as long as the system is self-consistent about it. If GNU +`gettext' is able to interface with the tools already provided with +systems, it will consequently let these provided tools take care of +generating the MO files. Or else, if such tools are not found or do +not seem usable, GNU `gettext' will use its own ways and its own format +for MO files. Files ending with `.gmo' are really MO files, when it is +known that these files use the GNU format. + + +File: gettext.info, Node: Overview, Prev: Files, Up: Introduction + +Overview of GNU `gettext' +========================= + + The following diagram summarizes the relation between the files +handled by GNU `gettext' and the tools acting on these files. It is +followed by a somewhat detailed explanations, which you should read +while keeping an eye on the diagram. Having a clear understanding of +these interrelations would surely help programmers, translators and +maintainers. + + Original C Sources ---> PO mode ---> Marked C Sources ---. + | + .---------<--- GNU gettext Library | + .--- make <---+ | + | `---------<--------------------+-----------' + | | + | .-----<--- PACKAGE.pot <--- xgettext <---' .---<--- PO Compendium + | | | ^ + | | `---. | + | `---. +---> PO mode ---. + | +----> msgmerge ------> LANG.pox --->--------' | + | .---' | + | | | + | `-------------<---------------. | + | +--- LANG.po <--- New LANG.pox <----' + | .--- LANG.gmo <--- msgfmt <---' + | | + | `---> install ---> /.../LANG/PACKAGE.mo ---. + | +---> "Hello world!" + `-------> install ---> /.../bin/PROGRAM -------' + + The indication `PO mode' appears in two places in this picture, and +you may safely read it as merely meaning "hand editing", using any +editor of your choice, really. However, for those of you being the +lucky users of GNU Emacs, PO mode has been specifically created for +providing a cozy environment for editing or modifying PO files. While +editing a PO file, PO mode allows for the easy browsing of auxiliary +and compendium PO files, as well as for following references into the +set of C program sources from which PO files have been derived. It has +a few special features, among which are the interactive marking of +program strings as translatable, and the validatation of PO files with +easy repositioning to PO file lines showing errors. + + As a programmer, the first step to bringing GNU `gettext' into your +package is identifying, right in the C sources, those strings which are +meant to be translatable, and those which are untranslatable. This +tedious job can be done a little more comfortably using emacs PO mode, +but you can use any means familiar to you for modifying your C sources. +Beside this some other simple, standard changes are needed to properly +initialize the translation library. *Note Sources::, for more +information about all this. + + For newly written software the strings of course can and should be +marked while writing the it. The `gettext' approach makes this very +easy. Simply put the following lines at the beginning of each file or +in a central header file: + + #define _(String) (String) + #define N_(String) (String) + #define textdomain(Domain) + #define bindtextdomain(Package, Directory) + +Doing this allows you to prepare the sources for internationalization. +Later when you feel ready for the step to use the `gettext' library +simply remove these definitions, include `libintl.h' and link against +`libintl.a'. That is all you have to change. + + Once the C sources have been modified, the `xgettext' program is +used to find and extract all translatable strings, and create an +initial PO file out of all these. This `PACKAGE.pot' file contains all +original program strings. It has sets of pointers to exactly where in +C sources each string is used. All translations are set to empty. The +letter `t' in `.pot' marks this as a Template PO file, not yet oriented +towards any particular language. *Note xgettext Invocation::, for more +details about how one calls the `xgettext' program. If you are +*really* lazy, you might be interested at working a lot more right +away, and preparing the whole distribution setup (*note +Maintainers::.). By doing so, you spare yourself typing the `xgettext' +command, as `make' should now generate the proper things automatically +for you! + + The first time through, there is no `LANG.po' yet, so the `msgmerge' +step may be skipped and replaced by a mere copy of `PACKAGE.pot' to +`LANG.pox', where LANG represents the target language. + + Then comes the initial translation of messages. Translation in +itself is a whole matter, still exclusively meant for humans, and whose +complexity far overwhelms the level of this manual. Nevertheless, a +few hints are given in some other chapter of this manual (*note +Translators::.). You will also find there indications about how to +contact translating teams, or becoming part of them, for sharing your +translating concerns with others who target the same native language. + + While adding the translated messages into the `LANG.pox' PO file, if +you do not have GNU Emacs handy, you are on your own for ensuring that +your efforts fully respect the PO file format, and quoting conventions +(*note PO Files::.). This is surely not an impossible task, as this is +the way many people have handled PO files already for Uniforum or +Solaris. On the other hand, by using PO mode in GNU Emacs, most details +of PO file format are taken care of for you, but you have to acquire +some familiarity with PO mode itself. Besides main PO mode commands +(*note Main PO Commands::.), you should know how to move between entries +(*note Entry Positioning::.), and how to handle untranslated entries +(*note Untranslated Entries::.). + + If some common translations have already been saved into a compendium +PO file, translators may use PO mode for initializing untranslated +entries from the compendium, and also save selected translations into +the compendium, updating it (*note Compendium::.). Compendium files +are meant to be exchanged between members of a given translation team. + + Programs, or packages of programs, are dynamic in nature: users write +bug reports and suggestion for improvements, maintainers react by +modifying programs in various ways. The fact that a package has +already been internationalized should not make maintainers shy of +adding new strings, or modifying strings already translated. They just +do their job the best they can. For the Translation Project to work +smoothly, it is important that maintainers do not carry translation +concerns on their already loaded shoulders, and that translators be +kept as free as possible of programmatic concerns. + + The only concern maintainers should have is carefully marking new +strings as translatable, when they should be, and do not otherwise +worry about them being translated, as this will come in proper time. +Consequently, when programs and their strings are adjusted in various +ways by maintainers, and for matters usually unrelated to translation, +`xgettext' would construct `PACKAGE.pot' files which are evolving over +time, so the translations carried by `LANG.po' are slowly fading out of +date. + + It is important for translators (and even maintainers) to understand +that package translation is a continuous process in the lifetime of a +package, and not something which is done once and for all at the start. +After an initial burst of translation activity for a given package, +interventions are needed once in a while, because here and there, +translated entries become obsolete, and new untranslated entries +appear, needing translation. + + The `msgmerge' program has the purpose of refreshing an already +existing `LANG.po' file, by comparing it with a newer `PACKAGE.pot' +template file, extracted by `xgettext' out of recent C sources. The +refreshing operation adjusts all references to C source locations for +strings, since these strings move as programs are modified. Also, +`msgmerge' comments out as obsolete, in `LANG.pox', those already +translated entries which are no longer used in the program sources +(*note Obsolete Entries::.). It finally discovers new strings and +inserts them in the resulting PO file as untranslated entries (*note +Untranslated Entries::.). *Note msgmerge Invocation::, for more +information about what `msgmerge' really does. + + Whatever route or means taken, the goal is to obtain an updated +`LANG.pox' file offering translations for all strings. When this is +properly achieved, this file `LANG.pox' may take the place of the +previous official `LANG.po' file. + + The temporal mobility, or fluidity of PO files, is an integral part +of the translation game, and should be well understood, and accepted. +People resisting it will have a hard time participating in the +Translation Project, or will give a hard time to other participants! In +particular, maintainers should relax and include all available official +PO files in their distributions, even if these have not recently been +updated, without banging or otherwise trying to exert pressure on the +translator teams to get the job done. The pressure should rather come +from the community of users speaking a particular language, and +maintainers should consider themselves fairly relieved of any concern +about the adequacy of translation files. On the other hand, translators +should reasonably try updating the PO files they are responsible for, +while the package is undergoing pretest, prior to an official +distribution. + + Once the PO file is complete and dependable, the `msgfmt' program is +used for turning the PO file into a machine-oriented format, which may +yield efficient retrieval of translations by the programs of the +package, whenever needed at runtime (*note MO Files::.). *Note msgfmt +Invocation::, for more information about all modalities of execution +for the `msgfmt' program. + + Finally, the modified and marked C sources are compiled and linked +with the GNU `gettext' library, usually through the operation of +`make', given a suitable `Makefile' exists for the project, and the +resulting executable is installed somewhere users will find it. The MO +files themselves should also be properly installed. Given the +appropriate environment variables are set (*note End Users::.), the +program should localize itself automatically, whenever it executes. + + The remainder of this manual has the purpose of explaining in depth +the various steps outlined above. + + +File: gettext.info, Node: Basics, Next: Sources, Prev: Introduction, Up: Top + +PO Files and PO Mode Basics +*************************** + + The GNU `gettext' toolset helps programmers and translators at +producing, updating and using translation files, mainly those PO files +which are textual, editable files. This chapter stresses the format of +PO files, and contains a PO mode starter. PO mode description is +spread throughout this manual instead of being concentrated in one +place. Here we present only the basics of PO mode. + +* Menu: + +* Installation:: Completing GNU `gettext' Installation +* PO Files:: The Format of PO Files +* Main PO Commands:: Main Commands +* Entry Positioning:: Entry Positioning +* Normalizing:: Normalizing Strings in Entries + + +File: gettext.info, Node: Installation, Next: PO Files, Prev: Basics, Up: Basics + +Completing GNU `gettext' Installation +===================================== + + Once you have received, unpacked, configured and compiled the GNU +`gettext' distribution, the `make install' command puts in place the +programs `xgettext', `msgfmt', `gettext', and `msgmerge', as well as +their available message catalogs. To top off a comfortable +installation, you might also want to make the PO mode available to your +GNU Emacs users. + + During the installation of the PO mode, you might want modify your +file `.emacs', once and for all, so it contains a few lines looking +like: + + (setq auto-mode-alist + (cons '("\\.po[tx]?\\'\\|\\.po\\." . po-mode) auto-mode-alist)) + (autoload 'po-mode "po-mode") + + Later, whenever you edit some `.po', `.pot' or `.pox' file, or any +file having the string `.po.' within its name, Emacs loads +`po-mode.elc' (or `po-mode.el') as needed, and automatically activates +PO mode commands for the associated buffer. The string *PO* appears in +the mode line for any buffer for which PO mode is active. Many PO +files may be active at once in a single Emacs session. + + If you are using Emacs version 20 or better, and have already +installed the appropriate international fonts on your system, you may +also manage for the these fonts to be automatically loaded and used for +displaying the translations on your Emacs screen, whenever necessary. +For this to happen, you might want to add the lines: + + (autoload 'po-find-file-coding-system "po-mode") + (modify-coding-system-alist 'file "\\.po[tx]?\\'\\|\\.po\\." + 'po-find-file-coding-system) + +to your `.emacs' file. + + +File: gettext.info, Node: PO Files, Next: Main PO Commands, Prev: Installation, Up: Basics + +The Format of PO Files +====================== + + A PO file is made up of many entries, each entry holding the relation +between an original untranslated string and its corresponding +translation. All entries in a given PO file usually pertain to a +single project, and all translations are expressed in a single target +language. One PO file "entry" has the following schematic structure: + + WHITE-SPACE + # TRANSLATOR-COMMENTS + #. AUTOMATIC-COMMENTS + #: REFERENCE... + #, FLAG... + msgid UNTRANSLATED-STRING + msgstr TRANSLATED-STRING + + The general structure of a PO file should be well understood by the +translator. When using PO mode, very little has to be known about the +format details, as PO mode takes care of them for her. + + Entries begin with some optional white space. Usually, when +generated through GNU `gettext' tools, there is exactly one blank line +between entries. Then comments follow, on lines all starting with the +character `#'. There are two kinds of comments: those which have some +white space immediately following the `#', which comments are created +and maintained exclusively by the translator, and those which have some +non-white character just after the `#', which comments are created and +maintained automatically by GNU `gettext' tools. All comments, of +either kind, are optional. + + After white space and comments, entries show two strings, giving +first the untranslated string as it appears in the original program +sources, and then, the translation of this string. The original string +is introduced by the keyword `msgid', and the translation, by `msgstr'. +The two strings, untranslated and translated, are quoted in various +ways in the PO file, using `"' delimiters and `\' escapes, but the +translator does not really have to pay attention to the precise quoting +format, as PO mode fully intend to take care of quoting for her. + + The `msgid' strings, as well as automatic comments, are produced and +managed by other GNU `gettext' tools, and PO mode does not provide +means for the translator to alter these. The most she can do is merely +deleting them, and only by deleting the whole entry. On the other +hand, the `msgstr' string, as well as translator comments, are really +meant for the translator, and PO mode gives her the full control she +needs. + + The comment lines beginning with `#,' are special because they are +not completely ignored by the programs as comments generally are. The +comma separated list of FLAGs is used by the `msgfmt' program to give +the user some better disgnostic messages. Currently there are two +forms of flags defined: + +`fuzzy' + This flag can be generated by the `msgmerge' program or it can be + inserted by the translator herself. It shows that the `msgstr' + string might not be a correct translation (anymore). Only the + translator can judge if the translation requires further + modification, or is acceptable as is. Once satisfied with the + translation, she then removes this `fuzzy' attribute. The + `msgmerge' programs inserts this when it combined the `msgid' and + `msgstr' entries after fuzzy search only. *Note Fuzzy Entries::. + +`c-format' +`no-c-format' + These flags should not be added by a human. Instead only the + `xgettext' program adds them. In an automatized PO file processing + system as proposed here the user changes would be thrown away + again as soon as the `xgettext' program generates a new template + file. + + In case the `c-format' flag is given for a string the `msgfmt' + does some more tests to check to validity of the translation. + *Note msgfmt Invocation::. + + It happens that some lines, usually whitespace or comments, follow +the very last entry of a PO file. Such lines are not part of any entry, +and PO mode is unable to take action on those lines. By using the PO +mode function `M-x po-normalize', the translator may get rid of those +spurious lines. *Note Normalizing::. + + The remainder of this section may be safely skipped by those using +PO mode, yet it may be interesting for everybody to have a better idea +of the precise format of a PO file. On the other hand, those not +having GNU Emacs handy should carefully continue reading on. + + Each of UNTRANSLATED-STRING and TRANSLATED-STRING respects the C +syntax for a character string, including the surrounding quotes and +imbedded backslashed escape sequences. When the time comes to write +multi-line strings, one should not use escaped newlines. Instead, a +closing quote should follow the last character on the line to be +continued, and an opening quote should resume the string at the +beginning of the following PO file line. For example: + + msgid "" + "Here is an example of how one might continue a very long string\n" + "for the common case the string represents multi-line output.\n" + +In this example, the empty string is used on the first line, to allow +better alignment of the `H' from the word `Here' over the `f' from the +word `for'. In this example, the `msgid' keyword is followed by three +strings, which are meant to be concatenated. Concatenating the empty +string does not change the resulting overall string, but it is a way +for us to comply with the necessity of `msgid' to be followed by a +string on the same line, while keeping the multi-line presentation +left-justified, as we find this to be a cleaner disposition. The empty +string could have been omitted, but only if the string starting with +`Here' was promoted on the first line, right after `msgid'.(1) It was +not really necessary either to switch between the two last quoted +strings immediately after the newline `\n', the switch could have +occurred after *any* other character, we just did it this way because +it is neater. + + One should carefully distinguish between end of lines marked as `\n' +*inside* quotes, which are part of the represented string, and end of +lines in the PO file itself, outside string quotes, which have no +incidence on the represented string. + + Outside strings, white lines and comments may be used freely. +Comments start at the beginning of a line with `#' and extend until the +end of the PO file line. Comments written by translators should have +the initial `#' immediately followed by some white space. If the `#' +is not immediately followed by white space, this comment is most likely +generated and managed by specialized GNU tools, and might disappear or +be replaced unexpectedly when the PO file is given to `msgmerge'. + + ---------- Footnotes ---------- + + (1) This limitation is not imposed by GNU `gettext', but comes from +the `msgfmt' implementation on Solaris. + + +File: gettext.info, Node: Main PO Commands, Next: Entry Positioning, Prev: PO Files, Up: Basics + +Main PO mode Commands +===================== + + After setting up Emacs with something similar to the lines in *Note +Installation::, PO mode is activated for a window when Emacs finds a PO +file in that window. This puts the window read-only and establishes a +po-mode-map, which is a genuine Emacs mode, in a way that is not derived +from text mode in any way. Functions found on `po-mode-hook', if any, +will be executed. + + When PO mode is active in a window, the letters `PO' appear in the +mode line for that window. The mode line also displays how many +entries of each kind are held in the PO file. For example, the string +`132t+3f+10u+2o' would tell the translator that the PO mode contains +132 translated entries (*note Translated Entries::., 3 fuzzy entries +(*note Fuzzy Entries::.), 10 untranslated entries (*note Untranslated +Entries::.) and 2 obsolete entries (*note Obsolete Entries::.). +Zero-coefficients items are not shown. So, in this example, if the +fuzzy entries were unfuzzied, the untranslated entries were translated +and the obsolete entries were deleted, the mode line would merely +display `145t' for the counters. + + The main PO commands are those which do not fit into the other +categories of subsequent sections. These allow for quitting PO mode or +for managing windows in special ways. + +`U' + Undo last modification to the PO file. + +`Q' + Quit processing and save the PO file. + +`q' + Quit processing, possibly after confirmation. + +`O' + Temporary leave the PO file window. + +`?' +`h' + Show help about PO mode. + +`=' + Give some PO file statistics. + +`V' + Batch validate the format of the whole PO file. + + The command `U' (`po-undo') interfaces to the GNU Emacs *undo* +facility. *Note Undoing Changes: (emacs)Undo. Each time `U' is typed, +modifications which the translator did to the PO file are undone a +little more. For the purpose of undoing, each PO mode command is +atomic. This is especially true for the `<RET>' command: the whole +edition made by using a single use of this command is undone at once, +even if the edition itself implied several actions. However, while in +the editing window, one can undo the edition work quite parsimoniously. + + The commands `Q' (`po-quit') and `q' (`po-confirm-and-quit') are +used when the translator is done with the PO file. The former is a bit +less verbose than the latter. If the file has been modified, it is +saved to disk first. In both cases, and prior to all this, the +commands check if some untranslated message remains in the PO file and, +if yes, the translator is asked if she really wants to leave off +working with this PO file. This is the preferred way of getting rid of +an Emacs PO file buffer. Merely killing it through the usual command +`C-x k' (`kill-buffer') is not the tidiest way to proceed. + + The command `O' (`po-other-window') is another, softer way, to leave +PO mode, temporarily. It just moves the cursor to some other Emacs +window, and pops one if necessary. For example, if the translator just +got PO mode to show some source context in some other, she might +discover some apparent bug in the program source that needs correction. +This command allows the translator to change sex, become a programmer, +and have the cursor right into the window containing the program she +(or rather *he*) wants to modify. By later getting the cursor back in +the PO file window, or by asking Emacs to edit this file once again, PO +mode is then recovered. + + The command `h' (`po-help') displays a summary of all available PO +mode commands. The translator should then type any character to resume +normal PO mode operations. The command `?' has the same effect as `h'. + + The command `=' (`po-statistics') computes the total number of +entries in the PO file, the ordinal of the current entry (counted from +1), the number of untranslated entries, the number of obsolete entries, +and displays all these numbers. + + The command `V' (`po-validate') launches `msgfmt' in verbose mode +over the current PO file. This command first offers to save the +current PO file on disk. The `msgfmt' tool, from GNU `gettext', has +the purpose of creating a MO file out of a PO file, and PO mode uses +the features of this program for checking the overall format of a PO +file, as well as all individual entries. + + The program `msgfmt' runs asynchronously with Emacs, so the +translator regains control immediately while her PO file is being +studied. Error output is collected in the GNU Emacs `*compilation*' +buffer, displayed in another window. The regular GNU Emacs command +`C-x`' (`next-error'), as well as other usual compile commands, allow +the translator to reposition quickly to the offending parts of the PO +file. Once the cursor is on the line in error, the translator may +decide on any PO mode action which would help correcting the error. + diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info-2 b/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info-2 new file mode 100644 index 00000000..4c6e4707 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info-2 @@ -0,0 +1,1125 @@ +This is Info file gettext.info, produced by Makeinfo version 1.68 from +the input file gettext.texi. + +INFO-DIR-SECTION GNU Gettext Utilities +START-INFO-DIR-ENTRY +* Gettext: (gettext). GNU gettext utilities. +* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. +* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. +* msgmerge: (gettext)msgmerge Invocation. Update two PO files into one. +* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. +END-INFO-DIR-ENTRY + + This file provides documentation for GNU `gettext' utilities. It +also serves as a reference for the free Translation Project. + + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Foundation. + + +File: gettext.info, Node: Entry Positioning, Next: Normalizing, Prev: Main PO Commands, Up: Basics + +Entry Positioning +================= + + The cursor in a PO file window is almost always part of an entry. +The only exceptions are the special case when the cursor is after the +last entry in the file, or when the PO file is empty. The entry where +the cursor is found to be is said to be the current entry. Many PO +mode commands operate on the current entry, so moving the cursor does +more than allowing the translator to browse the PO file, this also +selects on which entry commands operate. + + Some PO mode commands alter the position of the cursor in a +specialized way. A few of those special purpose positioning are +described here, the others are described in following sections. + +`.' + Redisplay the current entry. + +`n' +`n' + Select the entry after the current one. + +`p' +`p' + Select the entry before the current one. + +`<' + Select the first entry in the PO file. + +`>' + Select the last entry in the PO file. + +`m' + Record the location of the current entry for later use. + +`l' + Return to a previously saved entry location. + +`x' + Exchange the current entry location with the previously saved one. + + Any GNU Emacs command able to reposition the cursor may be used to +select the current entry in PO mode, including commands which move by +characters, lines, paragraphs, screens or pages, and search commands. +However, there is a kind of standard way to display the current entry +in PO mode, which usual GNU Emacs commands moving the cursor do not +especially try to enforce. The command `.' (`po-current-entry') has +the sole purpose of redisplaying the current entry properly, after the +current entry has been changed by means external to PO mode, or the +Emacs screen otherwise altered. + + It is yet to be decided if PO mode helps the translator, or otherwise +irritates her, by forcing a rigid window disposition while she is doing +her work. We originally had quite precise ideas about how windows +should behave, but on the other hand, anyone used to GNU Emacs is often +happy to keep full control. Maybe a fixed window disposition might be +offered as a PO mode option that the translator might activate or +deactivate at will, so it could be offered on an experimental basis. +If nobody feels a real need for using it, or a compulsion for writing +it, we should drop this whole idea. The incentive for doing it should +come from translators rather than programmers, as opinions from an +experienced translator are surely more worth to me than opinions from +programmers *thinking* about how *others* should do translation. + + The commands `n' (`po-next-entry') and `p' (`po-previous-entry') +move the cursor the entry following, or preceding, the current one. If +`n' is given while the cursor is on the last entry of the PO file, or +if `p' is given while the cursor is on the first entry, no move is done. + + The commands `<' (`po-first-entry') and `>' (`po-last-entry') move +the cursor to the first entry, or last entry, of the PO file. When the +cursor is located past the last entry in a PO file, most PO mode +commands will return an error saying `After last entry'. Moreover, the +commands `<' and `>' have the special property of being able to work +even when the cursor is not into some PO file entry, and one may use +them for nicely correcting this situation. But even these commands +will fail on a truly empty PO file. There are development plans for +the PO mode for it to interactively fill an empty PO file from sources. +*Note Marking::. + + The translator may decide, before working at the translation of a +particular entry, that she needs to browse the remainder of the PO +file, maybe for finding the terminology or phraseology used in related +entries. She can of course use the standard Emacs idioms for saving +the current cursor location in some register, and use that register for +getting back, or else, use the location ring. + + PO mode offers another approach, by which cursor locations may be +saved onto a special stack. The command `m' (`po-push-location') +merely adds the location of current entry to the stack, pushing the +already saved locations under the new one. The command `r' +(`po-pop-location') consumes the top stack element and reposition the +cursor to the entry associated with that top element. This position is +then lost, for the next `r' will move the cursor to the previously +saved location, and so on until no locations remain on the stack. + + If the translator wants the position to be kept on the location +stack, maybe for taking a look at the entry associated with the top +element, then go elsewhere with the intent of getting back later, she +ought to use `m' immediately after `r'. + + The command `x' (`po-exchange-location') simultaneously reposition +the cursor to the entry associated with the top element of the stack of +saved locations, and replace that top element with the location of the +current entry before the move. Consequently, repeating the `x' command +toggles alternatively between two entries. For achieving this, the +translator will position the cursor on the first entry, use `m', then +position to the second entry, and merely use `x' for making the switch. + + +File: gettext.info, Node: Normalizing, Prev: Entry Positioning, Up: Basics + +Normalizing Strings in Entries +============================== + + There are many different ways for encoding a particular string into a +PO file entry, because there are so many different ways to split and +quote multi-line strings, and even, to represent special characters by +backslahsed escaped sequences. Some features of PO mode rely on the +ability for PO mode to scan an already existing PO file for a +particular string encoded into the `msgid' field of some entry. Even +if PO mode has internally all the built-in machinery for implementing +this recognition easily, doing it fast is technically difficult. To +facilitate a solution to this efficiency problem, we decided on a +canonical representation for strings. + + A conventional representation of strings in a PO file is currently +under discussion, and PO mode experiments with a canonical +representation. Having both `xgettext' and PO mode converging towards +a uniform way of representing equivalent strings would be useful, as +the internal normalization needed by PO mode could be automatically +satisfied when using `xgettext' from GNU `gettext'. An explicit PO +mode normalization should then be only necessary for PO files imported +from elsewhere, or for when the convention itself evolves. + + So, for achieving normalization of at least the strings of a given +PO file needing a canonical representation, the following PO mode +command is available: + +`M-x po-normalize' + Tidy the whole PO file by making entries more uniform. + + The special command `M-x po-normalize', which has no associate keys, +revises all entries, ensuring that strings of both original and +translated entries use uniform internal quoting in the PO file. It +also removes any crumb after the last entry. This command may be +useful for PO files freshly imported from elsewhere, or if we ever +improve on the canonical quoting format we use. This canonical format +is not only meant for getting cleaner PO files, but also for greatly +speeding up `msgid' string lookup for some other PO mode commands. + + `M-x po-normalize' presently makes three passes over the entries. +The first implements heuristics for converting PO files for GNU +`gettext' 0.6 and earlier, in which `msgid' and `msgstr' fields were +using K&R style C string syntax for multi-line strings. These +heuristics may fail for comments not related to obsolete entries and +ending with a backslash; they also depend on subsequent passes for +finalizing the proper commenting of continued lines for obsolete +entries. This first pass might disappear once all oldish PO files +would have been adjusted. The second and third pass normalize all +`msgid' and `msgstr' strings respectively. They also clean out those +trailing backslashes used by XView's `msgfmt' for continued lines. + + Having such an explicit normalizing command allows for importing PO +files from other sources, but also eases the evolution of the current +convention, evolution driven mostly by aesthetic concerns, as of now. +It is easy to make suggested adjustments at a later time, as the +normalizing command and eventually, other GNU `gettext' tools should +greatly automate conformance. A description of the canonical string +format is given below, for the particular benefit of those not having +GNU Emacs handy, and who would nevertheless want to handcraft their PO +files in nice ways. + + Right now, in PO mode, strings are single line or multi-line. A +string goes multi-line if and only if it has *embedded* newlines, that +is, if it matches `[^\n]\n+[^\n]'. So, we would have: + + msgstr "\n\nHello, world!\n\n\n" + + but, replacing the space by a newline, this becomes: + + msgstr "" + "\n" + "\n" + "Hello,\n" + "world!\n" + "\n" + "\n" + + We are deliberately using a caricatural example, here, to make the +point clearer. Usually, multi-lines are not that bad looking. It is +probable that we will implement the following suggestion. We might +lump together all initial newlines into the empty string, and also all +newlines introducing empty lines (that is, for N > 1, the N-1'th last +newlines would go together on a separate string), so making the +previous example appear: + + msgstr "\n\n" + "Hello,\n" + "world!\n" + "\n\n" + + There are a few yet undecided little points about string +normalization, to be documented in this manual, once these questions +settle. + + +File: gettext.info, Node: Sources, Next: Initial, Prev: Basics, Up: Top + +Preparing Program Sources +************************* + + For the programmer, changes to the C source code fall into three +categories. First, you have to make the localization functions known +to all modules needing message translation. Second, you should +properly trigger the operation of GNU `gettext' when the program +initializes, usually from the `main' function. Last, you should +identify and especially mark all constant strings in your program +needing translation. + + Presuming that your set of programs, or package, has been adjusted +so all needed GNU `gettext' files are available, and your `Makefile' +files are adjusted (*note Maintainers::.), each C module having +translated C strings should contain the line: + + #include <libintl.h> + + The remaining changes to your C sources are discussed in the further +sections of this chapter. + +* Menu: + +* Triggering:: Triggering `gettext' Operations +* Mark Keywords:: How Marks Appears in Sources +* Marking:: Marking Translatable Strings +* c-format:: Telling something about the following string +* Special cases:: Special Cases of Translatable Strings + + +File: gettext.info, Node: Triggering, Next: Mark Keywords, Prev: Sources, Up: Sources + +Triggering `gettext' Operations +=============================== + + The initialization of locale data should be done with more or less +the same code in every program, as demonstrated below: + + int + main (argc, argv) + int argc; + char argv; + { + ... + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + ... + } + + PACKAGE and LOCALEDIR should be provided either by `config.h' or by +the Makefile. For now consult the `gettext' sources for more +information. + + The use of `LC_ALL' might not be appropriate for you. `LC_ALL' +includes all locale categories and especially `LC_CTYPE'. This later +category is responsible for determining character classes with the +`isalnum' etc. functions from `ctype.h' which could especially for +programs, which process some kind of input language, be wrong. For +example this would mean that a source code using the c, (c-cedilla +character) is runnable in France but not in the U.S. + + Some systems also have problems with parsing number using the +`scanf' functions if an other but the `LC_ALL' locale is used. The +standards say that additional formats but the one known in the `"C"' +locale might be recognized. But some systems seem to reject numbers in +the `"C"' locale format. In some situation, it might also be a problem +with the notation itself which makes it impossible to recognize whether +the number is in the `"C"' locale or the local format. This can happen +if thousands separator characters are used. Some locales define this +character accordfing to the national conventions to `'.'' which is the +same character used in the `"C"' locale to denote the decimal point. + + So it is sometimes necessary to replace the `LC_ALL' line in the +code above by a sequence of `setlocale' lines + + { + ... + setlocale (LC_TIME, ""); + setlocale (LC_MESSAGES, ""); + ... + } + +or to switch for and back to the character class in question. On all +POSIX conformant systems the locale categories `LC_CTYPE', +`LC_COLLATE', `LC_MONETARY', `LC_NUMERIC', and `LC_TIME' are available. +On some modern systems there is also a locale `LC_MESSAGES' which is +called on some old, XPG2 compliant systems `LC_RESPONSES'. + + +File: gettext.info, Node: Mark Keywords, Next: Marking, Prev: Triggering, Up: Sources + +How Marks Appears in Sources +============================ + + All strings requiring translation should be marked in the C sources. +Marking is done in such a way that each translatable string appears to +be the sole argument of some function or preprocessor macro. There are +only a few such possible functions or macros meant for translation, and +their names are said to be marking keywords. The marking is attached +to strings themselves, rather than to what we do with them. This +approach has more uses. A blatant example is an error message produced +by formatting. The format string needs translation, as well as some +strings inserted through some `%s' specification in the format, while +the result from `sprintf' may have so many different instances that it +is impractical to list them all in some `error_string_out()' routine, +say. + + This marking operation has two goals. The first goal of marking is +for triggering the retrieval of the translation, at run time. The +keyword are possibly resolved into a routine able to dynamically return +the proper translation, as far as possible or wanted, for the argument +string. Most localizable strings are found in executable positions, +that is, attached to variables or given as parameters to functions. +But this is not universal usage, and some translatable strings appear +in structured initializations. *Note Special cases::. + + The second goal of the marking operation is to help `xgettext' at +properly extracting all translatable strings when it scans a set of +program sources and produces PO file templates. + + The canonical keyword for marking translatable strings is `gettext', +it gave its name to the whole GNU `gettext' package. For packages +making only light use of the `gettext' keyword, macro or function, it +is easily used *as is*. However, for packages using the `gettext' +interface more heavily, it is usually more convenient to give the main +keyword a shorter, less obtrusive name. Indeed, the keyword might +appear on a lot of strings all over the package, and programmers +usually do not want nor need their program sources to remind them +forcefully, all the time, that they are internationalized. Further, a +long keyword has the disadvantage of using more horizontal space, +forcing more indentation work on sources for those trying to keep them +within 79 or 80 columns. + + Many packages use `_' (a simple underline) as a keyword, and write +`_("Translatable string")' instead of `gettext ("Translatable +string")'. Further, the coding rule, from GNU standards, wanting that +there is a space between the keyword and the opening parenthesis is +relaxed, in practice, for this particular usage. So, the textual +overhead per translatable string is reduced to only three characters: +the underline and the two parentheses. However, even if GNU `gettext' +uses this convention internally, it does not offer it officially. The +real, genuine keyword is truly `gettext' indeed. It is fairly easy for +those wanting to use `_' instead of `gettext' to declare: + + #include <libintl.h> + #define _(String) gettext (String) + +instead of merely using `#include <libintl.h>'. + + Later on, the maintenance is relatively easy. If, as a programmer, +you add or modify a string, you will have to ask yourself if the new or +altered string requires translation, and include it within `_()' if you +think it should be translated. `"%s: %d"' is an example of string +*not* requiring translation! + + +File: gettext.info, Node: Marking, Next: c-format, Prev: Mark Keywords, Up: Sources + +Marking Translatable Strings +============================ + + In PO mode, one set of features is meant more for the programmer than +for the translator, and allows him to interactively mark which strings, +in a set of program sources, are translatable, and which are not. Even +if it is a fairly easy job for a programmer to find and mark such +strings by other means, using any editor of his choice, PO mode makes +this work more comfortable. Further, this gives translators who feel a +little like programmers, or programmers who feel a little like +translators, a tool letting them work at marking translatable strings +in the program sources, while simultaneously producing a set of +translation in some language, for the package being internationalized. + + The set of program sources, targetted by the PO mode commands +describe here, should have an Emacs tags table constructed for your +project, prior to using these PO file commands. This is easy to do. +In any shell window, change the directory to the root of your project, +then execute a command resembling: + + etags src/*.[hc] lib/*.[hc] + +presuming here you want to process all `.h' and `.c' files from the +`src/' and `lib/' directories. This command will explore all said +files and create a `TAGS' file in your root directory, somewhat +summarizing the contents using a special file format Emacs can +understand. + + For packages following the GNU coding standards, there is a make +goal `tags' or `TAGS' which construct the tag files in all directories +and for all files containing source code. + + Once your `TAGS' file is ready, the following commands assist the +programmer at marking translatable strings in his set of sources. But +these commands are necessarily driven from within a PO file window, and +it is likely that you do not even have such a PO file yet. This is not +a problem at all, as you may safely open a new, empty PO file, mainly +for using these commands. This empty PO file will slowly fill in while +you mark strings as translatable in your program sources. + +`,' + Search through program sources for a string which looks like a + candidate for translation. + +`M-,' + Mark the last string found with `_()'. + +`M-.' + Mark the last string found with a keyword taken from a set of + possible keywords. This command with a prefix allows some + management of these keywords. + + The `,' (`po-tags-search') command search for the next occurrence of +a string which looks like a possible candidate for translation, and +displays the program source in another Emacs window, positioned in such +a way that the string is near the top of this other window. If the +string is too big to fit whole in this window, it is positioned so only +its end is shown. In any case, the cursor is left in the PO file +window. If the shown string would be better presented differently in +different native languages, you may mark it using `M-,' or `M-.'. +Otherwise, you might rather ignore it and skip to the next string by +merely repeating the `,' command. + + A string is a good candidate for translation if it contains a +sequence of three or more letters. A string containing at most two +letters in a row will be considered as a candidate if it has more +letters than non-letters. The command disregards strings containing no +letters, or isolated letters only. It also disregards strings within +comments, or strings already marked with some keyword PO mode knows +(see below). + + If you have never told Emacs about some `TAGS' file to use, the +command will request that you specify one from the minibuffer, the +first time you use the command. You may later change your `TAGS' file +by using the regular Emacs command `M-x visit-tags-table', which will +ask you to name the precise `TAGS' file you want to use. *Note Tag +Tables: (emacs)Tags. + + Each time you use the `,' command, the search resumes from where it +was left by the previous search, and goes through all program sources, +obeying the `TAGS' file, until all sources have been processed. +However, by giving a prefix argument to the command (`C-u ,'), you may +request that the search be restarted all over again from the first +program source; but in this case, strings that you recently marked as +translatable will be automatically skipped. + + Using this `,' command does not prevent using of other regular Emacs +tags commands. For example, regular `tags-search' or +`tags-query-replace' commands may be used without disrupting the +independent `,' search sequence. However, as implemented, the +*initial* `,' command (or the `,' command is used with a prefix) might +also reinitialize the regular Emacs tags searching to the first tags +file, this reinitialization might be considered spurious. + + The `M-,' (`po-mark-translatable') command will mark the recently +found string with the `_' keyword. The `M-.' +(`po-select-mark-and-mark') command will request that you type one +keyword from the minibuffer and use that keyword for marking the +string. Both commands will automatically create a new PO file +untranslated entry for the string being marked, and make it the current +entry (making it easy for you to immediately proceed to its +translation, if you feel like doing it right away). It is possible +that the modifications made to the program source by `M-,' or `M-.' +render some source line longer than 80 columns, forcing you to break +and re-indent this line differently. You may use the `O' command from +PO mode, or any other window changing command from GNU Emacs, to break +out into the program source window, and do any needed adjustments. You +will have to use some regular Emacs command to return the cursor to the +PO file window, if you want command `,' for the next string, say. + + The `M-.' command has a few built-in speedups, so you do not have to +explicitly type all keywords all the time. The first such speedup is +that you are presented with a *preferred* keyword, which you may accept +by merely typing `<RET>' at the prompt. The second speedup is that you +may type any non-ambiguous prefix of the keyword you really mean, and +the command will complete it automatically for you. This also means +that PO mode has to *know* all your possible keywords, and that it will +not accept mistyped keywords. + + If you reply `?' to the keyword request, the command gives a list of +all known keywords, from which you may choose. When the command is +prefixed by an argument (`C-u M-.'), it inhibits updating any program +source or PO file buffer, and does some simple keyword management +instead. In this case, the command asks for a keyword, written in +full, which becomes a new allowed keyword for later `M-.' commands. +Moreover, this new keyword automatically becomes the *preferred* +keyword for later commands. By typing an already known keyword in +response to `C-u M-.', one merely changes the *preferred* keyword and +does nothing more. + + All keywords known for `M-.' are recognized by the `,' command when +scanning for strings, and strings already marked by any of those known +keywords are automatically skipped. If many PO files are opened +simultaneously, each one has its own independent set of known keywords. +There is no provision in PO mode, currently, for deleting a known +keyword, you have to quit the file (maybe using `q') and reopen it +afresh. When a PO file is newly brought up in an Emacs window, only +`gettext' and `_' are known as keywords, and `gettext' is preferred for +the `M-.' command. In fact, this is not useful to prefer `_', as this +one is already built in the `M-,' command. + + +File: gettext.info, Node: c-format, Next: Special cases, Prev: Marking, Up: Sources + +Special Comments preceding Keywords +=================================== + + In C programs strings are often used within calls of functions from +the `printf' family. The special thing about these format strings is +that they can contain format specifiers introduced with `%'. Assume we +have the code + + printf (gettext ("String `%s' has %d characters\n"), s, strlen (s)); + +A possible German translation for the above string might be: + + "%d Zeichen lang ist die Zeichenkette `%s'" + + A C programmer, even if he cannot speak German, will recognize that +there is something wrong here. The order of the two format specifiers +is changed but of course the arguments in the `printf' don't have. +This will most probably lead to problems because now the length of the +string is regarded as the address. + + To prevent errors at runtime caused by translations the `msgfmt' +tool can check statically whether the arguments in the original and the +translation string match in type and number. If this is not the case a +warning will be given and the error cannot causes problems at runtime. + +If the word order in the above German translation would be correct one +would have to write + + "%2$d Zeichen lang ist die Zeichenkette `%1$s'" + +The routines in `msgfmt' know about this special notation. + + Because not all strings in a program must be format strings it is not +useful for `msgfmt' to test all the strings in the `.po' file. This +might cause problems because the string might contain what looks like a +format specifier, but the string is not used in `printf'. + + Therefore the `xgettext' adds a special tag to those messages it +thinks might be a format string. There is no absolute rule for this, +only a heuristic. In the `.po' file the entry is marked using the +`c-format' flag in the `#,' comment line (*note PO Files::.). + + The careful reader now might say that this again can cause problems. +The heuristic might guess it wrong. This is true and therefore +`xgettext' knows about special kind of comment which lets the +programmer take over the decision. If in the same line or the +immediately preceding line of the `gettext' keyword the `xgettext' +program find a comment containing the words `xgettext:c-format' it will +mark the string in any case with the `c-format' flag. This kind of +comment should be used when `xgettext' does not recognize the string as +a format string but is really is one and it should be tested. Please +note that when the comment is in the same line of the `gettext' +keyword, it must be before the string to be translated. + + This situation happens quite often. The `printf' function is often +called with strings which do not contain a format specifier. Of course +one would normally use `fputs' but it does happen. In this case +`xgettext' does not recognize this as a format string but what happens +if the translation introduces a valid format specifier? The `printf' +function will try to access one of the parameter but none exists +because the original code does not refer to any parameter. + + `xgettext' of course could make a wrong decision the other way +round. A string marked as a format string is not really a format +string. In this case the `msgfmt' might give too many warnings and +would prevent translating the `.po' file. The method to prevent this +wrong decision is similar to the one used above, only the comment to +use must contain the string `xgettext:no-c-format'. + + If a string is marked with `c-format' and this is not correct the +user can find out who is responsible for the decision. *Note xgettext +Invocation:: to see how the `--debug' option can be used for solving +this problem. + + +File: gettext.info, Node: Special cases, Prev: c-format, Up: Sources + +Special Cases of Translatable Strings +===================================== + + The attentive reader might now point out that it is not always +possible to mark translatable string with `gettext' or something like +this. Consider the following case: + + { + static const char *messages[] = { + "some very meaningful message", + "and another one" + }; + const char *string; + ... + string + = index > 1 ? "a default message" : messages[index]; + + fputs (string); + ... + } + + While it is no problem to mark the string `"a default message"' it +is not possible to mark the string initializers for `messages'. What +is to be done? We have to fulfill two tasks. First we have to mark the +strings so that the `xgettext' program (*note xgettext Invocation::.) +can find them, and second we have to translate the string at runtime +before printing them. + + The first task can be fulfilled by creating a new keyword, which +names a no-op. For the second we have to mark all access points to a +string from the array. So one solution can look like this: + + #define gettext_noop(String) (String) + + { + static const char *messages[] = { + gettext_noop ("some very meaningful message"), + gettext_noop ("and another one") + }; + const char *string; + ... + string + = index > 1 ? gettext ("a default message") : gettext (messages[index]); + + fputs (string); + ... + } + + Please convince yourself that the string which is written by `fputs' +is translated in any case. How to get `xgettext' know the additional +keyword `gettext_noop' is explained in *Note xgettext Invocation::. + + The above is of course not the only solution. You could also come +along with the following one: + + #define gettext_noop(String) (String) + + { + static const char *messages[] = { + gettext_noop ("some very meaningful message", + gettext_noop ("and another one") + }; + const char *string; + ... + string + = index > 1 ? gettext_noop ("a default message") : messages[index]; + + fputs (gettext (string)); + ... + } + + But this has some drawbacks. First the programmer has to take care +that he uses `gettext_noop' for the string `"a default message"'. A +use of `gettext' could have in rare cases unpredictable results. The +second reason is found in the internals of the GNU `gettext' Library +which will make this solution less efficient. + + One advantage is that you need not make control flow analysis to make +sure the output is really translated in any case. But this analysis is +generally not very difficult. If it should be in any situation you can +use this second method in this situation. + + +File: gettext.info, Node: Initial, Next: Updating, Prev: Sources, Up: Top + +Making the Initial PO File +************************** + +* Menu: + +* xgettext Invocation:: Invoking the `xgettext' Program +* C Sources Context:: C Sources Context +* Compendium:: Using Translation Compendiums + + +File: gettext.info, Node: xgettext Invocation, Next: C Sources Context, Prev: Initial, Up: Initial + +Invoking the `xgettext' Program +=============================== + + xgettext [OPTION] INPUTFILE ... + +`-a' +`--extract-all' + Extract all strings. + +`-c [TAG]' +`--add-comments[=TAG]' + Place comment block with TAG (or those preceding keyword lines) in + output file. + +`-C' +`--c++' + Recognize C++ style comments. + +`--debug' + Use the flags `c-format' and `possible-c-format' to show who was + responsible for marking a message as a format string. The later + form is used if the `xgettext' program decided, the format form is + used if the programmer prescribed it. + + By default only the `c-format' form is used. The translator should + not have to care about these details. + +`-d NAME' +`--default-domain=NAME' + Use `NAME.po' for output (instead of `messages.po'). + + The special domain name `-' or `/dev/stdout' means to write the + output to `stdout'. + +`-D DIRECTORY' +`--directory=DIRECTORY' + Change to DIRECTORY before beginning to search and scan source + files. The resulting `.po' file will be written relative to the + original directory, though. + +`-f FILE' +`--files-from=FILE' + Read the names of the input files from FILE instead of getting + them from the command line. + +`--force' + Always write output file even if no message is defined. + +`-h' +`--help' + Display this help and exit. + +`-I LIST' +`--input-path=LIST' + List of directories searched for input files. + +`-j' +`--join-existing' + Join messages with existing file. + +`-k WORD' +`--keyword[=WORD]' + Additonal keyword to be looked for (without WORD means not to use + default keywords). + + The default keywords, which are always looked for if not explicitly + disabled, are `gettext', `dgettext', `dcgettext' and + `gettext_noop'. + +`-m [STRING]' +`--msgstr-prefix[=STRING]' + Use STRING or "" as prefix for msgstr entries. + +`-M [STRING]' +`--msgstr-suffix[=STRING]' + Use STRING or "" as suffix for msgstr entries. + +`--no-location' + Do not write `#: FILENAME:LINE' lines. + +`-n' +`--add-location' + Generate `#: FILENAME:LINE' lines (default). + +`--omit-header' + Don't write header with `msgid ""' entry. + + This is useful for testing purposes because it eliminates a source + of variance for generated `.gmo' files. We can ship some of these + files in the GNU `gettext' package, and the result of regenerating + them through `msgfmt' should yield the same values. + +`-p DIR' +`--output-dir=DIR' + Output files will be placed in directory DIR. + +`-s' +`--sort-output' + Generate sorted output and remove duplicates. + +`--strict' + Write out strict Uniforum conforming PO file. + +`-v' +`--version' + Output version information and exit. + +`-x FILE' +`--exclude-file=FILE' + Entries from FILE are not extracted. + + Search path for supplementary PO files is: +`/usr/local/share/nls/src/'. + + If INPUTFILE is `-', standard input is read. + + This implementation of `xgettext' is able to process a few awkward +cases, like strings in preprocessor macros, ANSI concatenation of +adjacent strings, and escaped end of lines for continued strings. + + +File: gettext.info, Node: C Sources Context, Next: Compendium, Prev: xgettext Invocation, Up: Initial + +C Sources Context +================= + + PO mode is particularily powerful when used with PO files created +through GNU `gettext' utilities, as those utilities insert special +comments in the PO files they generate. Some of these special comments +relate the PO file entry to exactly where the untranslated string +appears in the program sources. + + When the translator gets to an untranslated entry, she is fairly +often faced with an original string which is not as informative as it +normally should be, being succinct, cryptic, or otherwise ambiguous. +Before chosing how to translate the string, she needs to understand +better what the string really means and how tight the translation has +to be. Most of times, when problems arise, the only way left to make +her judgment is looking at the true program sources from where this +string originated, searching for surrounding comments the programmer +might have put in there, and looking around for helping clues of *any* +kind. + + Surely, when looking at program sources, the translator will receive +more help if she is a fluent programmer. However, even if she is not +versed in programming and feels a little lost in C code, the translator +should not be shy at taking a look, once in a while. It is most +probable that she will still be able to find some of the hints she +needs. She will learn quickly to not feel uncomfortable in program +code, paying more attention to programmer's comments, variable and +function names (if he dared chosing them well), and overall +organization, than to programmation itself. + + The following commands are meant to help the translator at getting +program source context for a PO file entry. + +`s' + Resume the display of a program source context, or cycle through + them. + +`M-s' + Display of a program source context selected by menu. + +`S' + Add a directory to the search path for source files. + +`M-S' + Delete a directory from the search path for source files. + + The commands `s' (`po-cycle-reference') and `M-s' +(`po-select-source-reference') both open another window displaying some +source program file, and already positioned in such a way that it shows +an actual use of the string to be translated. By doing so, the command +gives source program context for the string. But if the entry has no +source context references, or if all references are unresolved along +the search path for program sources, then the command diagnoses this as +an error. + + Even if `s' (or `M-s') opens a new window, the cursor stays in the +PO file window. If the translator really wants to get into the program +source window, she ought to do it explicitly, maybe by using command +`O'. + + When `s' is typed for the first time, or for a PO file entry which +is different of the last one used for getting source context, then the +command reacts by giving the first context available for this entry, if +any. If some context has already been recently displayed for the +current PO file entry, and the translator wandered off to do other +things, typing `s' again will merely resume, in another window, the +context last displayed. In particular, if the translator moved the +cursor away from the context in the source file, the command will bring +the cursor back to the context. By using `s' many times in a row, with +no other commands intervening, PO mode will cycle to the next available +contexts for this particular entry, getting back to the first context +once the last has been shown. + + The command `M-s' behaves differently. Instead of cycling through +references, it lets the translator choose of particular reference among +many, and displays that reference. It is best used with completion, if +the translator types `TAB' immediately after `M-s', in response to the +question, she will be offered a menu of all possible references, as a +reminder of which are the acceptable answers. This command is useful +only where there are really many contexts available for a single string +to translate. + + Program source files are usually found relative to where the PO file +stands. As a special provision, when this fails, the file is also +looked for, but relative to the directory immediately above it. Those +two cases take proper care of most PO files. However, it might happen +that a PO file has been moved, or is edited in a different place than +its normal location. When this happens, the translator should tell PO +mode in which directory normally sits the genuine PO file. Many such +directories may be specified, and all together, they constitute what is +called the "search path" for program sources. The command `S' +(`po-consider-source-path') is used to interactively enter a new +directory at the front of the search path, and the command `M-S' +(`po-ignore-source-path') is used to select, with completion, one of +the directories she does not want anymore on the search path. + + +File: gettext.info, Node: Compendium, Prev: C Sources Context, Up: Initial + +Using Translation Compendiums +============================= + + Compendiums are yet to be implemented. + + An incoming PO mode feature will let the translator maintain a +compendium of already achieved translations. A "compendium" is a +special PO file containing a set of translations recurring in many +different packages. The translator will be given commands for adding +entries to her compendium, and later initializing untranslated entries, +or updating already translated entries, from translations kept in the +compendium. For this to work, however, the compendium would have to be +normalized. *Note Normalizing::. + + +File: gettext.info, Node: Updating, Next: Binaries, Prev: Initial, Up: Top + +Updating Existing PO Files +************************** + +* Menu: + +* msgmerge Invocation:: Invoking the `msgmerge' Program +* Translated Entries:: +* Fuzzy Entries:: +* Untranslated Entries:: Untranslated Entries +* Obsolete Entries:: Obsolete Entries +* Modifying Translations:: Modifying Translations +* Modifying Comments:: Modifying Comments +* Auxiliary:: Consulting Auxiliary PO Files + + +File: gettext.info, Node: msgmerge Invocation, Next: Translated Entries, Prev: Updating, Up: Updating + +Invoking the `msgmerge' Program +=============================== + + +File: gettext.info, Node: Translated Entries, Next: Fuzzy Entries, Prev: msgmerge Invocation, Up: Updating + +Translated Entries +================== + + Each PO file entry for which the `msgstr' field has been filled with +a translation, and which is not marked as fuzzy (*note Fuzzy +Entries::.), is a said to be a "translated" entry. Only translated +entries will later be compiled by GNU `msgfmt' and become usable in +programs. Other entry types will be excluded; translation will not +occur for them. + + Some commands are more specifically related to translated entry +processing. + +`t' + Find the next translated entry. + +`M-t' + Find the previous translated entry. + + The commands `t' (`po-next-translated-entry') and `M-t' +(`po-previous-transted-entry') move forwards or backwards, chasing for +an translated entry. If none is found, the search is extended and +wraps around in the PO file buffer. + + Translated entries usually result from the translator having edited +in a translation for them, *Note Modifying Translations::. However, if +the variable `po-auto-fuzzy-on-edit' is not `nil', the entry having +received a new translation first becomes a fuzzy entry, which ought to +be later unfuzzied before becoming an official, genuine translated +entry. *Note Fuzzy Entries::. + + +File: gettext.info, Node: Fuzzy Entries, Next: Untranslated Entries, Prev: Translated Entries, Up: Updating + +Fuzzy Entries +============= + + Each PO file entry may have a set of "attributes", which are +qualities given an name and explicitely associated with the entry +translation, using a special system comment. One of these attributes +has the name `fuzzy', and entries having this attribute are said to +have a fuzzy translation. They are called fuzzy entries, for short. + + Fuzzy entries, even if they account for translated entries for most +other purposes, usually call for revision by the translator. Those may +be produced by applying the program `msgmerge' to update an older +translated PO files according to a new PO template file, when this tool +hypothesises that some new `msgid' has been modified only slightly out +of an older one, and chooses to pair what it thinks to be the old +translation for the new modified entry. The slight alteration in the +original string (the `msgid' string) should often be reflected in the +translated string, and this requires the intervention of the +translator. For this reason, `msgmerge' might mark some entries as +being fuzzy. + + Also, the translator may decide herself to mark an entry as fuzzy +for her own convenience, when she wants to remember that the entry has +to be later revisited. So, some commands are more specifically related +to fuzzy entry processing. + +`f' + Find the next fuzzy entry. + +`M-f' + Find the previous fuzzy entry. + +`TAB' + Remove the fuzzy attribute of the current entry. + + The commands `f' (`po-next-fuzzy') and `M-f' (`po-previous-fuzzy') +move forwards or backwards, chasing for a fuzzy entry. If none is +found, the search is extended and wraps around in the PO file buffer. + + The command `TAB' (`po-unfuzzy') removes the fuzzy attribute +associated with an entry, usually leaving it translated. Further, if +the variable `po-auto-select-on-unfuzzy' has not the `nil' value, the +`TAB' command will automatically chase for another interesting entry to +work on. The initial value of `po-auto-select-on-unfuzzy' is `nil'. + + The initial value of `po-auto-fuzzy-on-edit' is `nil'. However, if +the variable `po-auto-fuzzy-on-edit' is set to `t', any entry edited +through the `RET' command is marked fuzzy, as a way to ensure some kind +of double check, later. In this case, the usual paradigm is that an +entry becomes fuzzy (if not already) whenever the translator modifies +it. If she is satisfied with the translation, she then uses `TAB' to +pick another entry to work on, clearing the fuzzy attribute on the same +blow. If she is not satisfied yet, she merely uses `SPC' to chase +another entry, leaving the entry fuzzy. + + The translator may also use the `DEL' command (`po-fade-out-entry') +over any translated entry to mark it as being fuzzy, when she wants to +easily leave a trace she wants to later return working at this entry. + + Also, when time comes to quit working on a PO file buffer with the +`q' command, the translator is asked for confirmation, if fuzzy string +still exists. + + +File: gettext.info, Node: Untranslated Entries, Next: Obsolete Entries, Prev: Fuzzy Entries, Up: Updating + +Untranslated Entries +==================== + + When `xgettext' originally creates a PO file, unless told otherwise, +it initializes the `msgid' field with the untranslated string, and +leaves the `msgstr' string to be empty. Such entries, having an empty +translation, are said to be "untranslated" entries. Later, when the +programmer slightly modifies some string right in the program, this +change is later reflected in the PO file by the appearance of a new +untranslated entry for the modified string. + + The usual commands moving from entry to entry consider untranslated +entries on the same level as active entries. Untranslated entries are +easily recognizable by the fact they end with `msgstr ""'. + + The work of the translator might be (quite naively) seen as the +process of seeking after an untranslated entry, editing a translation +for it, and repeating these actions until no untranslated entries +remain. Some commands are more specifically related to untranslated +entry processing. + +`u' + Find the next untranslated entry. + +`M-u' + Find the previous untranslated entry. + +`k' + Turn the current entry into an untranslated one. + + The commands `u' (`po-next-untranslated-entry') and `M-u' +(`po-previous-untransted-entry') move forwards or backwards, chasing +for an untranslated entry. If none is found, the search is extended +and wraps around in the PO file buffer. + + An entry can be turned back into an untranslated entry by merely +emptying its translation, using the command `k' (`po-kill-msgstr'). +*Note Modifying Translations::. + + Also, when time comes to quit working on a PO file buffer with the +`q' command, the translator is asked for confirmation, if some +untranslated string still exists. + diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info-3 b/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info-3 new file mode 100644 index 00000000..e40fae3e --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info-3 @@ -0,0 +1,1036 @@ +This is Info file gettext.info, produced by Makeinfo version 1.68 from +the input file gettext.texi. + +INFO-DIR-SECTION GNU Gettext Utilities +START-INFO-DIR-ENTRY +* Gettext: (gettext). GNU gettext utilities. +* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. +* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. +* msgmerge: (gettext)msgmerge Invocation. Update two PO files into one. +* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. +END-INFO-DIR-ENTRY + + This file provides documentation for GNU `gettext' utilities. It +also serves as a reference for the free Translation Project. + + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Foundation. + + +File: gettext.info, Node: Obsolete Entries, Next: Modifying Translations, Prev: Untranslated Entries, Up: Updating + +Obsolete Entries +================ + + By "obsolete" PO file entries, we mean those entries which are +commented out, usually by `msgmerge' when it found that the translation +is not needed anymore by the package being localized. + + The usual commands moving from entry to entry consider obsolete +entries on the same level as active entries. Obsolete entries are +easily recognizable by the fact that all their lines start with `#', +even those lines containing `msgid' or `msgstr'. + + Commands exist for emptying the translation or reinitializing it to +the original untranslated string. Commands interfacing with the kill +ring may force some previously saved text into the translation. The +user may interactively edit the translation. All these commands may +apply to obsolete entries, carefully leaving the entry obsolete after +the fact. + + Moreover, some commands are more specifically related to obsolete +entry processing. + +`o' + Find the next obsolete entry. + +`M-o' + Find the previous obsolete entry. + +`DEL' + Make an active entry obsolete, or zap out an obsolete entry. + + The commands `o' (`po-next-obsolete-entry') and `M-o' +(`po-previous-obsolete-entry') move forwards or backwards, chasing for +an obsolete entry. If none is found, the search is extended and wraps +around in the PO file buffer. + + PO mode does not provide ways for un-commenting an obsolete entry +and making it active, because this would reintroduce an original +untranslated string which does not correspond to any marked string in +the program sources. This goes with the philosophy of never +introducing useless `msgid' values. + + However, it is possible to comment out an active entry, so making it +obsolete. GNU `gettext' utilities will later react to the +disappearance of a translation by using the untranslated string. The +command `DEL' (`po-fade-out-entry') pushes the current entry a little +further towards annihilation. If the entry is active (it is a +translated entry), then it is first made fuzzy. If it is already fuzzy, +then the entry is merely commented out, with confirmation. If the entry +is already obsolete, then it is completely deleted from the PO file. +It is easy to recycle the translation so deleted into some other PO file +entry, usually one which is untranslated. *Note Modifying +Translations::. + + Here is a quite interesting problem to solve for later development of +PO mode, for those nights you are not sleepy. The idea would be that +PO mode might become bright enough, one of these days, to make good +guesses at retrieving the most probable candidate, among all obsolete +entries, for initializing the translation of a newly appeared string. +I think it might be a quite hard problem to do this algorithmically, as +we have to develop good and efficient measures of string similarity. +Right now, PO mode completely lets the decision to the translator, when +the time comes to find the adequate obsolete translation, it merely +tries to provide handy tools for helping her to do so. + + +File: gettext.info, Node: Modifying Translations, Next: Modifying Comments, Prev: Obsolete Entries, Up: Updating + +Modifying Translations +====================== + + PO mode prevents direct edition of the PO file, by the usual means +Emacs give for altering a buffer's contents. By doing so, it pretends +helping the translator to avoid little clerical errors about the +overall file format, or the proper quoting of strings, as those errors +would be easily made. Other kinds of errors are still possible, but +some may be caught and diagnosed by the batch validation process, which +the translator may always trigger by the `V' command. For all other +errors, the translator has to rely on her own judgment, and also on the +linguistic reports submitted to her by the users of the translated +package, having the same mother tongue. + + When the time comes to create a translation, correct an error +diagnosed mechanically or reported by a user, the translators have to +resort to using the following commands for modifying the translations. + +`RET' + Interactively edit the translation. + +`LFD' + Reinitialize the translation with the original, untranslated + string. + +`k' + Save the translation on the kill ring, and delete it. + +`w' + Save the translation on the kill ring, without deleting it. + +`y' + Replace the translation, taking the new from the kill ring. + + The command `RET' (`po-edit-msgstr') opens a new Emacs window +containing a copy of the translation taken from the current PO file +entry, all ready for edition, fully modifiable and with the complete +extent of GNU Emacs modifying commands. The string is presented to the +translator expunged of all quoting marks, and she will modify the +*unquoted* string in this window to heart's content. Once done, the +regular Emacs command `M-C-c' (`exit-recursive-edit') may be used to +return the edited translation into the PO file, replacing the original +translation. The keys `C-c C-c' are bound so they have the same effect +as `M-C-c'. + + If the translator becomes unsatisfied with her translation to the +extent she prefers keeping the translation which was existent prior to +the `RET' command, she may use the standard Emacs command `C-]' +(`abort-recursive-edit') to merely get rid of edition, while preserving +the original translation. The keys `C-c C-k' are bound so they have +the same effect as `C-]'. Another way would be for her to exit +normally with `C-c C-c', then type `U' once for undoing the whole +effect of last edition. + + Functions found on `po-subedit-mode-hook', if any, are executed after +the string has been inserted in the edit buffer and before recursive +edit is entered. + + While editing her translation, the translator should pay attention to +not inserting unwanted `<RET>' (carriage returns) characters at the end +of the translated string if those are not meant to be there, or to +removing such characters when they are required. Since these +characters are not visible in the editing buffer, they are easily +introduced by mistake. To help her, `<RET>' automatically puts the +character `<' at the end of the string being edited, but this `<' is +not really part of the string. On exiting the editing window with +`C-c C-c', PO mode automatically removes such `<' and all whitespace +added after it. If the translator adds characters after the +terminating `<', it looses its delimiting property and integrally +becomes part of the string. If she removes the delimiting `<', then +the edited string is taken *as is*, with all trailing newlines, even if +invisible. Also, if the translated string ought to end itself with a +genuine `<', then the delimiting `<' may not be removed; so the string +should appear, in the editing window, as ending with two `<' in a row. + + When a translation (or a comment) is being edited, the translator +may move the cursor back into the PO file buffer and freely move to +other entries, browsing at will. The edited entry will be recovered as +soon as the edit ceases, because it is this entry only which is being +modified. If, with an edition still opened, the translator wanders in +the PO file buffer, she cannot modify any other entry. If she tries +to, PO mode will react by suggesting that she abort the current edit, +or else, by inviting her to finish the current edit prior to any other +modification. + + The command `LFD' (`po-msgid-to-msgstr') initializes, or +reinitializes the translation with the original string. This command +is normally used when the translator wants to redo a fresh translation +of the original string, disregarding any previous work. + + It is possible to arrange so, whenever editing an untranslated +entry, the `LFD' command be automatically executed. If you set +`po-auto-edit-with-msgid' to `t', the translation gets initialised with +the original string, in case none exist already. The default value for +`po-auto-edit-with-msgid' is `nil'. + + In fact, whether it is best to start a translation with an empty +string, or rather with a copy of the original string, is a matter of +taste or habit. Sometimes, the source language and the target language +are so different that is simply best to start writing on an empty page. +At other times, the source and target languages are so close that it +would be a waste to retype a number of words already being written in +the original string. A translator may also like having the original +string right under her eyes, as she will progressively overwrite the +original text with the translation, even if this requires some extra +editing work to get rid of the original. + + The command `k' (`po-kill-msgstr') merely empties the translation +string, so turning the entry into an untranslated one. But while doing +so, its previous contents is put apart in a special place, known as the +kill ring. The command `w' (`po-kill-ring-save-msgstr') has also the +effect of taking a copy of the translation onto the kill ring, but it +otherwise leaves the entry alone, and does *not* remove the translation +from the entry. Both commands use exactly the Emacs kill ring, which +is shared between buffers, and which is well known already to GNU Emacs +lovers. + + The translator may use `k' or `w' many times in the course of her +work, as the kill ring may hold several saved translations. From the +kill ring, strings may later be reinserted in various Emacs buffers. +In particular, the kill ring may be used for moving translation strings +between different entries of a single PO file buffer, or if the +translator is handling many such buffers at once, even between PO files. + + To facilitate exchanges with buffers which are not in PO mode, the +translation string put on the kill ring by the `k' command is fully +unquoted before being saved: external quotes are removed, multi-lines +strings are concatenated, and backslashed escaped sequences are turned +into their corresponding characters. In the special case of obsolete +entries, the translation is also uncommented prior to saving. + + The command `y' (`po-yank-msgstr') completely replaces the +translation of the current entry by a string taken from the kill ring. +Following GNU Emacs terminology, we then say that the replacement +string is "yanked" into the PO file buffer. *Note Yanking: +(emacs)Yanking. The first time `y' is used, the translation receives +the value of the most recent addition to the kill ring. If `y' is +typed once again, immediately, without intervening keystrokes, the +translation just inserted is taken away and replaced by the second most +recent addition to the kill ring. By repeating `y' many times in a row, +the translator may travel along the kill ring for saved strings, until +she finds the string she really wanted. + + When a string is yanked into a PO file entry, it is fully and +automatically requoted for complying with the format PO files should +have. Further, if the entry is obsolete, PO mode then appropriately +push the inserted string inside comments. Once again, translators +should not burden themselves with quoting considerations besides, of +course, the necessity of the translated string itself respective to the +program using it. + + Note that `k' or `w' are not the only commands pushing strings on +the kill ring, as almost any PO mode command replacing translation +strings (or the translator comments) automatically save the old string +on the kill ring. The main exceptions to this general rule are the +yanking commands themselves. + + To better illustrate the operation of killing and yanking, let's use +an actual example, taken from a common situation. When the programmer +slightly modifies some string right in the program, his change is later +reflected in the PO file by the appearance of a new untranslated entry +for the modified string, and the fact that the entry translating the +original or unmodified string becomes obsolete. In many cases, the +translator might spare herself some work by retrieving the unmodified +translation from the obsolete entry, then initializing the untranslated +entry `msgstr' field with this retrieved translation. Once this done, +the obsolete entry is not wanted anymore, and may be safely deleted. + + When the translator finds an untranslated entry and suspects that a +slight variant of the translation exists, she immediately uses `m' to +mark the current entry location, then starts chasing obsolete entries +with `o', hoping to find some translation corresponding to the +unmodified string. Once found, she uses the `DEL' command for deleting +the obsolete entry, knowing that `DEL' also *kills* the translation, +that is, pushes the translation on the kill ring. Then, `r' returns to +the initial untranslated entry, `y' then *yanks* the saved translation +right into the `msgstr' field. The translator is then free to use +`<RET>' for fine tuning the translation contents, and maybe to later +use `u', then `m' again, for going on with the next untranslated string. + + When some sequence of keys has to be typed over and over again, the +translator may find it useful to become better acquainted with the GNU +Emacs capability of learning these sequences and playing them back under +request. *Note Keyboard Macros: (emacs)Keyboard Macros. + + +File: gettext.info, Node: Modifying Comments, Next: Auxiliary, Prev: Modifying Translations, Up: Updating + +Modifying Comments +================== + + Any translation work done seriously will raise many linguistic +difficulties, for which decisions have to be made, and the choices +further documented. These documents may be saved within the PO file in +form of translator comments, which the translator is free to create, +delete, or modify at will. These comments may be useful to herself +when she returns to this PO file after a while. + + Comments not having whitespace after the initial `#', for example, +those beginning with `#.' or `#:', are *not* translator comments, they +are exclusively created by other `gettext' tools. So, the commands +below will never alter such system added comments, they are not meant +for the translator to modify. *Note PO Files::. + + The following commands are somewhat similar to those modifying +translations, so the general indications given for those apply here. +*Note Modifying Translations::. + +`#' + Interactively edit the translator comments. + +`K' + Save the translator comments on the kill ring, and delete it. + +`W' + Save the translator comments on the kill ring, without deleting it. + +`Y' + Replace the translator comments, taking the new from the kill ring. + + These commands parallel PO mode commands for modifying the +translation strings, and behave much the same way as they do, except +that they handle this part of PO file comments meant for translator +usage, rather than the translation strings. So, if the descriptions +given below are slightly succinct, it is because the full details have +already been given. *Note Modifying Translations::. + + The command `#' (`po-edit-comment') opens a new Emacs window +containing a copy of the translator comments on the current PO file +entry. If there are no such comments, PO mode understands that the +translator wants to add a comment to the entry, and she is presented +with an empty screen. Comment marks (`#') and the space following them +are automatically removed before edition, and reinstated after. For +translator comments pertaining to obsolete entries, the uncommenting +and recommenting operations are done twice. Once in the editing +window, the keys `C-c C-c' allow the translator to tell she is finished +with editing the comment. + + Functions found on `po-subedit-mode-hook', if any, are executed after +the string has been inserted in the edit buffer and before recursive +edit is entered. + + The command `K' (`po-kill-comment') get rid of all translator +comments, while saving those comments on the kill ring. The command +`W' (`po-kill-ring-save-comment') takes a copy of the translator +comments on the kill ring, but leaves them undisturbed in the current +entry. The command `Y' (`po-yank-comment') completely replaces the +translator comments by a string taken at the front of the kill ring. +When this command is immediately repeated, the comments just inserted +are withdrawn, and replaced by other strings taken along the kill ring. + + On the kill ring, all strings have the same nature. There is no +distinction between *translation* strings and *translator comments* +strings. So, for example, let's presume the translator has just +finished editing a translation, and wants to create a new translator +comment to document why the previous translation was not good, just to +remember what was the problem. Foreseeing that she will do that in her +documentation, the translator may want to quote the previous +translation in her translator comments. To do so, she may initialize +the translator comments with the previous translation, still at the +head of the kill ring. Because editing already pushed the previous +translation on the kill ring, she merely has to type `M-w' prior to +`#', and the previous translation will be right there, all ready for +being introduced by some explanatory text. + + On the other hand, presume there are some translator comments already +and that the translator wants to add to those comments, instead of +wholly replacing them. Then, she should edit the comment right away +with `#'. Once inside the editing window, she can use the regular GNU +Emacs commands `C-y' (`yank') and `M-y' (`yank-pop') to get the +previous translation where she likes. + + +File: gettext.info, Node: Auxiliary, Prev: Modifying Comments, Up: Updating + +Consulting Auxiliary PO Files +============================= + + PO mode is able to help the knowledgeable translator, being fluent in +many languages, at taking advantage of translations already achieved in +other languages she just happens to know. It provides these other +language translations as additional context for her own work. Moreover, +it has features to ease the production of translations for many +languages at once, for translators preferring to work in this way. + + An "auxiliary" PO file is an existing PO file meant for the same +package the translator is working on, but targeted to a different mother +tongue language. Commands exist for declaring and handling auxiliary +PO files, and also for showing contexts for the entry under work. + + Here are the auxiliary file commands available in PO mode. + +`a' + Seek auxiliary files for another translation for the same entry. + +`M-a' + Switch to a particular auxiliary file. + +`A' + Declare this PO file as an auxiliary file. + +`M-A' + Remove this PO file from the list of auxiliary files. + + Command `A' (`po-consider-as-auxiliary') adds the current PO file to +the list of auxiliary files, while command `M-A' +(`po-ignore-as-auxiliary' just removes it. + + The command `a' (`po-cycle-auxiliary') seeks all auxiliary PO files, +round-robin, searching for a translated entry in some other language +having an `msgid' field identical as the one for the current entry. +The found PO file, if any, takes the place of the current PO file in +the display (its window gets on top). Before doing so, the current PO +file is also made into an auxiliary file, if not already. So, `a' in +this newly displayed PO file will seek another PO file, and so on, so +repeating `a' will eventually yield back the original PO file. + + The command `M-a' (`po-select-auxiliary') asks the translator for +her choice of a particular auxiliary file, with completion, and then +switches to that selected PO file. The command also checks if the +selected file has an `msgid' field identical as the one for the current +entry, and if yes, this entry becomes current. Otherwise, the cursor +of the selected file is left undisturbed. + + For all this to work fully, auxiliary PO files will have to be +normalized, in that way that `msgid' fields should be written *exactly* +the same way. It is possible to write `msgid' fields in various ways +for representing the same string, different writing would break the +proper behaviour of the auxiliary file commands of PO mode. This is not +expected to be much a problem in practice, as most existing PO files +have their `msgid' entries written by the same GNU `gettext' tools. + + However, PO files initially created by PO mode itself, while marking +strings in source files, are normalised differently. So are PO files +resulting of the the `M-x normalize' command. Until these +discrepancies between PO mode and other GNU `gettext' tools get fully +resolved, the translator should stay aware of normalisation issues. + + +File: gettext.info, Node: Binaries, Next: Users, Prev: Updating, Up: Top + +Producing Binary MO Files +************************* + +* Menu: + +* msgfmt Invocation:: Invoking the `msgfmt' Program +* MO Files:: The Format of GNU MO Files + + +File: gettext.info, Node: msgfmt Invocation, Next: MO Files, Prev: Binaries, Up: Binaries + +Invoking the `msgfmt' Program +============================= + + Usage: msgfmt [OPTION] FILENAME.po ... + +`-a NUMBER' +`--alignment=NUMBER' + Align strings to NUMBER bytes (default: 1). + +`-h' +`--help' + Display this help and exit. + +`--no-hash' + Binary file will not include the hash table. + +`-o FILE' +`--output-file=FILE' + Specify output file name as FILE. + +`--strict' + Direct the program to work strictly following the Uniforum/Sun + implementation. Currently this only affects the naming of the + output file. If this option is not given the name of the output + file is the same as the domain name. If the strict Uniforum mode + is enable the suffix `.mo' is added to the file name if it is not + already present. + + We find this behaviour of Sun's implementation rather silly and so + by default this mode is *not* selected. + +`-v' +`--verbose' + Detect and diagnose input file anomalies which might represent + translation errors. The `msgid' and `msgstr' strings are studied + and compared. It is considered abnormal that one string starts or + ends with a newline while the other does not. + + Also, if the string represents a format sring used in a + `printf'-like function both strings should have the same number of + `%' format specifiers, with matching types. If the flag + `c-format' or `possible-c-format' appears in the special comment + <#,> for this entry a check is performed. For example, the check + will diagnose using `%.*s' against `%s', or `%d' against `%s', or + `%d' against `%x'. It can even handle positional parameters. + + Normally the `xgettext' program automatically decides whether a + string is a format string or not. This algorithm is not perfect, + though. It might regard a string as a format string though it is + not used in a `printf'-like function and so `msgfmt' might report + errors where there are none. Or the other way round: a string is + not regarded as a format string but it is used in a `printf'-like + function. + + So solve this problem the programmer can dictate the decision to + the `xgettext' program (*note c-format::.). The translator should + not consider removing the flag from the <#,> line. This "fix" + would be reversed again as soon as `msgmerge' is called the next + time. + +`-V' +`--version' + Output version information and exit. + + If input file is `-', standard input is read. If output file is +`-', output is written to standard output. + + +File: gettext.info, Node: MO Files, Prev: msgfmt Invocation, Up: Binaries + +The Format of GNU MO Files +========================== + + The format of the generated MO files is best described by a picture, +which appears below. + + The first two words serve the identification of the file. The magic +number will always signal GNU MO files. The number is stored in the +byte order of the generating machine, so the magic number really is two +numbers: `0x950412de' and `0xde120495'. The second word describes the +current revision of the file format. For now the revision is 0. This +might change in future versions, and ensures that the readers of MO +files can distinguish new formats from old ones, so that both can be +handled correctly. The version is kept separate from the magic number, +instead of using different magic numbers for different formats, mainly +because `/etc/magic' is not updated often. It might be better to have +magic separated from internal format version identification. + + Follow a number of pointers to later tables in the file, allowing +for the extension of the prefix part of MO files without having to +recompile programs reading them. This might become useful for later +inserting a few flag bits, indication about the charset used, new +tables, or other things. + + Then, at offset O and offset T in the picture, two tables of string +descriptors can be found. In both tables, each string descriptor uses +two 32 bits integers, one for the string length, another for the offset +of the string in the MO file, counting in bytes from the start of the +file. The first table contains descriptors for the original strings, +and is sorted so the original strings are in increasing lexicographical +order. The second table contains descriptors for the translated +strings, and is parallel to the first table: to find the corresponding +translation one has to access the array slot in the second array with +the same index. + + Having the original strings sorted enables the use of simple binary +search, for when the MO file does not contain an hashing table, or for +when it is not practical to use the hashing table provided in the MO +file. This also has another advantage, as the empty string in a PO +file GNU `gettext' is usually *translated* into some system information +attached to that particular MO file, and the empty string necessarily +becomes the first in both the original and translated tables, making +the system information very easy to find. + + The size S of the hash table can be zero. In this case, the hash +table itself is not contained in the MO file. Some people might prefer +this because a precomputed hashing table takes disk space, and does not +win *that* much speed. The hash table contains indices to the sorted +array of strings in the MO file. Conflict resolution is done by double +hashing. The precise hashing algorithm used is fairly dependent of GNU +`gettext' code, and is not documented here. + + As for the strings themselves, they follow the hash file, and each +is terminated with a <NUL>, and this <NUL> is not counted in the length +which appears in the string descriptor. The `msgfmt' program has an +option selecting the alignment for MO file strings. With this option, +each string is separately aligned so it starts at an offset which is a +multiple of the alignment value. On some RISC machines, a correct +alignment will speed things up. + + Nothing prevents a MO file from having embedded <NUL>s in strings. +However, the program interface currently used already presumes that +strings are <NUL> terminated, so embedded <NUL>s are somewhat useless. +But MO file format is general enough so other interfaces would be later +possible, if for example, we ever want to implement wide characters +right in MO files, where <NUL> bytes may accidently appear. + + This particular issue has been strongly debated in the GNU `gettext' +development forum, and it is expectable that MO file format will evolve +or change over time. It is even possible that many formats may later +be supported concurrently. But surely, we have to start somewhere, and +the MO file format described here is a good start. Nothing is cast in +concrete, and the format may later evolve fairly easily, so we should +feel comfortable with the current approach. + + byte + +------------------------------------------+ + 0 | magic number = 0x950412de | + | | + 4 | file format revision = 0 | + | | + 8 | number of strings | == N + | | + 12 | offset of table with original strings | == O + | | + 16 | offset of table with translation strings | == T + | | + 20 | size of hashing table | == S + | | + 24 | offset of hashing table | == H + | | + . . + . (possibly more entries later) . + . . + | | + O | length & offset 0th string ----------------. + O + 8 | length & offset 1st string ------------------. + ... ... | | + O + ((N-1)*8)| length & offset (N-1)th string | | | + | | | | + T | length & offset 0th translation ---------------. + T + 8 | length & offset 1st translation -----------------. + ... ... | | | | + T + ((N-1)*8)| length & offset (N-1)th translation | | | | | + | | | | | | + H | start hash table | | | | | + ... ... | | | | + H + S * 4 | end hash table | | | | | + | | | | | | + | NUL terminated 0th string <----------------' | | | + | | | | | + | NUL terminated 1st string <------------------' | | + | | | | + ... ... | | + | | | | + | NUL terminated 0th translation <---------------' | + | | | + | NUL terminated 1st translation <-----------------' + | | + ... ... + | | + +------------------------------------------+ + + +File: gettext.info, Node: Users, Next: Programmers, Prev: Binaries, Up: Top + +The User's View +*************** + + When GNU `gettext' will truly have reached is goal, average users +should feel some kind of astonished pleasure, seeing the effect of that +strange kind of magic that just makes their own native language appear +everywhere on their screens. As for naive users, they would ideally +have no special pleasure about it, merely taking their own language for +*granted*, and becoming rather unhappy otherwise. + + So, let's try to describe here how we would like the magic to +operate, as we want the users' view to be the simplest, among all ways +one could look at GNU `gettext'. All other software engineers: +programmers, translators, maintainers, should work together in such a +way that the magic becomes possible. This is a long and progressive +undertaking, and information is available about the progress of the +Translation Project. + + When a package is distributed, there are two kind of users: +"installers" who fetch the distribution, unpack it, configure it, +compile it and install it for themselves or others to use; and "end +users" that call programs of the package, once these have been +installed at their site. GNU `gettext' is offering magic for both +installers and end users. + +* Menu: + +* Matrix:: The Current `ABOUT-NLS' Matrix +* Installers:: Magic for Installers +* End Users:: Magic for End Users + + +File: gettext.info, Node: Matrix, Next: Installers, Prev: Users, Up: Users + +The Current `ABOUT-NLS' Matrix +============================== + + Languages are not equally supported in all packages using GNU +`gettext'. To know if some package uses GNU `gettext', one may check +the distribution for the `ABOUT-NLS' information file, for some `LL.po' +files, often kept together into some `po/' directory, or for an `intl/' +directory. Internationalized packages have usually many `LL.po' files, +where LL represents the language. *Note End Users:: for a complete +description of the format for LL. + + More generally, a matrix is available for showing the current state +of the Translation Project, listing which packages are prepared for +multi-lingual messages, and which languages is supported by each. +Because this information changes often, this matrix is not kept within +this GNU `gettext' manual. This information is often found in file +`ABOUT-NLS' from various distributions, but is also as old as the +distribution itself. A recent copy of this `ABOUT-NLS' file, +containing up-to-date information, should generally be found on the +Translation Project sites, and also on most GNU archive sites. + + +File: gettext.info, Node: Installers, Next: End Users, Prev: Matrix, Up: Users + +Magic for Installers +==================== + + By default, packages fully using GNU `gettext', internally, are +installed in such a way that they to allow translation of messages. At +*configuration* time, those packages should automatically detect +whether the underlying host system provides usable `catgets' or +`gettext' functions. If neither is present, the GNU `gettext' library +should be automatically prepared and used. Installers may use special +options at configuration time for changing this behavior. The command +`./configure --with-included-gettext' bypasses system `catgets' or +`gettext' to use GNU `gettext' instead, while `./configure +--disable-nls' produces program totally unable to translate messages. + + Internationalized packages have usually many `LL.po' files. Unless +translations are disabled, all those available are installed together +with the package. However, the environment variable `LINGUAS' may be +set, prior to configuration, to limit the installed set. `LINGUAS' +should then contain a space separated list of two-letter codes, stating +which languages are allowed. + + +File: gettext.info, Node: End Users, Prev: Installers, Up: Users + +Magic for End Users +=================== + + We consider here those packages using GNU `gettext' internally, and +for which the installers did not disable translation at *configure* +time. Then, users only have to set the `LANG' environment variable to +the appropriate `LL' prior to using the programs in the package. *Note +Matrix::. For example, let's presume a German site. At the shell +prompt, users merely have to execute `setenv LANG de' (in `csh') or +`export LANG; LANG=de' (in `sh'). They could even do this from their +`.login' or `.profile' file. + + +File: gettext.info, Node: Programmers, Next: Translators, Prev: Users, Up: Top + +The Programmer's View +********************* + + One aim of the current message catalog implementation provided by +GNU `gettext' was to use the systems message catalog handling, if the +installer wishes to do so. So we perhaps should first take a look at +the solutions we know about. The people in the POSIX committee does not +manage to agree on one of the semi-official standards which we'll +describe below. In fact they couldn't agree on anything, so nothing +decide only to include an example of an interface. The major Unix +vendors are split in the usage of the two most important +specifications: X/Opens catgets vs. Uniforums gettext interface. We'll +describe them both and later explain our solution of this dilemma. + +* Menu: + +* catgets:: About `catgets' +* gettext:: About `gettext' +* Comparison:: Comparing the two interfaces +* Using libintl.a:: Using libintl.a in own programs +* gettext grok:: Being a `gettext' grok +* Temp Programmers:: Temporary Notes for the Programmers Chapter + + +File: gettext.info, Node: catgets, Next: gettext, Prev: Programmers, Up: Programmers + +About `catgets' +=============== + + The `catgets' implementation is defined in the X/Open Portability +Guide, Volume 3, XSI Supplementary Definitions, Chapter 5. But the +process of creating this standard seemed to be too slow for some of the +Unix vendors so they created their implementations on preliminary +versions of the standard. Of course this leads again to problems while +writing platform independent programs: even the usage of `catgets' does +not guarantee a unique interface. + + Another, personal comment on this that only a bunch of committee +members could have made this interface. They never really tried to +program using this interface. It is a fast, memory-saving +implementation, an user can happily live with it. But programmers hate +it (at least me and some others do...) + + But we must not forget one point: after all the trouble with +transfering the rights on Unix(tm) they at last came to X/Open, the +very same who published this specifications. This leads me to making +the prediction that this interface will be in future Unix standards +(e.g. Spec1170) and therefore part of all Unix implementation +(implementations, which are *allowed* to wear this name). + +* Menu: + +* Interface to catgets:: The interface +* Problems with catgets:: Problems with the `catgets' interface?! + + +File: gettext.info, Node: Interface to catgets, Next: Problems with catgets, Prev: catgets, Up: catgets + +The Interface +------------- + + The interface to the `catgets' implementation consists of three +functions which correspond to those used in file access: `catopen' to +open the catalog for using, `catgets' for accessing the message tables, +and `catclose' for closing after work is done. Prototypes for the +functions and the needed definitions are in the `<nl_types.h>' header +file. + + `catopen' is used like in this: + + nl_catd catd = catopen ("catalog_name", 0); + + The function takes as the argument the name of the catalog. This +usual refers to the name of the program or the package. The second +parameter is not further specified in the standard. I don't even know +whether it is implemented consistently among various systems. So the +common advice is to use `0' as the value. The return value is a handle +to the message catalog, equivalent to handles to file returned by +`open'. + + This handle is of course used in the `catgets' function which can be +used like this: + + char *translation = catgets (catd, set_no, msg_id, "original string"); + + The first parameter is this catalog descriptor. The second parameter +specifies the set of messages in this catalog, in which the message +described by `msg_id' is obtained. `catgets' therefore uses a +three-stage addressing: + + catalog name => set number => message ID => translation + + The fourth argument is not used to address the translation. It is +given as a default value in case when one of the addressing stages +fail. One important thing to remember is that although the return type +of catgets is `char *' the resulting string *must not* be changed. It +should better `const char *', but the standard is published in 1988, +one year before ANSI C. + +The last of these function functions is used and behaves as expected: + + catclose (catd); + + After this no `catgets' call using the descriptor is legal anymore. + + +File: gettext.info, Node: Problems with catgets, Prev: Interface to catgets, Up: catgets + +Problems with the `catgets' Interface?! +--------------------------------------- + + Now that this descriptions seemed to be really easy where are the +problem we speak of. In fact the interface could be used in a +reasonable way, but constructing the message catalogs is a pain. The +reason for this lies in the third argument of `catgets': the unique +message ID. This has to be a numeric value for all messages in a single +set. Perhaps you could imagine the problems keeping such list while +changing the source code. Add a new message here, remove one there. Of +course there have been developed a lot of tools helping to organize this +chaos but one as the other fails in one aspect or the other. We don't +want to say that the other approach has no problems but they are far +more easily to manage. + + +File: gettext.info, Node: gettext, Next: Comparison, Prev: catgets, Up: Programmers + +About `gettext' +=============== + + The definition of the `gettext' interface comes from a Uniforum +proposal and it is followed by at least one major Unix vendor (Sun) in +its last developments. It is not specified in any official standard, +though. + + The main points about this solution is that it does not follow the +method of normal file handling (open-use-close) and that it does not +burden the programmer so many task, especially the unique key handling. +Of course here is also a unique key needed, but this key is the message +itself (how long or short it is). *Note Comparison:: for a more +detailed comparison of the two methods. + + The following section contains a rather detailed description of the +interface. We make it that detailed because this is the interface we +chose for the GNU `gettext' Library. Programmers interested in using +this library will be interested in this description. + +* Menu: + +* Interface to gettext:: The interface +* Ambiguities:: Solving ambiguities +* Locating Catalogs:: Locating message catalog files +* Optimized gettext:: Optimization of the *gettext functions + + +File: gettext.info, Node: Interface to gettext, Next: Ambiguities, Prev: gettext, Up: gettext + +The Interface +------------- + + The minimal functionality an interface must have is a) to select a +domain the strings are coming from (a single domain for all programs is +not reasonable because its construction and maintenance is difficult, +perhaps impossible) and b) to access a string in a selected domain. + + This is principally the description of the `gettext' interface. It +has an global domain which unqualified usages reference. Of course this +domain is selectable by the user. + + char *textdomain (const char *domain_name); + + This provides the possibility to change or query the current status +of the current global domain of the `LC_MESSAGE' category. The +argument is a null-terminated string, whose characters must be legal in +the use in filenames. If the DOMAIN_NAME argument is `NULL', the +function return the current value. If no value has been set before, +the name of the default domain is returned: *messages*. Please note +that although the return value of `textdomain' is of type `char *' no +changing is allowed. It is also important to know that no checks of +the availability are made. If the name is not available you will see +this by the fact that no translations are provided. + +To use a domain set by `textdomain' the function + + char *gettext (const char *msgid); + + is to be used. This is the simplest reasonable form one can imagine. +The translation of the string MSGID is returned if it is available in +the current domain. If not available the argument itself is returned. +If the argument is `NULL' the result is undefined. + + One things which should come into mind is that no explicit +dependency to the used domain is given. The current value of the +domain for the `LC_MESSAGES' locale is used. If this changes between +two executions of the same `gettext' call in the program, both calls +reference a different message catalog. + + For the easiest case, which is normally used in internationalized +packages, once at the beginning of execution a call to `textdomain' is +issued, setting the domain to a unique name, normally the package name. +In the following code all strings which have to be translated are +filtered through the gettext function. That's all, the package speaks +your language. + + +File: gettext.info, Node: Ambiguities, Next: Locating Catalogs, Prev: Interface to gettext, Up: gettext + +Solving Ambiguities +------------------- + + While this single name domain work good for most applications there +might be the need to get translations from more than one domain. Of +course one could switch between different domains with calls to +`textdomain', but this is really not convenient nor is it fast. A +possible situation could be one case discussing while this writing: all +error messages of functions in the set of common used functions should +go into a separate domain `error'. By this mean we would only need to +translate them once. + +For this reasons there are two more functions to retrieve strings: + + char *dgettext (const char *domain_name, const char *msgid); + char *dcgettext (const char *domain_name, const char *msgid, + int category); + + Both take an additional argument at the first place, which +corresponds to the argument of `textdomain'. The third argument of +`dcgettext' allows to use another locale but `LC_MESSAGES'. But I +really don't know where this can be useful. If the DOMAIN_NAME is +`NULL' or CATEGORY has an value beside the known ones, the result is +undefined. It should also be noted that this function is not part of +the second known implementation of this function family, the one found +in Solaris. + + A second ambiguity can arise by the fact, that perhaps more than one +domain has the same name. This can be solved by specifying where the +needed message catalog files can be found. + + char *bindtextdomain (const char *domain_name, + const char *dir_name); + + Calling this function binds the given domain to a file in the +specified directory (how this file is determined follows below). +Especially a file in the systems default place is not favored against +the specified file anymore (as it would be by solely using +`textdomain'). A `NULL' pointer for the DIR_NAME parameter returns the +binding associated with DOMAIN_NAME. If DOMAIN_NAME itself is `NULL' +nothing happens and a `NULL' pointer is returned. Here again as for +all the other functions is true that none of the return value must be +changed! + + It is important to remember that relative path names for the +DIR_NAME parameter can be trouble. Since the path is always computed +relative to the current directory different results will be achieved +when the program executes a `chdir' command. Relative paths should +always be avoided to avoid dependencies and unreliabilities. + + +File: gettext.info, Node: Locating Catalogs, Next: Optimized gettext, Prev: Ambiguities, Up: gettext + +Locating Message Catalog Files +------------------------------ + + Because many different languages for many different packages have to +be stored we need some way to add these information to file message +catalog files. The way usually used in Unix environments is have this +encoding in the file name. This is also done here. The directory name +given in `bindtextdomain's second argument (or the default directory), +followed by the value and name of the locale and the domain name are +concatenated: + + DIR_NAME/LOCALE/LC_CATEGORY/DOMAIN_NAME.mo + + The default value for DIR_NAME is system specific. For the GNU +library, and for packages adhering to its conventions, it's: + /usr/local/share/locale + +LOCALE is the value of the locale whose name is this `LC_CATEGORY'. +For `gettext' and `dgettext' this locale is always `LC_MESSAGES'. +`dcgettext' specifies the locale by the third argument.(1) (2) + + ---------- Footnotes ---------- + + (1) Some system, eg Ultrix, don't have `LC_MESSAGES'. Here we use a +more or less arbitrary value for it. + + (2) When the system does not support `setlocale' its behavior in +setting the locale values is simulated by looking at the environment +variables. + diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info-4 b/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info-4 new file mode 100644 index 00000000..0b038c65 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info-4 @@ -0,0 +1,1110 @@ +This is Info file gettext.info, produced by Makeinfo version 1.68 from +the input file gettext.texi. + +INFO-DIR-SECTION GNU Gettext Utilities +START-INFO-DIR-ENTRY +* Gettext: (gettext). GNU gettext utilities. +* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. +* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. +* msgmerge: (gettext)msgmerge Invocation. Update two PO files into one. +* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. +END-INFO-DIR-ENTRY + + This file provides documentation for GNU `gettext' utilities. It +also serves as a reference for the free Translation Project. + + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Foundation. + + +File: gettext.info, Node: Optimized gettext, Prev: Locating Catalogs, Up: gettext + +Optimization of the *gettext functions +-------------------------------------- + + At this point of the discussion we should talk about an advantage of +the GNU `gettext' implementation. Some readers might have pointed out +that an internationalized program might have a poor performance if some +string has to be translated in an inner loop. While this is unavoidable +when the string varies from one run of the loop to the other it is +simply a waste of time when the string is always the same. Take the +following example: + + { + while (...) + { + puts (gettext ("Hello world")); + } + } + +When the locale selection does not change between two runs the resulting +string is always the same. One way to use this is: + + { + str = gettext ("Hello world"); + while (...) + { + puts (str); + } + } + +But this solution is not usable in all situation (e.g. when the locale +selection changes) nor is it good readable. + + The GNU C compiler, version 2.7 and above, provide another solution +for this. To describe this we show here some lines of the +`intl/libgettext.h' file. For an explanation of the expression command +block see *Note Statements and Declarations in Expressions: +(gcc)Statement Exprs. + + # if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7 + extern int _nl_msg_cat_cntr; + # define dcgettext(domainname, msgid, category) \ + (__extension__ \ + ({ \ + char *result; \ + if (__builtin_constant_p (msgid)) \ + { \ + static char *__translation__; \ + static int __catalog_counter__; \ + if (! __translation__ \ + || __catalog_counter__ != _nl_msg_cat_cntr) \ + { \ + __translation__ = \ + dcgettext__ ((domainname), (msgid), (category)); \ + __catalog_counter__ = _nl_msg_cat_cntr; \ + } \ + result = __translation__; \ + } \ + else \ + result = dcgettext__ ((domainname), (msgid), (category)); \ + result; \ + })) + # endif + + The interesting thing here is the `__builtin_constant_p' predicate. +This is evaluated at compile time and so optimization can take place +immediately. Here two cases are distinguished: the argument to +`gettext' is not a constant value in which case simply the function +`dcgettext__' is called, the real implementation of the `dcgettext' +function. + + If the string argument *is* constant we can reuse the once gained +translation when the locale selection has not changed. This is exactly +what is done here. The `_nl_msg_cat_cntr' variable is defined in the +`loadmsgcat.c' which is available in `libintl.a' and is changed +whenever a new message catalog is loaded. + + +File: gettext.info, Node: Comparison, Next: Using libintl.a, Prev: gettext, Up: Programmers + +Comparing the Two Interfaces +============================ + + The following discussion is perhaps a little bit colored. As said +above we implemented GNU `gettext' following the Uniforum proposal and +this surely has its reasons. But it should show how we came to this +decision. + + First we take a look at the developing process. When we write an +application using NLS provided by `gettext' we proceed as always. Only +when we come to a string which might be seen by the users and thus has +to be translated we use `gettext("...")' instead of `"..."'. At the +beginning of each source file (or in a central header file) we define + + #define gettext(String) (String) + + Even this definition can be avoided when the system supports the +`gettext' function in its C library. When we compile this code the +result is the same as if no NLS code is used. When you take a look at +the GNU `gettext' code you will see that we use `_("...")' instead of +`gettext("...")'. This reduces the number of additional characters per +translatable string to *3* (in words: three). + + When now a production version of the program is needed we simply +replace the definition + + #define _(String) (String) + +by + + #include <libintl.h> + #define _(String) gettext (String) + +Additionally we run the program `xgettext' on all source code file +which contain translatable strings and that's it: we have a running +program which does not depend on translations to be available, but which +can use any that becomes available. + + The same procedure can be done for the `gettext_noop' invocations +(*note Special cases::.). First you can define `gettext_noop' to a +no-op macro and later use the definition from `libintl.h'. Because +this name is not used in Suns implementation of `libintl.h', you should +consider the following code for your project: + + #ifdef gettext_noop + # define N_(String) gettext_noop (String) + #else + # define N_(String) (String) + #endif + + `N_' is a short form similar to `_'. The `Makefile' in the `po/' +directory of GNU gettext knows by default both of the mentioned short +forms so you are invited to follow this proposal for your own ease. + + Now to `catgets'. The main problem is the work for the programmer. +Every time he comes to a translatable string he has to define a number +(or a symbolic constant) which has also be defined in the message +catalog file. He also has to take care for duplicate entries, +duplicate message IDs etc. If he wants to have the same quality in the +message catalog as the GNU `gettext' program provides he also has to +put the descriptive comments for the strings and the location in all +source code files in the message catalog. This is nearly a Mission: +Impossible. + + But there are also some points people might call advantages speaking +for `catgets'. If you have a single word in a string and this string +is used in different contexts it is likely that in one or the other +language the word has different translations. Example: + + printf ("%s: %d", gettext ("number"), number_of_errors) + + printf ("you should see %d %s", number_count, + number_count == 1 ? gettext ("number") : gettext ("numbers")) + + Here we have to translate two times the string `"number"'. Even if +you do not speak a language beside English it might be possible to +recognize that the two words have a different meaning. In German the +first appearance has to be translated to `"Anzahl"' and the second to +`"Zahl"'. + + Now you can say that this example is really esoteric. And you are +right! This is exactly how we felt about this problem and decide that +it does not weight that much. The solution for the above problem could +be very easy: + + printf ("%s %d", gettext ("number:"), number_of_errors) + + printf (number_count == 1 ? gettext ("you should see %d number") + : gettext ("you should see %d numbers"), + number_count) + + We believe that we can solve all conflicts with this method. If it +is difficult one can also consider changing one of the conflicting +string a little bit. But it is not impossible to overcome. + + Translator note: It is perhaps appropriate here to tell those English +speaking programmers that the plural form of a noun cannot be formed by +appending a single `s'. Most other languages use different methods. +Even the above form is not general enough to cope with all languages. +Rafal Maszkowski <[email protected]> reports: + + In Polish we use e.g. plik (file) this way: + 1 plik + 2,3,4 pliki + 5-21 pliko'w + 22-24 pliki + 25-31 pliko'w + and so on (o' means 8859-2 oacute which should be rather okreska, + similar to aogonek). + + A workable approach might be to consider methods like the one used +for `LC_TIME' in the POSIX.2 standard. The value of the `alt_digits' +field can be up to 100 strings which represent the numbers 1 to 100. +Using this in a situation of an internationalized program means that an +array of translatable strings should be indexed by the number which +should represent. A small example: + + void + print_month_info (int month) + { + const char *month_pos[12] = + { N_("first"), N_("second"), N_("third"), N_("fourth"), + N_("fifth"), N_("sixth"), N_("seventh"), N_("eighth"), + N_("ninth"), N_("tenth"), N_("eleventh"), N_("twelfth") }; + printf (_("%s is the %s month\n"), nl_langinfo (MON_1 + month), + _(month_pos[month])); + } + +It should be obvious that this method is only reasonable for small +ranges of numbers. + + +File: gettext.info, Node: Using libintl.a, Next: gettext grok, Prev: Comparison, Up: Programmers + +Using libintl.a in own programs +=============================== + + Starting with version 0.9.4 the library `libintl.h' should be +self-contained. I.e., you can use it in your own programs without +providing additional functions. The `Makefile' will put the header and +the library in directories selected using the `$(prefix)'. + + One exception of the above is found on HP-UX systems. Here the C +library does not contain the `alloca' function (and the HP compiler does +not generate it inlined). But it is not intended to rewrite the whole +library just because of this dumb system. Instead include the `alloca' +function in all package you use the `libintl.a' in. + + +File: gettext.info, Node: gettext grok, Next: Temp Programmers, Prev: Using libintl.a, Up: Programmers + +Being a `gettext' grok +====================== + + To fully exploit the functionality of the GNU `gettext' library it +is surely helpful to read the source code. But for those who don't want +to spend that much time in reading the (sometimes complicated) code here +is a list comments: + + * Changing the language at runtime + + For interactive programs it might be useful to offer a selection + of the used language at runtime. To understand how to do this one + need to know how the used language is determined while executing + the `gettext' function. The method which is presented here only + works correctly with the GNU implementation of the `gettext' + functions. It is not possible with underlying `catgets' functions + or `gettext' functions from the systems C library. The exception + is of course the GNU C Library which uses the GNU `gettext' + Library for message handling. + + In the function `dcgettext' at every call the current setting of + the highest priority environment variable is determined and used. + Highest priority means here the following list with decreasing + priority: + + 1. `LANGUAGE' + + 2. `LC_ALL' + + 3. `LC_xxx', according to selected locale + + 4. `LANG' + + Afterwards the path is constructed using the found value and the + translation file is loaded if available. + + What is now when the value for, say, `LANGUAGE' changes. According + to the process explained above the new value of this variable is + found as soon as the `dcgettext' function is called. But this + also means the (perhaps) different message catalog file is loaded. + In other words: the used language is changed. + + But there is one little hook. The code for gcc-2.7.0 and up + provides some optimization. This optimization normally prevents + the calling of the `dcgettext' function as long as no new catalog + is loaded. But if `dcgettext' is not called the program also + cannot find the `LANGUAGE' variable be changed (*note Optimized + gettext::.). A solution for this is very easy. Include the + following code in the language switching function. + + /* Change language. */ + setenv ("LANGUAGE", "fr", 1); + + /* Make change known. */ + { + extern int _nl_msg_cat_cntr; + ++_nl_msg_cat_cntr; + } + + The variable `_nl_msg_cat_cntr' is defined in `loadmsgcat.c'. The + programmer will find himself in need for a construct like this only + when developing programs which do run longer and provide the user + to select the language at runtime. Non-interactive programs (like + all these little Unix tools) should never need this. + + +File: gettext.info, Node: Temp Programmers, Prev: gettext grok, Up: Programmers + +Temporary Notes for the Programmers Chapter +=========================================== + +* Menu: + +* Temp Implementations:: Temporary - Two Possible Implementations +* Temp catgets:: Temporary - About `catgets' +* Temp WSI:: Temporary - Why a single implementation +* Temp Notes:: Temporary - Notes + + +File: gettext.info, Node: Temp Implementations, Next: Temp catgets, Prev: Temp Programmers, Up: Temp Programmers + +Temporary - Two Possible Implementations +---------------------------------------- + + There are two competing methods for language independent messages: +the X/Open `catgets' method, and the Uniforum `gettext' method. The +`catgets' method indexes messages by integers; the `gettext' method +indexes them by their English translations. The `catgets' method has +been around longer and is supported by more vendors. The `gettext' +method is supported by Sun, and it has been heard that the COSE +multi-vendor initiative is supporting it. Neither method is a POSIX +standard; the POSIX.1 committee had a lot of disagreement in this area. + + Neither one is in the POSIX standard. There was much disagreement +in the POSIX.1 committee about using the `gettext' routines vs. +`catgets' (XPG). In the end the committee couldn't agree on anything, +so no messaging system was included as part of the standard. I believe +the informative annex of the standard includes the XPG3 messaging +interfaces, "...as an example of a messaging system that has been +implemented..." + + They were very careful not to say anywhere that you should use one +set of interfaces over the other. For more on this topic please see +the Programming for Internationalization FAQ. + + +File: gettext.info, Node: Temp catgets, Next: Temp WSI, Prev: Temp Implementations, Up: Temp Programmers + +Temporary - About `catgets' +--------------------------- + + There have been a few discussions of late on the use of `catgets' as +a base. I think it important to present both sides of the argument and +hence am opting to play devil's advocate for a little bit. + + I'll not deny the fact that `catgets' could have been designed a lot +better. It currently has quite a number of limitations and these have +already been pointed out. + + However there is a great deal to be said for consistency and +standardization. A common recurring problem when writing Unix software +is the myriad portability problems across Unix platforms. It seems as +if every Unix vendor had a look at the operating system and found parts +they could improve upon. Undoubtedly, these modifications are probably +innovative and solve real problems. However, software developers have +a hard time keeping up with all these changes across so many platforms. + + And this has prompted the Unix vendors to begin to standardize their +systems. Hence the impetus for Spec1170. Every major Unix vendor has +committed to supporting this standard and every Unix software developer +waits with glee the day they can write software to this standard and +simply recompile (without having to use autoconf) across different +platforms. + + As I understand it, Spec1170 is roughly based upon version 4 of the +X/Open Portability Guidelines (XPG4). Because `catgets' and friends +are defined in XPG4, I'm led to believe that `catgets' is a part of +Spec1170 and hence will become a standardized component of all Unix +systems. + + +File: gettext.info, Node: Temp WSI, Next: Temp Notes, Prev: Temp catgets, Up: Temp Programmers + +Temporary - Why a single implementation +--------------------------------------- + + Now it seems kind of wasteful to me to have two different systems +installed for accessing message catalogs. If we do want to remedy +`catgets' deficiencies why don't we try to expand `catgets' (in a +compatible manner) rather than implement an entirely new system. +Otherwise, we'll end up with two message catalog access systems +installed with an operating system - one set of routines for packages +using GNU `gettext' for their internationalization, and another set of +routines (catgets) for all other software. Bloated? + + Supposing another catalog access system is implemented. Which do we +recommend? At least for Linux, we need to attract as many software +developers as possible. Hence we need to make it as easy for them to +port their software as possible. Which means supporting `catgets'. We +will be implementing the `glocale' code within our `libc', but does +this mean we also have to incorporate another message catalog access +scheme within our `libc' as well? And what about people who are going +to be using the `glocale' + non-`catgets' routines. When they port +their software to other platforms, they're now going to have to include +the front-end (`glocale') code plus the back-end code (the non-`catgets' +access routines) with their software instead of just including the +`glocale' code with their software. + + Message catalog support is however only the tip of the iceberg. +What about the data for the other locale categories. They also have a +number of deficiencies. Are we going to abandon them as well and +develop another duplicate set of routines (should `glocale' expand +beyond message catalog support)? + + Like many parts of Unix that can be improved upon, we're stuck with +balancing compatibility with the past with useful improvements and +innovations for the future. + + +File: gettext.info, Node: Temp Notes, Prev: Temp WSI, Up: Temp Programmers + +Temporary - Notes +----------------- + + X/Open agreed very late on the standard form so that many +implementations differ from the final form. Both of my system (old +Linux catgets and Ultrix-4) have a strange variation. + + OK. After incorporating the last changes I have to spend some time +on making the GNU/Linux `libc' `gettext' functions. So in future +Solaris is not the only system having `gettext'. + + +File: gettext.info, Node: Translators, Next: Maintainers, Prev: Programmers, Up: Top + +The Translator's View +********************* + +* Menu: + +* Trans Intro 0:: Introduction 0 +* Trans Intro 1:: Introduction 1 +* Discussions:: Discussions +* Organization:: Organization +* Information Flow:: Information Flow + + +File: gettext.info, Node: Trans Intro 0, Next: Trans Intro 1, Prev: Translators, Up: Translators + +Introduction 0 +============== + + GNU is going international! The Translation Project is a way to get +maintainers, translators and users all together, so GNU will gradually +become able to speak many native languages. + + The GNU `gettext' tool set contains *everything* maintainers need +for internationalizing their packages for messages. It also contains +quite useful tools for helping translators at localizing messages to +their native language, once a package has already been +internationalized. + + To achieve the Translation Project, we need many interested people +who like their own language and write it well, and who are also able to +synergize with other translators speaking the same language. If you'd +like to volunteer to *work* at translating messages, please send mail +to your translating team. + + Each team has its own mailing list, courtesy of Linux International. +You may reach your translating team at the address `[email protected]', +replacing LL by the two-letter ISO 639 code for your language. +Language codes are *not* the same as country codes given in ISO 3166. +The following translating teams exist: + + Chinese `zh', Czech `cs', Danish `da', Dutch `nl', Esperanto `eo', + Finnish `fi', French `fr', Irish `ga', German `de', Greek `el', + Italian `it', Japanese `ja', Indonesian `in', Norwegian `no', + Polish `pl', Portuguese `pt', Russian `ru', Spanish `es', Swedish + `sv' and Turkish `tr'. + +For example, you may reach the Chinese translating team by writing to +`[email protected]'. When you become a member of the translating team for your +own language, you may subscribe to its list. For example, Swedish +people can send a message to `[email protected]', having this message +body: + + subscribe + + Keep in mind that team members should be interested in *working* at +translations, or at solving translational difficulties, rather than +merely lurking around. If your team does not exist yet and you want to +start one, please write to `[email protected]'; you will +then reach the GNU coordinator for all translator teams. + + A handful of GNU packages have already been adapted and provided +with message translations for several languages. Translation teams +have begun to organize, using these packages as a starting point. But +there are many more packages and many languages for which we have no +volunteer translators. If you would like to volunteer to work at +translating messages, please send mail to +`[email protected]' indicating what language(s) you can +work on. + + +File: gettext.info, Node: Trans Intro 1, Next: Discussions, Prev: Trans Intro 0, Up: Translators + +Introduction 1 +============== + + This is now official, GNU is going international! Here is the +announcement submitted for the January 1995 GNU Bulletin: + + A handful of GNU packages have already been adapted and provided + with message translations for several languages. Translation + teams have begun to organize, using these packages as a starting + point. But there are many more packages and many languages for + which we have no volunteer translators. If you'd like to + volunteer to work at translating messages, please send mail to + `[email protected]' indicating what language(s) you + can work on. + + This document should answer many questions for those who are curious +about the process or would like to contribute. Please at least skim +over it, hoping to cut down a little of the high volume of e-mail +generated by this collective effort towards GNU internationalization. + + Most free programming which is widely shared is done in English, and +currently, English is used as the main communicating language between +national communities collaborating to the GNU project. This very +document is written in English. This will not change in the +foreseeable future. + + However, there is a strong appetite from national communities for +having more software able to write using national language and habits, +and there is an on-going effort to modify GNU software in such a way +that it becomes able to do so. The experiments driven so far raised an +enthusiastic response from pretesters, so we believe that GNU +internationalization is dedicated to succeed. + + For suggestion clarifications, additions or corrections to this +document, please e-mail to `[email protected]'. + + +File: gettext.info, Node: Discussions, Next: Organization, Prev: Trans Intro 1, Up: Translators + +Discussions +=========== + + Facing this internationalization effort, a few users expressed their +concerns. Some of these doubts are presented and discussed, here. + + * Smaller groups + + Some languages are not spoken by a very large number of people, so + people speaking them sometimes consider that there may not be all + that much demand such versions of free software packages. + Moreover, many people being *into computers*, in some countries, + generally seem to prefer English versions of their software. + + On the other end, people might enjoy their own language a lot, and + be very motivated at providing to themselves the pleasure of + having their beloved free software speaking their mother tongue. + They do themselves a personal favor, and do not pay that much + attention to the number of people beneficiating of their work. + + * Misinterpretation + + Other users are shy to push forward their own language, seeing in + this some kind of misplaced propaganda. Someone thought there + must be some users of the language over the networks pestering + other people with it. + + But any spoken language is worth localization, because there are + people behind the language for whom the language is important and + dear to their hearts. + + * Odd translations + + The biggest problem is to find the right translations so that + everybody can understand the messages. Translations are usually a + little odd. Some people get used to English, to the extent they + may find translations into their own language "rather pushy, + obnoxious and sometimes even hilarious." As a French speaking + man, I have the experience of those instruction manuals for goods, + so poorly translated in French in Korea or Taiwan... + + The fact is that we sometimes have to create a kind of national + computer culture, and this is not easy without the collaboration of + many people liking their mother tongue. This is why translations + are better achieved by people knowing and loving their own + language, and ready to work together at improving the results they + obtain. + + * Dependencies over the GPL + + Some people wonder if using GNU `gettext' necessarily brings their + package under the protective wing of the GNU General Public + License, when they do not want to make their program free, or want + other kinds of freedom. The simplest answer is yes. + + The mere marking of localizable strings in a package, or + conditional inclusion of a few lines for initialization, is not + really including GPL'ed code. However, the localization routines + themselves are under the GPL and would bring the remainder of the + package under the GPL if they were distributed with it. So, I + presume that, for those for which this is a problem, it could be + circumvented by letting to the end installers the burden of + assembling a package prepared for localization, but not providing + the localization routines themselves. + + +File: gettext.info, Node: Organization, Next: Information Flow, Prev: Discussions, Up: Translators + +Organization +============ + + On a larger scale, the true solution would be to organize some kind +of fairly precise set up in which volunteers could participate. I gave +some thought to this idea lately, and realize there will be some touchy +points. I thought of writing to Richard Stallman to launch such a +project, but feel it might be good to shake out the ideas between +ourselves first. Most probably that Linux International has some +experience in the field already, or would like to orchestrate the +volunteer work, maybe. Food for thought, in any case! + + I guess we have to setup something early, somehow, that will help +many possible contributors of the same language to interlock and avoid +work duplication, and further be put in contact for solving together +problems particular to their tongue (in most languages, there are many +difficulties peculiar to translating technical English). My Swedish +contributor acknowledged these difficulties, and I'm well aware of them +for French. + + This is surely not a technical issue, but we should manage so the +effort of locale contributors be maximally useful, despite the national +team layer interface between contributors and maintainers. + + The Translation Project needs some setup for coordinating language +coordinators. Localizing evolving programs will surely become a +permanent and continuous activity in the free software community, once +well started. The setup should be minimally completed and tested +before GNU `gettext' becomes an official reality. The e-mail address +`[email protected]' has been setup for receiving offers from +volunteers and general e-mail on these topics. This address reaches +the Translation Project coordinator. + +* Menu: + +* Central Coordination:: Central Coordination +* National Teams:: National Teams +* Mailing Lists:: Mailing Lists + + +File: gettext.info, Node: Central Coordination, Next: National Teams, Prev: Organization, Up: Organization + +Central Coordination +-------------------- + + I also think GNU will need sooner than it thinks, that someone setup +a way to organize and coordinate these groups. Some kind of group of +groups. My opinion is that it would be good that GNU delegates this +task to a small group of collaborating volunteers, shortly. Perhaps in +`gnu.announce' a list of this national committee's can be published. + + My role as coordinator would simply be to refer to Ulrich any German +speaking volunteer interested to localization of free software +packages, and maybe helping national groups to initially organize, +while maintaining national registries for until national groups are +ready to take over. In fact, the coordinator should ease volunteers to +get in contact with one another for creating national teams, which +should then select one coordinator per language, or country +(regionalized language). If well done, the coordination should be +useful without being an overwhelming task, the time to put delegations +in place. + + +File: gettext.info, Node: National Teams, Next: Mailing Lists, Prev: Central Coordination, Up: Organization + +National Teams +-------------- + + I suggest we look for volunteer coordinators/editors for individual +languages. These people will scan contributions of translation files +for various programs, for their own languages, and will ensure high and +uniform standards of diction. + + From my current experience with other people in these days, those who +provide localizations are very enthusiastic about the process, and are +more interested in the localization process than in the program they +localize, and want to do many programs, not just one. This seems to +confirm that having a coordinator/editor for each language is a good +idea. + + We need to choose someone who is good at writing clear and concise +prose in the language in question. That is hard--we can't check it +ourselves. So we need to ask a few people to judge each others' +writing and select the one who is best. + + I announce my prerelease to a few dozen people, and you would not +believe all the discussions it generated already. I shudder to think +what will happen when this will be launched, for true, officially, +world wide. Who am I to arbitrate between two Czekolsovak users +contradicting each other, for example? + + I assume that your German is not much better than my French so that +I would not be able to judge about these formulations. What I would +suggest is that for each language there is a group for people who +maintain the PO files and judge about changes. I suspect there will be +cultural differences between how such groups of people will behave. +Some will have relaxed ways, reach consensus easily, and have anyone of +the group relate to the maintainers, while others will fight to death, +organize heavy administrations up to national standards, and use strict +channels. + + The German team is putting out a good example. Right now, they are +maybe half a dozen people revising translations of each other and +discussing the linguistic issues. I do not even have all the names. +Ulrich Drepper is taking care of coordinating the German team. He +subscribed to all my pretest lists, so I do not even have to warn him +specifically of incoming releases. + + I'm sure, that is a good idea to get teams for each language working +on translations. That will make the translations better and more +consistent. + +* Menu: + +* Sub-Cultures:: Sub-Cultures +* Organizational Ideas:: Organizational Ideas + + +File: gettext.info, Node: Sub-Cultures, Next: Organizational Ideas, Prev: National Teams, Up: National Teams + +Sub-Cultures +............ + + Taking French for example, there are a few sub-cultures around +computers which developed diverging vocabularies. Picking volunteers +here and there without addressing this problem in an organized way, +soon in the project, might produce a distasteful mix of +internationalized programs, and possibly trigger endless quarrels among +those who really care. + + Keeping some kind of unity in the way French localization of +internationalized programs is achieved is a difficult (and delicate) +job. Knowing the latin character of French people (:-), if we take this +the wrong way, we could end up nowhere, or spoil a lot of energies. +Maybe we should begin to address this problem seriously *before* GNU +`gettext' become officially published. And I suspect that this means +soon! + + +File: gettext.info, Node: Organizational Ideas, Prev: Sub-Cultures, Up: National Teams + +Organizational Ideas +.................... + + I expect the next big changes after the official release. Please +note that I use the German translation of the short GPL message. We +need to set a few good examples before the localization goes out for +true in the free software community. Here are a few points to discuss: + + * Each group should have one FTP server (at least one master). + + * The files on the server should reflect the latest version (of + course!) and it should also contain a RCS directory with the + corresponding archives (I don't have this now). + + * There should also be a ChangeLog file (this is more useful than the + RCS archive but can be generated automatically from the later by + Emacs). + + * A "core group" should judge about questionable changes (for now + this group consists solely by me but I ask some others + occasionally; this also seems to work). + + +File: gettext.info, Node: Mailing Lists, Prev: National Teams, Up: Organization + +Mailing Lists +------------- + + If we get any inquiries about GNU `gettext', send them on to: + + + The `*-pretest' lists are quite useful to me, maybe the idea could +be generalized to many GNU, and non-GNU packages. But each maintainer +his/her way! + + Franc,ois, we have a mechanism in place here at `gnu.ai.mit.edu' to +track teams, support mailing lists for them and log members. We have a +slight preference that you use it. If this is OK with you, I can get +you clued in. + + Things are changing! A few years ago, when Daniel Fekete and I +asked for a mailing list for GNU localization, nested at the FSF, we +were politely invited to organize it anywhere else, and so did we. For +communicating with my pretesters, I later made a handful of mailing +lists located at iro.umontreal.ca and administrated by `majordomo'. +These lists have been *very* dependable so far... + + I suspect that the German team will organize itself a mailing list +located in Germany, and so forth for other countries. But before they +organize for true, it could surely be useful to offer mailing lists +located at the FSF to each national team. So yes, please explain me +how I should proceed to create and handle them. + + We should create temporary mailing lists, one per country, to help +people organize. Temporary, because once regrouped and structured, it +would be fair the volunteers from country bring back *their* list in +there and manage it as they want. My feeling is that, in the long run, +each team should run its own list, from within their country. There +also should be some central list to which all teams could subscribe as +they see fit, as long as each team is represented in it. + + +File: gettext.info, Node: Information Flow, Prev: Organization, Up: Translators + +Information Flow +================ + + There will surely be some discussion about this messages after the +packages are finally released. If people now send you some proposals +for better messages, how do you proceed? Jim, please note that right +now, as I put forward nearly a dozen of localizable programs, I receive +both the translations and the coordination concerns about them. + + If I put one of my things to pretest, Ulrich receives the +announcement and passes it on to the German team, who make last minute +revisions. Then he submits the translation files to me *as the +maintainer*. For free packages I do not maintain, I would not even +hear about it. This scheme could be made to work for the whole +Translation Project, I think. For security reasons, maybe Ulrich +(national coordinators, in fact) should update central registry kept at +the Translation Project (Jim, me, or Len's recruits) once in a while. + + In December/January, I was aggressively ready to internationalize +all of GNU, giving myself the duty of one small GNU package per week or +so, taking many weeks or months for bigger packages. But it does not +work this way. I first did all the things I'm responsible for. I've +nothing against some missionary work on other maintainers, but I'm also +loosing a lot of energy over it--same debates over again. + + And when the first localized packages are released we'll get a lot of +responses about ugly translations :-). Surely, and we need to have +beforehand a fairly good idea about how to handle the information flow +between the national teams and the package maintainers. + + Please start saving somewhere a quick history of each PO file. I +know for sure that the file format will change, allowing for comments. +It would be nice that each file has a kind of log, and references for +those who want to submit comments or gripes, or otherwise contribute. +I sent a proposal for a fast and flexible format, but it is not +receiving acceptance yet by the GNU deciders. I'll tell you when I +have more information about this. + + +File: gettext.info, Node: Maintainers, Next: Conclusion, Prev: Translators, Up: Top + +The Maintainer's View +********************* + + The maintainer of a package has many responsibilities. One of them +is ensuring that the package will install easily on many platforms, and +that the magic we described earlier (*note Users::.) will work for +installers and end users. + + Of course, there are many possible ways by which GNU `gettext' might +be integrated in a distribution, and this chapter does not cover them +in all generality. Instead, it details one possible approach which is +especially adequate for many free software distributions following GNU +standards, or even better, Gnits standards, because GNU `gettext' is +purposely for helping the internationalization of the whole GNU +project, and as many other good free packages as possible. So, the +maintainer's view presented here presumes that the package already has +a `configure.in' file and uses GNU Autoconf. + + Nevertheless, GNU `gettext' may surely be useful for free packages +not following GNU standards and conventions, but the maintainers of such +packages might have to show imagination and initiative in organizing +their distributions so `gettext' work for them in all situations. +There are surely many, out there. + + Even if `gettext' methods are now stabilizing, slight adjustments +might be needed between successive `gettext' versions, so you should +ideally revise this chapter in subsequent releases, looking for changes. + +* Menu: + +* Flat and Non-Flat:: Flat or Non-Flat Directory Structures +* Prerequisites:: Prerequisite Works +* gettextize Invocation:: Invoking the `gettextize' Program +* Adjusting Files:: Files You Must Create or Alter + + +File: gettext.info, Node: Flat and Non-Flat, Next: Prerequisites, Prev: Maintainers, Up: Maintainers + +Flat or Non-Flat Directory Structures +===================================== + + Some free software packages are distributed as `tar' files which +unpack in a single directory, these are said to be "flat" distributions. +Other free software packages have a one level hierarchy of +subdirectories, using for example a subdirectory named `doc/' for the +Texinfo manual and man pages, another called `lib/' for holding +functions meant to replace or complement C libraries, and a +subdirectory `src/' for holding the proper sources for the package. +These other distributions are said to be "non-flat". + + For now, we cannot say much about flat distributions. A flat +directory structure has the disadvantage of increasing the difficulty +of updating to a new version of GNU `gettext'. Also, if you have many +PO files, this could somewhat pollute your single directory. In the +GNU `gettext' distribution, the `misc/' directory contains a shell +script named `combine-sh'. That script may be used for combining all +the C files of the `intl/' directory into a pair of C files (one `.c' +and one `.h'). Those two generated files would fit more easily in a +flat directory structure, and you will then have to add these two files +to your project. + + Maybe because GNU `gettext' itself has a non-flat structure, we have +more experience with this approach, and this is what will be described +in the remaining of this chapter. Some maintainers might use this as +an opportunity to unflatten their package structure. Only later, once +gained more experience adapting GNU `gettext' to flat distributions, we +might add some notes about how to proceed in flat situations. + + +File: gettext.info, Node: Prerequisites, Next: gettextize Invocation, Prev: Flat and Non-Flat, Up: Maintainers + +Prerequisite Works +================== + + There are some works which are required for using GNU `gettext' in +one of your package. These works have some kind of generality that +escape the point by point descriptions used in the remainder of this +chapter. So, we describe them here. + + * Before attempting to use you should install some other packages + first. Ensure that recent versions of GNU `m4', GNU Autoconf and + GNU `gettext' are already installed at your site, and if not, + proceed to do this first. If you got to install these things, + beware that GNU `m4' must be fully installed before GNU Autoconf + is even *configured*. + + To further ease the task of a package maintainer the `automake' + package was designed and implemented. GNU `gettext' now uses this + tool and the `Makefile's in the `intl/' and `po/' therefore know + about all the goals necessary for using `automake' and `libintl' + in one project. + + Those four packages are only needed to you, as a maintainer; the + installers of your own package and end users do not really need + any of GNU `m4', GNU Autoconf, GNU `gettext', or GNU `automake' + for successfully installing and running your package, with messages + properly translated. But this is not completely true if you + provide internationalized shell scripts within your own package: + GNU `gettext' shall then be installed at the user site if the end + users want to see the translation of shell script messages. + + * Your package should use Autoconf and have a `configure.in' file. + If it does not, you have to learn how. The Autoconf documentation + is quite well written, it is a good idea that you print it and get + familiar with it. + + * Your C sources should have already been modified according to + instructions given earlier in this manual. *Note Sources::. + + * Your `po/' directory should receive all PO files submitted to you + by the translator teams, each having `LL.po' as a name. This is + not usually easy to get translation work done before your package + gets internationalized and available! Since the cycle has to + start somewhere, the easiest for the maintainer is to start with + absolutely no PO files, and wait until various translator teams + get interested in your package, and submit PO files. + + It is worth adding here a few words about how the maintainer should +ideally behave with PO files submissions. As a maintainer, your role is +to authentify the origin of the submission as being the representative +of the appropriate translating teams of the Translation Project (forward +the submission to `[email protected]' in case of doubt), to +ensure that the PO file format is not severely broken and does not +prevent successful installation, and for the rest, to merely to put +these PO files in `po/' for distribution. + + As a maintainer, you do not have to take on your shoulders the +responsibility of checking if the translations are adequate or +complete, and should avoid diving into linguistic matters. Translation +teams drive themselves and are fully responsible of their linguistic +choices for the Translation Project. Keep in mind that translator +teams are *not* driven by maintainers. You can help by carefully +redirecting all communications and reports from users about linguistic +matters to the appropriate translation team, or explain users how to +reach or join their team. The simplest might be to send them the +`ABOUT-NLS' file. + + Maintainers should *never ever* apply PO file bug reports +themselves, short-cutting translation teams. If some translator has +difficulty to get some of her points through her team, it should not be +an issue for her to directly negotiate translations with maintainers. +Teams ought to settle their problems themselves, if any. If you, as a +maintainer, ever think there is a real problem with a team, please +never try to *solve* a team's problem on your own. + + +File: gettext.info, Node: gettextize Invocation, Next: Adjusting Files, Prev: Prerequisites, Up: Maintainers + +Invoking the `gettextize' Program +================================= + + Some files are consistently and identically needed in every package +internationalized through GNU `gettext'. As a matter of convenience, +the `gettextize' program puts all these files right in your package. +This program has the following synopsis: + + gettextize [ OPTION... ] [ DIRECTORY ] + +and accepts the following options: + +`-c' +`--copy' + Copy the needed files instead of making symbolic links. Using + links would allow the package to always use the latest `gettext' + code available on the system, but it might disturb some mechanism + the maintainer is used to apply to the sources. Because running + `gettextize' is easy there shouldn't be problems with using copies. + +`-f' +`--force' + Force replacement of files which already exist. + +`-h' +`--help' + Display this help and exit. + +`--version' + Output version information and exit. + + If DIRECTORY is given, this is the top level directory of a package +to prepare for using GNU `gettext'. If not given, it is assumed that +the current directory is the top level directory of such a package. + + The program `gettextize' provides the following files. However, no +existing file will be replaced unless the option `--force' (`-f') is +specified. + + 1. The `ABOUT-NLS' file is copied in the main directory of your + package, the one being at the top level. This file gives the main + indications about how to install and use the Native Language + Support features of your program. You might elect to use a more + recent copy of this `ABOUT-NLS' file than the one provided through + `gettextize', if you have one handy. You may also fetch a more + recent copy of file `ABOUT-NLS' from Translation Project sites, + and from most GNU archive sites. + + 2. A `po/' directory is created for eventually holding all + translation files, but initially only containing the file + `po/Makefile.in.in' from the GNU `gettext' distribution. (beware + the double `.in' in the file name). If the `po/' directory already + exists, it will be preserved along with the files it contains, and + only `Makefile.in.in' will be overwritten. + + 3. A `intl/' directory is created and filled with most of the files + originally in the `intl/' directory of the GNU `gettext' + distribution. Also, if option `--force' (`-f') is given, the + `intl/' directory is emptied first. + + + If your site support symbolic links, `gettextize' will not actually +copy the files into your package, but establish symbolic links instead. +This avoids duplicating the disk space needed in all packages. Merely +using the `-h' option while creating the `tar' archive of your +distribution will resolve each link by an actual copy in the +distribution archive. So, to insist, you really should use `-h' option +with `tar' within your `dist' goal of your main `Makefile.in'. + + It is interesting to understand that most new files for supporting +GNU `gettext' facilities in one package go in `intl/' and `po/' +subdirectories. One distinction between these two directories is that +`intl/' is meant to be completely identical in all packages using GNU +`gettext', while all newly created files, which have to be different, +go into `po/'. There is a common `Makefile.in.in' in `po/', because +the `po/' directory needs its own `Makefile', and it has been designed +so it can be identical in all packages. + diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info-5 b/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info-5 new file mode 100644 index 00000000..94d25bed --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.info-5 @@ -0,0 +1,852 @@ +This is Info file gettext.info, produced by Makeinfo version 1.68 from +the input file gettext.texi. + +INFO-DIR-SECTION GNU Gettext Utilities +START-INFO-DIR-ENTRY +* Gettext: (gettext). GNU gettext utilities. +* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. +* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. +* msgmerge: (gettext)msgmerge Invocation. Update two PO files into one. +* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. +END-INFO-DIR-ENTRY + + This file provides documentation for GNU `gettext' utilities. It +also serves as a reference for the free Translation Project. + + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided that +the entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Foundation. + + +File: gettext.info, Node: Adjusting Files, Prev: gettextize Invocation, Up: Maintainers + +Files You Must Create or Alter +============================== + + Besides files which are automatically added through `gettextize', +there are many files needing revision for properly interacting with GNU +`gettext'. If you are closely following GNU standards for Makefile +engineering and auto-configuration, the adaptations should be easier to +achieve. Here is a point by point description of the changes needed in +each. + + So, here comes a list of files, each one followed by a description of +all alterations it needs. Many examples are taken out from the GNU +`gettext' 0.10.35 distribution itself. You may indeed refer to the +source code of the GNU `gettext' package, as it is intended to be a +good example and master implementation for using its own functionality. + +* Menu: + +* po/POTFILES.in:: `POTFILES.in' in `po/' +* configure.in:: `configure.in' at top level +* aclocal:: `aclocal.m4' at top level +* acconfig:: `acconfig.h' at top level +* Makefile:: `Makefile.in' at top level +* src/Makefile:: `Makefile.in' in `src/' + + +File: gettext.info, Node: po/POTFILES.in, Next: configure.in, Prev: Adjusting Files, Up: Adjusting Files + +`POTFILES.in' in `po/' +---------------------- + + The `po/' directory should receive a file named `POTFILES.in'. This +file tells which files, among all program sources, have marked strings +needing translation. Here is an example of such a file: + + # List of source files containing translatable strings. + # Copyright (C) 1995 Free Software Foundation, Inc. + + # Common library files + lib/error.c + lib/getopt.c + lib/xmalloc.c + + # Package source files + src/gettextp.c + src/msgfmt.c + src/xgettext.c + +Dashed comments and white lines are ignored. All other lines list +those source files containing strings marked for translation (*note +Mark Keywords::.), in a notation relative to the top level of your +whole distribution, rather than the location of the `POTFILES.in' file +itself. + + +File: gettext.info, Node: configure.in, Next: aclocal, Prev: po/POTFILES.in, Up: Adjusting Files + +`configure.in' at top level +--------------------------- + + 1. Declare the package and version. + + This is done by a set of lines like these: + + PACKAGE=gettext + VERSION=0.10.35 + AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE") + AC_DEFINE_UNQUOTED(VERSION, "$VERSION") + AC_SUBST(PACKAGE) + AC_SUBST(VERSION) + + Of course, you replace `gettext' with the name of your package, + and `0.10.35' by its version numbers, exactly as they should + appear in the packaged `tar' file name of your distribution + (`gettext-0.10.35.tar.gz', here). + + 2. Declare the available translations. + + This is done by defining `ALL_LINGUAS' to the white separated, + quoted list of available languages, in a single line, like this: + + ALL_LINGUAS="de fr" + + This example means that German and French PO files are available, + so that these languages are currently supported by your package. + If you want to further restrict, at installation time, the set of + installed languages, this should not be done by modifying + `ALL_LINGUAS' in `configure.in', but rather by using the `LINGUAS' + environment variable (*note Installers::.). + + 3. Check for internationalization support. + + Here is the main `m4' macro for triggering internationalization + support. Just add this line to `configure.in': + + AM_GNU_GETTEXT + + This call is purposely simple, even if it generates a lot of + configure time checking and actions. + + 4. Have output files created. + + The `AC_OUTPUT' directive, at the end of your `configure.in' file, + needs to be modified in two ways: + + AC_OUTPUT([EXISTING CONFIGURATION FILES intl/Makefile po/Makefile.in], + EXISTING ADDITIONAL ACTIONS]) + + The modification to the first argument to `AC_OUTPUT' asks for + substitution in the `intl/' and `po/' directories. Note the `.in' + suffix used for `po/' only. This is because the distributed file + is really `po/Makefile.in.in'. + + + +File: gettext.info, Node: aclocal, Next: acconfig, Prev: configure.in, Up: Adjusting Files + +`aclocal.m4' at top level +------------------------- + + If you do not have an `aclocal.m4' file in your distribution, the +simplest is taking a copy of `aclocal.m4' from GNU `gettext'. But to +be precise, you only need macros `AM_LC_MESSAGES', `AM_WITH_NLS' and +`AM_GNU_GETTEXT', and `AM_PATH_PROG_WITH_TEST', which is called by +`AM_WITH_NLS', so you may use an editor and remove macros you do not +need. + + If you already have an `aclocal.m4' file, then you will have to +merge the said macros into your `aclocal.m4'. Note that if you are +upgrading from a previous release of GNU `gettext', you should most +probably *replace* the said macros, as they usually change a little +from one release of GNU `gettext' to the next. Their contents may vary +as we get more experience with strange systems out there. + + These macros check for the internationalization support functions +and related informations. Hopefully, once stabilized, these macros +might be integrated in the standard Autoconf set, because this piece of +`m4' code will be the same for all projects using GNU `gettext'. + + +File: gettext.info, Node: acconfig, Next: Makefile, Prev: aclocal, Up: Adjusting Files + +`acconfig.h' at top level +------------------------- + + If you do not have an `acconfig.h' file in your distribution, the +simplest is use take a copy of `acconfig.h' from GNU `gettext'. But to +be precise, you only need the lines and comments for `ENABLE_NLS', +`HAVE_CATGETS', `HAVE_GETTEXT' and `HAVE_LC_MESSAGES', `HAVE_STPCPY', +`PACKAGE' and `VERSION', so you may use an editor and remove everything +else. If you already have an `acconfig.h' file, then you should merge +the said definitions into your `acconfig.h'. + + +File: gettext.info, Node: Makefile, Next: src/Makefile, Prev: acconfig, Up: Adjusting Files + +`Makefile.in' at top level +-------------------------- + + Here are a few modifications you need to make to your main, top-level +`Makefile.in' file. + + 1. Add the following lines near the beginning of your `Makefile.in', + so the `dist:' goal will work properly (as explained further down): + + PACKAGE = @PACKAGE@ + VERSION = @VERSION@ + + 2. Add file `ABOUT-NLS' to the `DISTFILES' definition, so the file + gets distributed. + + 3. Wherever you process subdirectories in your `Makefile.in', be sure + you also process dir subdirectories `intl' and `po'. Special + rules in the `Makefiles' take care for the case where no + internationalization is wanted. + + If you are using Makefiles, either generated by automake, or + hand-written so they carefully follow the GNU coding standards, + the effected goals for which the new subdirectories must be + handled include `installdirs', `install', `uninstall', `clean', + `distclean'. + + Here is an example of a canonical order of processing. In this + example, we also define `SUBDIRS' in `Makefile.in' for it to be + further used in the `dist:' goal. + + SUBDIRS = doc lib @INTLSUB@ src @POSUB@ + + that you will have to adapt to your own package. + + 4. A delicate point is the `dist:' goal, as both `intl/Makefile' and + `po/Makefile' will later assume that the proper directory has been + set up from the main `Makefile'. Here is an example at what the + `dist:' goal might look like: + + distdir = $(PACKAGE)-$(VERSION) + dist: Makefile + rm -fr $(distdir) + mkdir $(distdir) + chmod 777 $(distdir) + for file in $(DISTFILES); do \ + ln $$file $(distdir) 2>/dev/null || cp -p $$file $(distdir); \ + done + for subdir in $(SUBDIRS); do \ + mkdir $(distdir)/$$subdir || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $@) || exit 1; \ + done + tar chozf $(distdir).tar.gz $(distdir) + rm -fr $(distdir) + + + +File: gettext.info, Node: src/Makefile, Prev: Makefile, Up: Adjusting Files + +`Makefile.in' in `src/' +----------------------- + + Some of the modifications made in the main `Makefile.in' will also +be needed in the `Makefile.in' from your package sources, which we +assume here to be in the `src/' subdirectory. Here are all the +modifications needed in `src/Makefile.in': + + 1. In view of the `dist:' goal, you should have these lines near the + beginning of `src/Makefile.in': + + PACKAGE = @PACKAGE@ + VERSION = @VERSION@ + + 2. If not done already, you should guarantee that `top_srcdir' gets + defined. This will serve for `cpp' include files. Just add the + line: + + top_srcdir = @top_srcdir@ + + 3. You might also want to define `subdir' as `src', later allowing + for almost uniform `dist:' goals in all your `Makefile.in'. At + list, the `dist:' goal below assume that you used: + + subdir = src + + 4. You should ensure that the final linking will use `@INTLLIBS@' as + a library. An easy way to achieve this is to manage that it gets + into `LIBS', like this: + + LIBS = @INTLLIBS@ @LIBS@ + + In most packages internationalized with GNU `gettext', one will + find a directory `lib/' in which a library containing some helper + functions will be build. (You need at least the few functions + which the GNU `gettext' Library itself needs.) However some of + the functions in the `lib/' also give messages to the user which + of course should be translated, too. Taking care of this it is + not enough to place the support library (say `libsupport.a') just + between the `@INTLLIBS@' and `@LIBS@' in the above example. + Instead one has to write this: + + LIBS = ../lib/libsupport.a @INTLLIBS@ ../lib/libsupport.a @LIBS@ + + 5. You should also ensure that directory `intl/' will be searched for + C preprocessor include files in all circumstances. So, you have to + manage so both `-I../intl' and `-I$(top_srcdir)/intl' will be + given to the C compiler. + + 6. Your `dist:' goal has to conform with others. Here is a + reasonable definition for it: + + distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) + dist: Makefile $(DISTFILES) + for file in $(DISTFILES); do \ + ln $$file $(distdir) 2>/dev/null || cp -p $$file $(distdir); \ + done + + + +File: gettext.info, Node: Conclusion, Next: Country Codes, Prev: Maintainers, Up: Top + +Concluding Remarks +****************** + + We would like to conclude this GNU `gettext' manual by presenting an +history of the Translation Project so far. We finally give a few +pointers for those who want to do further research or readings about +Native Language Support matters. + +* Menu: + +* History:: History of GNU `gettext' +* References:: Related Readings + + +File: gettext.info, Node: History, Next: References, Prev: Conclusion, Up: Conclusion + +History of GNU `gettext' +======================== + + Internationalization concerns and algorithms have been informally +and casually discussed for years in GNU, sometimes around GNU `libc', +maybe around the incoming `Hurd', or otherwise (nobody clearly +remembers). And even then, when the work started for real, this was +somewhat independently of these previous discussions. + + This all began in July 1994, when Patrick D'Cruze had the idea and +initiative of internationalizing version 3.9.2 of GNU `fileutils'. He +then asked Jim Meyering, the maintainer, how to get those changes +folded into an official release. That first draft was full of +`#ifdef's and somewhat disconcerting, and Jim wanted to find nicer +ways. Patrick and Jim shared some tries and experimentations in this +area. Then, feeling that this might eventually have a deeper impact on +GNU, Jim wanted to know what standards were, and contacted Richard +Stallman, who very quickly and verbally described an overall design for +what was meant to become `glocale', at that time. + + Jim implemented `glocale' and got a lot of exhausting feedback from +Patrick and Richard, of course, but also from Mitchum DSouza (who wrote +a `catgets'-like package), Roland McGrath, maybe David MacKenzie, +Franc,ois Pinard, and Paul Eggert, all pushing and pulling in various +directions, not always compatible, to the extent that after a couple of +test releases, `glocale' was torn apart. + + While Jim took some distance and time and became dad for a second +time, Roland wanted to get GNU `libc' internationalized, and got Ulrich +Drepper involved in that project. Instead of starting from `glocale', +Ulrich rewrote something from scratch, but more conformant to the set +of guidelines who emerged out of the `glocale' effort. Then, Ulrich +got people from the previous forum to involve themselves into this new +project, and the switch from `glocale' to what was first named +`msgutils', renamed `nlsutils', and later `gettext', became officially +accepted by Richard in May 1995 or so. + + Let's summarize by saying that Ulrich Drepper wrote GNU `gettext' in +April 1995. The first official release of the package, including PO +mode, occurred in July 1995, and was numbered 0.7. Other people +contributed to the effort by providing a discussion forum around +Ulrich, writing little pieces of code, or testing. These are quoted in +the `THANKS' file which comes with the GNU `gettext' distribution. + + While this was being done, Franc,ois adapted half a dozen of GNU +packages to `glocale' first, then later to `gettext', putting them in +pretest, so providing along the way an effective user environment for +fine tuning the evolving tools. He also took the responsibility of +organizing and coordinating the Translation Project. After nearly a +year of informal exchanges between people from many countries, +translator teams started to exist in May 1995, through the creation and +support by Patrick D'Cruze of twenty unmoderated mailing lists for that +many native languages, and two moderated lists: one for reaching all +teams at once, the other for reaching all willing maintainers of +internationalized free software packages. + + Franc,ois also wrote PO mode in June 1995 with the collaboration of +Greg McGary, as a kind of contribution to Ulrich's package. He also +gave a hand with the GNU `gettext' Texinfo manual. + + +File: gettext.info, Node: References, Prev: History, Up: Conclusion + +Related Readings +================ + + Eugene H. Dorr (`[email protected]') maintains an interesting +bibliography on internationalization matters, called +`Internationalization Reference List', which is available as: + ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/i18n-books.txt + + Michael Gschwind (`[email protected]') maintains a +Frequently Asked Questions (FAQ) list, entitled `Programming for +Internationalisation'. This FAQ discusses writing programs which can +handle different language conventions, character sets, etc.; and is +applicable to all character set encodings, with particular emphasis on +ISO 8859-1. It is regularly published in Usenet groups +`comp.unix.questions', `comp.std.internat', +`comp.software.international', `comp.lang.c', `comp.windows.x', +`comp.std.c', `comp.answers' and `news.answers'. The home location of +this document is: + ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit/ISO-programming + + Patrick D'Cruze (`[email protected]') wrote a tutorial about NLS +matters, and Jochen Hein (`[email protected]') took over the +responsibility of maintaining it. It may be found as: + ftp://sunsite.unc.edu/pub/Linux/utils/nls/catalogs/Incoming/... + ...locale-tutorial-0.8.txt.gz + +This site is mirrored in: + ftp://ftp.ibp.fr/pub/linux/sunsite/ + + A French version of the same tutorial should be findable at: + ftp://ftp.ibp.fr/pub/linux/french/docs/ + +together with French translations of many Linux-related documents. + + +File: gettext.info, Node: Country Codes, Prev: Conclusion, Up: Top + +Country Codes +************* + + The ISO 639 standard defines two character codes for many countries. +All abreviations for countries or languages used in the Translation +Project should come from this standard. + +`aa' + Afar. + +`ab' + Abkhazian. + +`af' + Afrikaans. + +`am' + Amharic. + +`ar' + Arabic. + +`as' + Assamese. + +`ay' + Aymara. + +`az' + Azerbaijani. + +`ba' + Bashkir. + +`be' + Byelorussian. + +`bg' + Bulgarian. + +`bh' + Bihari. + +`bi' + Bislama. + +`bn' + Bengali; Bangla. + +`bo' + Tibetan. + +`br' + Breton. + +`ca' + Catalan. + +`co' + Corsican. + +`cs' + Czech. + +`cy' + Welsh. + +`da' + Danish. + +`de' + German. + +`dz' + Bhutani. + +`el' + Greek. + +`en' + English. + +`eo' + Esperanto. + +`es' + Spanish. + +`et' + Estonian. + +`eu' + Basque. + +`fa' + Persian. + +`fi' + Finnish. + +`fj' + Fiji. + +`fo' + Faroese. + +`fr' + French. + +`fy' + Frisian. + +`ga' + Irish. + +`gd' + Scots Gaelic. + +`gl' + Galician. + +`gn' + Guarani. + +`gu' + Gujarati. + +`ha' + Hausa. + +`he' + Hebrew (formerly iw). + +`hi' + Hindi. + +`hr' + Croatian. + +`hu' + Hungarian. + +`hy' + Armenian. + +`ia' + Interlingua. + +`id' + Indonesian (formerly in). + +`ie' + Interlingue. + +`ik' + Inupiak. + +`is' + Icelandic. + +`it' + Italian. + +`iu' + Inuktitut. + +`ja' + Japanese. + +`jw' + Javanese. + +`ka' + Georgian. + +`kk' + Kazakh. + +`kl' + Greenlandic. + +`km' + Cambodian. + +`kn' + Kannada. + +`ko' + Korean. + +`ks' + Kashmiri. + +`ku' + Kurdish. + +`ky' + Kirghiz. + +`la' + Latin. + +`ln' + Lingala. + +`lo' + Laothian. + +`lt' + Lithuanian. + +`lv' + Latvian, Lettish. + +`mg' + Malagasy. + +`mi' + Maori. + +`mk' + Macedonian. + +`ml' + Malayalam. + +`mn' + Mongolian. + +`mo' + Moldavian. + +`mr' + Marathi. + +`ms' + Malay. + +`mt' + Maltese. + +`my' + Burmese. + +`na' + Nauru. + +`ne' + Nepali. + +`nl' + Dutch. + +`no' + Norwegian. + +`oc' + Occitan. + +`om' + (Afan) Oromo. + +`or' + Oriya. + +`pa' + Punjabi. + +`pl' + Polish. + +`ps' + Pashto, Pushto. + +`pt' + Portuguese. + +`qu' + Quechua. + +`rm' + Rhaeto-Romance. + +`rn' + Kirundi. + +`ro' + Romanian. + +`ru' + Russian. + +`rw' + Kinyarwanda. + +`sa' + Sanskrit. + +`sd' + Sindhi. + +`sg' + Sangro. + +`sh' + Serbo-Croatian. + +`si' + Sinhalese. + +`sk' + Slovak. + +`sl' + Slovenian. + +`sm' + Samoan. + +`sn' + Shona. + +`so' + Somali. + +`sq' + Albanian. + +`sr' + Serbian. + +`ss' + Siswati. + +`st' + Sesotho. + +`su' + Sundanese. + +`sv' + Swedish. + +`sw' + Swahili. + +`ta' + Tamil. + +`te' + Telugu. + +`tg' + Tajik. + +`th' + Thai. + +`ti' + Tigrinya. + +`tk' + Turkmen. + +`tl' + Tagalog. + +`tn' + Setswana. + +`to' + Tonga. + +`tr' + Turkish. + +`ts' + Tsonga. + +`tt' + Tatar. + +`tw' + Twi. + +`ug' + Uighur. + +`uk' + Ukrainian. + +`ur' + Urdu. + +`uz' + Uzbek. + +`vi' + Vietnamese. + +`vo' + Volapuk. + +`wo' + Wolof. + +`xh' + Xhosa. + +`yi' + Yiddish (formerly ji). + +`yo' + Yoruba. + +`za' + Zhuang. + +`zh' + Chinese. + +`zu' + Zulu. + + diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.texi b/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.texi new file mode 100644 index 00000000..771399a4 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/gettext.texi @@ -0,0 +1,4802 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename gettext.info +@settitle GNU @code{gettext} utilities +@finalout +@c %**end of header + +@include version.texi + +@dircategory GNU Gettext Utilities +@direntry +* Gettext: (gettext). GNU gettext utilities. +* gettextize: (gettext)gettextize Invocation. Prepare a package for gettext. +* msgfmt: (gettext)msgfmt Invocation. Make MO files out of PO files. +* msgmerge: (gettext)msgmerge Invocation. Update two PO files into one. +* xgettext: (gettext)xgettext Invocation. Extract strings into a PO file. +@end direntry + +@ifinfo +This file provides documentation for GNU @code{gettext} utilities. +It also serves as a reference for the free Translation Project. + +Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +@ignore +Permission is granted to process this file through TeX and print the +results, provided the printed document carries copying permission +notice identical to this one except for the removal of this paragraph +(this paragraph not being relevant to the printed manual). + +@end ignore +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that this permission notice may be stated in a translation approved +by the Foundation. +@end ifinfo + +@titlepage +@title GNU gettext tools, version @value{VERSION} +@subtitle Native Language Support Library and Tools +@subtitle Edition @value{EDITION}, @value{UPDATED} +@author Ulrich Drepper +@author Jim Meyering +@author Fran@,{c}ois Pinard + +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 1995, 1996, 1997 Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the entire +resulting derived work is distributed under the terms of a permission +notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that this permission notice may be stated in a translation approved +by the Foundation. +@end titlepage + +@ifinfo +@node Top, Introduction, (dir), (dir) +@top GNU @code{gettext} utilities + +@menu +* Introduction:: Introduction +* Basics:: PO Files and PO Mode Basics +* Sources:: Preparing Program Sources +* Initial:: Making the Initial PO File +* Updating:: Updating Existing PO Files +* Binaries:: Producing Binary MO Files +* Users:: The User's View +* Programmers:: The Programmer's View +* Translators:: The Translator's View +* Maintainers:: The Maintainer's View +* Conclusion:: Concluding Remarks + +* Country Codes:: ISO 639 country codes + + --- The Detailed Node Listing --- + +Introduction + +* Why:: The Purpose of GNU @code{gettext} +* Concepts:: I18n, L10n, and Such +* Aspects:: Aspects in Native Language Support +* Files:: Files Conveying Translations +* Overview:: Overview of GNU @code{gettext} + +PO Files and PO Mode Basics + +* Installation:: Completing GNU @code{gettext} Installation +* PO Files:: The Format of PO Files +* Main PO Commands:: Main Commands +* Entry Positioning:: Entry Positioning +* Normalizing:: Normalizing Strings in Entries + +Preparing Program Sources + +* Triggering:: Triggering @code{gettext} Operations +* Mark Keywords:: How Marks Appears in Sources +* Marking:: Marking Translatable Strings +* c-format:: Telling something about the following string +* Special cases:: Special Cases of Translatable Strings + +Making the Initial PO File + +* xgettext Invocation:: Invoking the @code{xgettext} Program +* C Sources Context:: C Sources Context +* Compendium:: Using Translation Compendiums + +Updating Existing PO Files + +* msgmerge Invocation:: Invoking the @code{msgmerge} Program +* Translated Entries:: +* Fuzzy Entries:: Fuzzy translated Entries +* Untranslated Entries:: Untranslated Entries +* Obsolete Entries:: Obsolete Entries +* Modifying Translations:: Modifying Translations +* Modifying Comments:: Modifying Comments +* Auxiliary:: Consulting Auxiliary PO Files + +Producing Binary MO Files + +* msgfmt Invocation:: Invoking the @code{msgfmt} Program +* MO Files:: The Format of GNU MO Files + +The User's View + +* Matrix:: The Current @file{ABOUT-NLS} Matrix +* Installers:: Magic for Installers +* End Users:: Magic for End Users + +The Programmer's View + +* catgets:: About @code{catgets} +* gettext:: About @code{gettext} +* Comparison:: Comparing the two interfaces +* Using libintl.a:: Using libintl.a in own programs +* gettext grok:: Being a @code{gettext} grok +* Temp Programmers:: Temporary Notes for the Programmers Chapter + +About @code{catgets} + +* Interface to catgets:: The interface +* Problems with catgets:: Problems with the @code{catgets} interface?! + +About @code{gettext} + +* Interface to gettext:: The interface +* Ambiguities:: Solving ambiguities +* Locating Catalogs:: Locating message catalog files +* Optimized gettext:: Optimization of the *gettext functions + +Temporary Notes for the Programmers Chapter + +* Temp Implementations:: Temporary - Two Possible Implementations +* Temp catgets:: Temporary - About @code{catgets} +* Temp WSI:: Temporary - Why a single implementation +* Temp Notes:: Temporary - Notes + +The Translator's View + +* Trans Intro 0:: Introduction 0 +* Trans Intro 1:: Introduction 1 +* Discussions:: Discussions +* Organization:: Organization +* Information Flow:: Information Flow + +Organization + +* Central Coordination:: Central Coordination +* National Teams:: National Teams +* Mailing Lists:: Mailing Lists + +National Teams + +* Sub-Cultures:: Sub-Cultures +* Organizational Ideas:: Organizational Ideas + +The Maintainer's View + +* Flat and Non-Flat:: Flat or Non-Flat Directory Structures +* Prerequisites:: Prerequisite Works +* gettextize Invocation:: Invoking the @code{gettextize} Program +* Adjusting Files:: Files You Must Create or Alter + +Files You Must Create or Alter + +* po/POTFILES.in:: @file{POTFILES.in} in @file{po/} +* configure.in:: @file{configure.in} at top level +* aclocal:: @file{aclocal.m4} at top level +* acconfig:: @file{acconfig.h} at top level +* Makefile:: @file{Makefile.in} at top level +* src/Makefile:: @file{Makefile.in} in @file{src/} + +Concluding Remarks + +* History:: History of GNU @code{gettext} +* References:: Related Readings +@end menu + +@end ifinfo + +@node Introduction, Basics, Top, Top +@chapter Introduction + +@quotation +This manual is still in @emph{DRAFT} state. Some sections are still +empty, or almost. We keep merging material from other sources +(essentially e-mail folders) while the proper integration of this +material is delayed. +@end quotation + +In this manual, we use @emph{he} when speaking of the programmer or +maintainer, @emph{she} when speaking of the translator, and @emph{they} +when speaking of the installers or end users of the translated program. +This is only a convenience for clarifying the documentation. It is +@emph{absolutely} not meant to imply that some roles are more appropriate +to males or females. Besides, as you might guess, GNU @code{gettext} +is meant to be useful for people using computers, whatever their sex, +race, religion or nationality! + +This chapter explains the goals sought in the creation +of GNU @code{gettext} and the free Translation Project. +Then, it explains a few broad concepts around +Native Language Support, and positions message translation with regard +to other aspects of national and cultural variance, as they apply to +to programs. It also surveys those files used to convey the +translations. It explains how the various tools interact in the +initial generation of these files, and later, how the maintenance +cycle should usually operate. + +Please send suggestions and corrections to: + +@example +@group +@r{Internet address:} + bug-gnu-utils@@prep.ai.mit.edu +@end group +@end example + +@noindent +Please include the manual's edition number and update date in your messages. + +@menu +* Why:: The Purpose of GNU @code{gettext} +* Concepts:: I18n, L10n, and Such +* Aspects:: Aspects in Native Language Support +* Files:: Files Conveying Translations +* Overview:: Overview of GNU @code{gettext} +@end menu + +@node Why, Concepts, Introduction, Introduction +@section The Purpose of GNU @code{gettext} + +Usually, programs are written and documented in English, and use +English at execution time to interact with users. This is true +not only of GNU software, but also of a great deal of commercial +and free software. Using a common language is quite handy for +communication between developers, maintainers and users from all +countries. On the other hand, most people are less comfortable with +English than with their own native language, and would prefer to +use their mother tongue for day to day's work, as far as possible. +Many would simply @emph{love} to see their computer screen showing +a lot less of English, and far more of their own language. + +However, to many people, this dream might appear so far fetched that +they may believe it is not even worth spending time thinking about +it. They have no confidence at all that the dream might ever +become true. Yet some have not lost hope, and have organized themselves. +The Translation Project is a formalization of this hope into a +workable structure, which has a good chance to get all of us nearer +the achievement of a truly multi-lingual set of programs. + +GNU @code{gettext} is an important step for the Translation Project, +as it is an asset on which we may build many other steps. This package +offers to programmers, translators and even users, a well integrated +set of tools and documentation. Specifically, the GNU @code{gettext} +utilities are a set of tools that provides a framework within which +other free packages may produce multi-lingual messages. These tools +include a set of conventions about how programs should be written to +support message catalogs, a directory and file naming organization for the +message catalogs themselves, a runtime library supporting the retrieval of +translated messages, and a few stand-alone programs to massage in various +ways the sets of translatable strings, or already translated strings. +A special mode for GNU Emacs also helps ease interested parties into +preparing these sets, or bringing them up to date. + +GNU @code{gettext} is designed to minimize the impact of +internationalization on program sources, keeping this impact as small +and hardly noticeable as possible. Internationalization has better +chances of succeeding if it is very light weighted, or at least, +appear to be so, when looking at program sources. + +The Translation Project also uses the GNU @code{gettext} +distribution as a vehicle for documenting its structure and methods. +This goes beyond the strict technicalities of documenting the GNU @code{gettext} +proper. By so doing, translators will find in a single place, as +far as possible, all they need to know for properly doing their +translating work. Also, this supplemental documentation might also +help programmers, and even curious users, in understanding how GNU +@code{gettext} is related to the remainder of the Translation +Project, and consequently, have a glimpse at the @emph{big picture}. + +@node Concepts, Aspects, Why, Introduction +@section I18n, L10n, and Such + +Two long words appear all the time when we discuss support of native +language in programs, and these words have a precise meaning, worth +being explained here, once and for all in this document. The words are +@emph{internationalization} and @emph{localization}. Many people, +tired of writing these long words over and over again, took the +habit of writing @dfn{i18n} and @dfn{l10n} instead, quoting the first +and last letter of each word, and replacing the run of intermediate +letters by a number merely telling how many such letters there are. +But in this manual, in the sake of clarity, we will patiently write +the names in full, each time@dots{} + +By @dfn{internationalization}, one refers to the operation by which a +program, or a set of programs turned into a package, is made aware of and +able to support multiple languages. This is a generalization process, +by which the programs are untied from calling only English strings or +other English specific habits, and connected to generic ways of doing +the same, instead. Program developers may use various techniques to +internationalize their programs. Some of these have been standardized. +GNU @code{gettext} offers one of these standards. @xref{Programmers}. + +By @dfn{localization}, one means the operation by which, in a set +of programs already internationalized, one gives the program all +needed information so that it can adapt itself to handle its input +and output in a fashion which is correct for some native language and +cultural habits. This is a particularisation process, by which generic +methods already implemented in an internationalized program are used +in specific ways. The programming environment puts several functions +to the programmers disposal which allow this runtime configuration. +The formal description of specific set of cultural habits for some +country, together with all associated translations targeted to the +same native language, is called the @dfn{locale} for this language +or country. Users achieve localization of programs by setting proper +values to special environment variables, prior to executing those +programs, identifying which locale should be used. + +In fact, locale message support is only one component of the cultural +data that makes up a particular locale. There are a whole host of +routines and functions provided to aid programmers in developing +internationalized software and which allow them to access the data +stored in a particular locale. When someone presently refers to a +particular locale, they are obviously referring to the data stored +within that particular locale. Similarly, if a programmer is referring +to ``accessing the locale routines'', they are referring to the +complete suite of routines that access all of the locale's information. + +One uses the expression @dfn{Native Language Support}, or merely NLS, +for speaking of the overall activity or feature encompassing both +internationalization and localization, allowing for multi-lingual +interactions in a program. In a nutshell, one could say that +internationalization is the operation by which further localizations +are made possible. + +Also, very roughly said, when it comes to multi-lingual messages, +internationalization is usually taken care of by programmers, and +localization is usually taken care of by translators. + +@node Aspects, Files, Concepts, Introduction +@section Aspects in Native Language Support + +For a totally multi-lingual distribution, there are many things to +translate beyond output messages. + +@itemize @bullet +@item +As of today, GNU @code{gettext} offers a complete toolset for +translating messages output by C programs. Perl scripts and shell +scripts will also need to be translated. Even if there are today some hooks +by which this can be done, these hooks are not integrated as well as they +should be. + +@item +Some programs, like @code{autoconf} or @code{bison}, are able +to produce other programs (or scripts). Even if the generating +programs themselves are internationalized, the generated programs they +produce may need internationalization on their own, and this indirect +internationalization could be automated right from the generating +program. In fact, quite usually, generating and generated programs +could be internationalized independently, as the effort needed is +fairly orthogonal. + +@item +A few programs include textual tables which might need translation +themselves, independently of the strings contained in the program +itself. For example, @w{RFC 1345} gives an English description for each +character which GNU @code{recode} is able to reconstruct at execution. +Since these descriptions are extracted from the RFC by mechanical means, +translating them properly would require a prior translation of the RFC +itself. + +@item +Almost all programs accept options, which are often worded out so to +be descriptive for the English readers; one might want to consider +offering translated versions for program options as well. + +@item +Many programs read, interpret, compile, or are somewhat driven by +input files which are texts containing keywords, identifiers, or +replies which are inherently translatable. For example, one may want +@code{gcc} to allow diacriticized characters in identifiers or use +translated keywords; @samp{rm -i} might accept something else than +@samp{y} or @samp{n} for replies, etc. Even if the program will +eventually make most of its output in the foreign languages, one has +to decide whether the input syntax, option values, etc., are to be +localized or not. + +@item +The manual accompanying a package, as well as all documentation files +in the distribution, could surely be translated, too. Translating a +manual, with the intent of later keeping up with updates, is a major +undertaking in itself, generally. + +@end itemize + +As we already stressed, translation is only one aspect of locales. +Other internationalization aspects are not currently handled by GNU +@code{gettext}, but perhaps may be handled in future versions. There +are many attributes that are needed to define a country's cultural +conventions. These attributes include beside the country's native +language, the formatting of the date and time, the representation of +numbers, the symbols for currency, etc. These local @dfn{rules} are +termed the country's locale. The locale represents the knowledge +needed to support the country's native attributes. + +There are a few major areas which may vary between countries and +hence, define what a locale must describe. The following list helps +putting multi-lingual messages into the proper context of other tasks +related to locales, and also presents some other areas which GNU +@code{gettext} might eventually tackle, maybe, one of these days. + +@table @emph + +@item Characters and Codesets + +The codeset most commonly used through out the USA and most English +speaking parts of the world is the ASCII codeset. However, there are +many characters needed by various locales that are not found within +this codeset. The 8-bit @w{ISO 8859-1} code set has most of the special +characters needed to handle the major European languages. However, in +many cases, the @w{ISO 8859-1} font is not adequate. Hence each locale +will need to specify which codeset they need to use and will need +to have the appropriate character handling routines to cope with +the codeset. + +@item Currency + +The symbols used vary from country to country as does the position +used by the symbol. Software needs to be able to transparently +display currency figures in the native mode for each locale. + +@item Dates + +The format of date varies between locales. For example, Christmas day +in 1994 is written as 12/25/94 in the USA and as 25/12/94 in Australia. +Other countries might use @w{ISO 8061} dates, etc. + +Time of the day may be noted as @var{hh}:@var{mm}, @var{hh}.@var{mm}, +or otherwise. Some locales require time to be specified in 24-hour +mode rather than as AM or PM. Further, the nature and yearly extent +of the Daylight Saving correction vary widely between countries. + +@item Numbers + +Numbers can be represented differently in different locales. +For example, the following numbers are all written correctly for +their respective locales: + +@example +12,345.67 English +12.345,67 French +1,2345.67 Asia +@end example + +Some programs could go further and use different unit systems, like +English units or Metric units, or even take into account variants +about how numbers are spelled in full. + +@item Messages + +The most obvious area is the language support within a locale. This is +where GNU @code{gettext} provides the means for developers and users to +easily change the language that the software uses to communicate to +the user. + +@end table + +In the near future we see no chance that components of locale outside of +message handling will be made available for use in other +packages. The reason for this is that most modern systems provide +a more or less reasonable support for at least some of the missing +components. Another point is that the GNU @code{libc} and Linux will get +a new and complete implementation of the whole locale functionality +which could be adopted by system lacking a reasonable locale support. + +@node Files, Overview, Aspects, Introduction +@section Files Conveying Translations + +The letters PO in @file{.po} files means Portable Object, to +distinguish it from @file{.mo} files, where MO stands for Machine +Object. This paradigm, as well as the PO file format, is inspired +by the NLS standard developed by Uniforum, and implemented by Sun +in their Solaris system. + +PO files are meant to be read and edited by humans, and associate each +original, translatable string of a given package with its translation +in a particular target language. A single PO file is dedicated to +a single target language. If a package supports many languages, +there is one such PO file per language supported, and each package +has its own set of PO files. These PO files are best created by +the @code{xgettext} program, and later updated or refreshed through +the @code{msgmerge} program. Program @code{xgettext} extracts all +marked messages from a set of C files and initializes a PO file with +empty translations. Program @code{msgmerge} takes care of adjusting +PO files between releases of the corresponding sources, commenting +obsolete entries, initializing new ones, and updating all source +line references. Files ending with @file{.pot} are kind of base +translation files found in distributions, in PO file format, and +@file{.pox} files are often temporary PO files. + +MO files are meant to be read by programs, and are binary in nature. +A few systems already offer tools for creating and handling MO files +as part of the Native Language Support coming with the system, but the +format of these MO files is often different from system to system, +and non-portable. They do not necessary use @file{.mo} for file +extensions, but since system libraries are also used for accessing +these files, it works as long as the system is self-consistent about +it. If GNU @code{gettext} is able to interface with the tools already +provided with systems, it will consequently let these provided tools +take care of generating the MO files. Or else, if such tools are not +found or do not seem usable, GNU @code{gettext} will use its own ways +and its own format for MO files. Files ending with @file{.gmo} are +really MO files, when it is known that these files use the GNU format. + +@node Overview, , Files, Introduction +@section Overview of GNU @code{gettext} + +The following diagram summarizes the relation between the files +handled by GNU @code{gettext} and the tools acting on these files. +It is followed by a somewhat detailed explanations, which you should +read while keeping an eye on the diagram. Having a clear understanding +of these interrelations would surely help programmers, translators +and maintainers. + +@example +@group +Original C Sources ---> PO mode ---> Marked C Sources ---. + | + .---------<--- GNU gettext Library | +.--- make <---+ | +| `---------<--------------------+-----------' +| | +| .-----<--- PACKAGE.pot <--- xgettext <---' .---<--- PO Compendium +| | | ^ +| | `---. | +| `---. +---> PO mode ---. +| +----> msgmerge ------> LANG.pox --->--------' | +| .---' | +| | | +| `-------------<---------------. | +| +--- LANG.po <--- New LANG.pox <----' +| .--- LANG.gmo <--- msgfmt <---' +| | +| `---> install ---> /.../LANG/PACKAGE.mo ---. +| +---> "Hello world!" +`-------> install ---> /.../bin/PROGRAM -------' +@end group +@end example + +The indication @samp{PO mode} appears in two places in this picture, +and you may safely read it as merely meaning ``hand editing'', using +any editor of your choice, really. However, for those of you being +the lucky users of GNU Emacs, PO mode has been specifically created +for providing a cozy environment for editing or modifying PO files. +While editing a PO file, PO mode allows for the easy browsing of +auxiliary and compendium PO files, as well as for following references into +the set of C program sources from which PO files have been derived. +It has a few special features, among which are the interactive marking +of program strings as translatable, and the validatation of PO files +with easy repositioning to PO file lines showing errors. + +As a programmer, the first step to bringing GNU @code{gettext} +into your package is identifying, right in the C sources, those strings +which are meant to be translatable, and those which are untranslatable. +This tedious job can be done a little more comfortably using emacs PO +mode, but you can use any means familiar to you for modifying your +C sources. Beside this some other simple, standard changes are needed to +properly initialize the translation library. @xref{Sources}, for +more information about all this. + +For newly written software the strings of course can and should be +marked while writing the it. The @code{gettext} approach makes this +very easy. Simply put the following lines at the beginning of each file +or in a central header file: + +@example +@group +#define _(String) (String) +#define N_(String) (String) +#define textdomain(Domain) +#define bindtextdomain(Package, Directory) +@end group +@end example + +@noindent +Doing this allows you to prepare the sources for internationalization. +Later when you feel ready for the step to use the @code{gettext} library +simply remove these definitions, include @file{libintl.h} and link +against @file{libintl.a}. That is all you have to change. + +Once the C sources have been modified, the @code{xgettext} program +is used to find and extract all translatable strings, and create an +initial PO file out of all these. This @file{@var{package}.pot} file +contains all original program strings. It has sets of pointers to +exactly where in C sources each string is used. All translations +are set to empty. The letter @kbd{t} in @file{.pot} marks this as +a Template PO file, not yet oriented towards any particular language. +@xref{xgettext Invocation}, for more details about how one calls the +@code{xgettext} program. If you are @emph{really} lazy, you might +be interested at working a lot more right away, and preparing the +whole distribution setup (@pxref{Maintainers}). By doing so, you +spare yourself typing the @code{xgettext} command, as @code{make} +should now generate the proper things automatically for you! + +The first time through, there is no @file{@var{lang}.po} yet, so the +@code{msgmerge} step may be skipped and replaced by a mere copy of +@file{@var{package}.pot} to @file{@var{lang}.pox}, where @var{lang} +represents the target language. + +Then comes the initial translation of messages. Translation in +itself is a whole matter, still exclusively meant for humans, +and whose complexity far overwhelms the level of this manual. +Nevertheless, a few hints are given in some other chapter of this +manual (@pxref{Translators}). You will also find there indications +about how to contact translating teams, or becoming part of them, +for sharing your translating concerns with others who target the same +native language. + +While adding the translated messages into the @file{@var{lang}.pox} +PO file, if you do not have GNU Emacs handy, you are on your own +for ensuring that your efforts fully respect the PO file format, and quoting +conventions (@pxref{PO Files}). This is surely not an impossible task, +as this is the way many people have handled PO files already for Uniforum or +Solaris. On the other hand, by using PO mode in GNU Emacs, most details +of PO file format are taken care of for you, but you have to acquire +some familiarity with PO mode itself. Besides main PO mode commands +(@pxref{Main PO Commands}), you should know how to move between entries +(@pxref{Entry Positioning}), and how to handle untranslated entries +(@pxref{Untranslated Entries}). + +If some common translations have already been saved into a compendium +PO file, translators may use PO mode for initializing untranslated +entries from the compendium, and also save selected translations into +the compendium, updating it (@pxref{Compendium}). Compendium files +are meant to be exchanged between members of a given translation team. + +Programs, or packages of programs, are dynamic in nature: users write +bug reports and suggestion for improvements, maintainers react by +modifying programs in various ways. The fact that a package has +already been internationalized should not make maintainers shy +of adding new strings, or modifying strings already translated. +They just do their job the best they can. For the Translation +Project to work smoothly, it is important that maintainers do not +carry translation concerns on their already loaded shoulders, and that +translators be kept as free as possible of programmatic concerns. + +The only concern maintainers should have is carefully marking new +strings as translatable, when they should be, and do not otherwise +worry about them being translated, as this will come in proper time. +Consequently, when programs and their strings are adjusted in various +ways by maintainers, and for matters usually unrelated to translation, +@code{xgettext} would construct @file{@var{package}.pot} files which are +evolving over time, so the translations carried by @file{@var{lang}.po} +are slowly fading out of date. + +It is important for translators (and even maintainers) to understand +that package translation is a continuous process in the lifetime of a +package, and not something which is done once and for all at the start. +After an initial burst of translation activity for a given package, +interventions are needed once in a while, because here and there, +translated entries become obsolete, and new untranslated entries +appear, needing translation. + +The @code{msgmerge} program has the purpose of refreshing an already +existing @file{@var{lang}.po} file, by comparing it with a newer +@file{@var{package}.pot} template file, extracted by @code{xgettext} +out of recent C sources. The refreshing operation adjusts all +references to C source locations for strings, since these strings +move as programs are modified. Also, @code{msgmerge} comments out as +obsolete, in @file{@var{lang}.pox}, those already translated entries +which are no longer used in the program sources (@pxref{Obsolete +Entries}). It finally discovers new strings and inserts them in +the resulting PO file as untranslated entries (@pxref{Untranslated +Entries}). @xref{msgmerge Invocation}, for more information about what +@code{msgmerge} really does. + +Whatever route or means taken, the goal is to obtain an updated +@file{@var{lang}.pox} file offering translations for all strings. +When this is properly achieved, this file @file{@var{lang}.pox} may +take the place of the previous official @file{@var{lang}.po} file. + +The temporal mobility, or fluidity of PO files, is an integral part of +the translation game, and should be well understood, and accepted. +People resisting it will have a hard time participating in the +Translation Project, or will give a hard time to other participants! In +particular, maintainers should relax and include all available official +PO files in their distributions, even if these have not recently been +updated, without banging or otherwise trying to exert pressure on the +translator teams to get the job done. The pressure should rather come +from the community of users speaking a particular language, and +maintainers should consider themselves fairly relieved of any concern +about the adequacy of translation files. On the other hand, translators +should reasonably try updating the PO files they are responsible for, +while the package is undergoing pretest, prior to an official +distribution. + +Once the PO file is complete and dependable, the @code{msgfmt} program +is used for turning the PO file into a machine-oriented format, which +may yield efficient retrieval of translations by the programs of the +package, whenever needed at runtime (@pxref{MO Files}). @xref{msgfmt +Invocation}, for more information about all modalities of execution +for the @code{msgfmt} program. + +Finally, the modified and marked C sources are compiled and linked +with the GNU @code{gettext} library, usually through the operation of +@code{make}, given a suitable @file{Makefile} exists for the project, +and the resulting executable is installed somewhere users will find it. +The MO files themselves should also be properly installed. Given the +appropriate environment variables are set (@pxref{End Users}), the +program should localize itself automatically, whenever it executes. + +The remainder of this manual has the purpose of explaining in depth the various +steps outlined above. + +@node Basics, Sources, Introduction, Top +@chapter PO Files and PO Mode Basics + +The GNU @code{gettext} toolset helps programmers and translators +at producing, updating and using translation files, mainly those +PO files which are textual, editable files. This chapter stresses +the format of PO files, and contains a PO mode starter. PO mode +description is spread throughout this manual instead of being concentrated +in one place. Here we present only the basics of PO mode. + +@menu +* Installation:: Completing GNU @code{gettext} Installation +* PO Files:: The Format of PO Files +* Main PO Commands:: Main Commands +* Entry Positioning:: Entry Positioning +* Normalizing:: Normalizing Strings in Entries +@end menu + +@node Installation, PO Files, Basics, Basics +@section Completing GNU @code{gettext} Installation + +Once you have received, unpacked, configured and compiled the GNU +@code{gettext} distribution, the @samp{make install} command puts in +place the programs @code{xgettext}, @code{msgfmt}, @code{gettext}, and +@code{msgmerge}, as well as their available message catalogs. To +top off a comfortable installation, you might also want to make the +PO mode available to your GNU Emacs users. + +During the installation of the PO mode, you might want modify your +file @file{.emacs}, once and for all, so it contains a few lines looking +like: + +@example +(setq auto-mode-alist + (cons '("\\.po[tx]?\\'\\|\\.po\\." . po-mode) auto-mode-alist)) +(autoload 'po-mode "po-mode") +@end example + +Later, whenever you edit some @file{.po}, @file{.pot} or @file{.pox} +file, or any file having the string @samp{.po.} within its name, +Emacs loads @file{po-mode.elc} (or @file{po-mode.el}) as needed, and +automatically activates PO mode commands for the associated buffer. +The string @emph{PO} appears in the mode line for any buffer for +which PO mode is active. Many PO files may be active at once in a +single Emacs session. + +If you are using Emacs version 20 or better, and have already installed +the appropriate international fonts on your system, you may also manage +for the these fonts to be automatically loaded and used for displaying +the translations on your Emacs screen, whenever necessary. For this to +happen, you might want to add the lines: + +@example +(autoload 'po-find-file-coding-system "po-mode") +(modify-coding-system-alist 'file "\\.po[tx]?\\'\\|\\.po\\." + 'po-find-file-coding-system) +@end example + +@noindent +to your @file{.emacs} file. + +@node PO Files, Main PO Commands, Installation, Basics +@section The Format of PO Files + +A PO file is made up of many entries, each entry holding the relation +between an original untranslated string and its corresponding +translation. All entries in a given PO file usually pertain +to a single project, and all translations are expressed in a single +target language. One PO file @dfn{entry} has the following schematic +structure: + +@example +@var{white-space} +# @var{translator-comments} +#. @var{automatic-comments} +#: @var{reference}@dots{} +#, @var{flag}@dots{} +msgid @var{untranslated-string} +msgstr @var{translated-string} +@end example + +The general structure of a PO file should be well understood by +the translator. When using PO mode, very little has to be known +about the format details, as PO mode takes care of them for her. + +Entries begin with some optional white space. Usually, when generated +through GNU @code{gettext} tools, there is exactly one blank line +between entries. Then comments follow, on lines all starting with the +character @kbd{#}. There are two kinds of comments: those which have +some white space immediately following the @kbd{#}, which comments are +created and maintained exclusively by the translator, and those which +have some non-white character just after the @kbd{#}, which comments +are created and maintained automatically by GNU @code{gettext} tools. +All comments, of either kind, are optional. + +After white space and comments, entries show two strings, giving +first the untranslated string as it appears in the original program +sources, and then, the translation of this string. The original +string is introduced by the keyword @code{msgid}, and the translation, +by @code{msgstr}. The two strings, untranslated and translated, +are quoted in various ways in the PO file, using @kbd{"} +delimiters and @kbd{\} escapes, but the translator does not really +have to pay attention to the precise quoting format, as PO mode fully +intend to take care of quoting for her. + +The @code{msgid} strings, as well as automatic comments, are produced +and managed by other GNU @code{gettext} tools, and PO mode does not +provide means for the translator to alter these. The most she can +do is merely deleting them, and only by deleting the whole entry. +On the other hand, the @code{msgstr} string, as well as translator +comments, are really meant for the translator, and PO mode gives her +the full control she needs. + +The comment lines beginning with @kbd{#,} are special because they are +not completely ignored by the programs as comments generally are. The +comma separated list of @var{flag}s is used by the @code{msgfmt} +program to give the user some better disgnostic messages. Currently +there are two forms of flags defined: + +@table @kbd +@item fuzzy +This flag can be generated by the @code{msgmerge} program or it can be +inserted by the translator herself. It shows that the @code{msgstr} +string might not be a correct translation (anymore). Only the translator +can judge if the translation requires further modification, or is +acceptable as is. Once satisfied with the translation, she then removes +this @kbd{fuzzy} attribute. The @code{msgmerge} programs inserts this +when it combined the @code{msgid} and @code{msgstr} entries after fuzzy +search only. @xref{Fuzzy Entries}. + +@item c-format +@itemx no-c-format +These flags should not be added by a human. Instead only the +@code{xgettext} program adds them. In an automatized PO file processing +system as proposed here the user changes would be thrown away again as +soon as the @code{xgettext} program generates a new template file. + +In case the @kbd{c-format} flag is given for a string the @code{msgfmt} +does some more tests to check to validity of the translation. +@xref{msgfmt Invocation}. + +@end table + +It happens that some lines, usually whitespace or comments, follow the +very last entry of a PO file. Such lines are not part of any entry, +and PO mode is unable to take action on those lines. By using the +PO mode function @w{@kbd{M-x po-normalize}}, the translator may get +rid of those spurious lines. @xref{Normalizing}. + +The remainder of this section may be safely skipped by those using +PO mode, yet it may be interesting for everybody to have a better +idea of the precise format of a PO file. On the other hand, those +not having GNU Emacs handy should carefully continue reading on. + +Each of @var{untranslated-string} and @var{translated-string} respects +the C syntax for a character string, including the surrounding quotes +and imbedded backslashed escape sequences. When the time comes +to write multi-line strings, one should not use escaped newlines. +Instead, a closing quote should follow the last character on the +line to be continued, and an opening quote should resume the string +at the beginning of the following PO file line. For example: + +@example +msgid "" +"Here is an example of how one might continue a very long string\n" +"for the common case the string represents multi-line output.\n" +@end example + +@noindent +In this example, the empty string is used on the first line, to +allow better alignment of the @kbd{H} from the word @samp{Here} +over the @kbd{f} from the word @samp{for}. In this example, the +@code{msgid} keyword is followed by three strings, which are meant +to be concatenated. Concatenating the empty string does not change +the resulting overall string, but it is a way for us to comply with +the necessity of @code{msgid} to be followed by a string on the same +line, while keeping the multi-line presentation left-justified, as +we find this to be a cleaner disposition. The empty string could have +been omitted, but only if the string starting with @samp{Here} was +promoted on the first line, right after @code{msgid}.@footnote{This +limitation is not imposed by GNU @code{gettext}, but comes from the +@code{msgfmt} implementation on Solaris.} It was not really necessary +either to switch between the two last quoted strings immediately after +the newline @samp{\n}, the switch could have occurred after @emph{any} +other character, we just did it this way because it is neater. + +One should carefully distinguish between end of lines marked as +@samp{\n} @emph{inside} quotes, which are part of the represented +string, and end of lines in the PO file itself, outside string quotes, +which have no incidence on the represented string. + +Outside strings, white lines and comments may be used freely. +Comments start at the beginning of a line with @samp{#} and extend +until the end of the PO file line. Comments written by translators +should have the initial @samp{#} immediately followed by some white +space. If the @samp{#} is not immediately followed by white space, +this comment is most likely generated and managed by specialized GNU +tools, and might disappear or be replaced unexpectedly when the PO +file is given to @code{msgmerge}. + +@node Main PO Commands, Entry Positioning, PO Files, Basics +@section Main PO mode Commands + +After setting up Emacs with something similar to the lines in +@ref{Installation}, PO mode is activated for a window when Emacs finds a +PO file in that window. This puts the window read-only and establishes a +po-mode-map, which is a genuine Emacs mode, in a way that is not derived +from text mode in any way. Functions found on @code{po-mode-hook}, +if any, will be executed. + +When PO mode is active in a window, the letters @samp{PO} appear +in the mode line for that window. The mode line also displays how +many entries of each kind are held in the PO file. For example, +the string @samp{132t+3f+10u+2o} would tell the translator that the +PO mode contains 132 translated entries (@pxref{Translated Entries}, +3 fuzzy entries (@pxref{Fuzzy Entries}), 10 untranslated entries +(@pxref{Untranslated Entries}) and 2 obsolete entries (@pxref{Obsolete +Entries}). Zero-coefficients items are not shown. So, in this example, if +the fuzzy entries were unfuzzied, the untranslated entries were translated +and the obsolete entries were deleted, the mode line would merely display +@samp{145t} for the counters. + +The main PO commands are those which do not fit into the other categories of +subsequent sections. These allow for quitting PO mode or for managing windows +in special ways. + +@table @kbd +@item U +Undo last modification to the PO file. + +@item Q +Quit processing and save the PO file. + +@item q +Quit processing, possibly after confirmation. + +@item O +Temporary leave the PO file window. + +@item ? +@itemx h +Show help about PO mode. + +@item = +Give some PO file statistics. + +@item V +Batch validate the format of the whole PO file. + +@end table + +The command @kbd{U} (@code{po-undo}) interfaces to the GNU Emacs +@emph{undo} facility. @xref{Undo, , Undoing Changes, emacs, The Emacs +Editor}. Each time @kbd{U} is typed, modifications which the translator +did to the PO file are undone a little more. For the purpose of +undoing, each PO mode command is atomic. This is especially true for +the @kbd{@key{RET}} command: the whole edition made by using a single +use of this command is undone at once, even if the edition itself +implied several actions. However, while in the editing window, one +can undo the edition work quite parsimoniously. + +The commands @kbd{Q} (@code{po-quit}) and @kbd{q} +(@code{po-confirm-and-quit}) are used when the translator is done with the +PO file. The former is a bit less verbose than the latter. If the file +has been modified, it is saved to disk first. In both cases, and prior to +all this, the commands check if some untranslated message remains in the +PO file and, if yes, the translator is asked if she really wants to leave +off working with this PO file. This is the preferred way of getting rid +of an Emacs PO file buffer. Merely killing it through the usual command +@w{@kbd{C-x k}} (@code{kill-buffer}) is not the tidiest way to proceed. + +The command @kbd{O} (@code{po-other-window}) is another, softer way, +to leave PO mode, temporarily. It just moves the cursor to some other +Emacs window, and pops one if necessary. For example, if the translator +just got PO mode to show some source context in some other, she might +discover some apparent bug in the program source that needs correction. +This command allows the translator to change sex, become a programmer, +and have the cursor right into the window containing the program she +(or rather @emph{he}) wants to modify. By later getting the cursor back +in the PO file window, or by asking Emacs to edit this file once again, +PO mode is then recovered. + +The command @kbd{h} (@code{po-help}) displays a summary of all available PO +mode commands. The translator should then type any character to resume +normal PO mode operations. The command @kbd{?} has the same effect +as @kbd{h}. + +The command @kbd{=} (@code{po-statistics}) computes the total number of +entries in the PO file, the ordinal of the current entry (counted from +1), the number of untranslated entries, the number of obsolete entries, +and displays all these numbers. + +The command @kbd{V} (@code{po-validate}) launches @code{msgfmt} in verbose +mode over the current PO file. This command first offers to save the +current PO file on disk. The @code{msgfmt} tool, from GNU @code{gettext}, +has the purpose of creating a MO file out of a PO file, and PO mode uses +the features of this program for checking the overall format of a PO file, +as well as all individual entries. + +The program @code{msgfmt} runs asynchronously with Emacs, so the +translator regains control immediately while her PO file is being studied. +Error output is collected in the GNU Emacs @samp{*compilation*} buffer, +displayed in another window. The regular GNU Emacs command @kbd{C-x`} +(@code{next-error}), as well as other usual compile commands, allow the +translator to reposition quickly to the offending parts of the PO file. +Once the cursor is on the line in error, the translator may decide on +any PO mode action which would help correcting the error. + +@node Entry Positioning, Normalizing, Main PO Commands, Basics +@section Entry Positioning + +The cursor in a PO file window is almost always part of +an entry. The only exceptions are the special case when the cursor +is after the last entry in the file, or when the PO file is +empty. The entry where the cursor is found to be is said to be the +current entry. Many PO mode commands operate on the current entry, +so moving the cursor does more than allowing the translator to browse +the PO file, this also selects on which entry commands operate. + +Some PO mode commands alter the position of the cursor in a specialized +way. A few of those special purpose positioning are described here, +the others are described in following sections. + +@table @kbd + +@item . +Redisplay the current entry. + +@item n +@itemx n +Select the entry after the current one. + +@item p +@itemx p +Select the entry before the current one. + +@item < +Select the first entry in the PO file. + +@item > +Select the last entry in the PO file. + +@item m +Record the location of the current entry for later use. + +@item l +Return to a previously saved entry location. + +@item x +Exchange the current entry location with the previously saved one. + +@end table + +Any GNU Emacs command able to reposition the cursor may be used +to select the current entry in PO mode, including commands which +move by characters, lines, paragraphs, screens or pages, and search +commands. However, there is a kind of standard way to display the +current entry in PO mode, which usual GNU Emacs commands moving +the cursor do not especially try to enforce. The command @kbd{.} +(@code{po-current-entry}) has the sole purpose of redisplaying the +current entry properly, after the current entry has been changed by +means external to PO mode, or the Emacs screen otherwise altered. + +It is yet to be decided if PO mode helps the translator, or otherwise +irritates her, by forcing a rigid window disposition while she +is doing her work. We originally had quite precise ideas about +how windows should behave, but on the other hand, anyone used to +GNU Emacs is often happy to keep full control. Maybe a fixed window +disposition might be offered as a PO mode option that the translator +might activate or deactivate at will, so it could be offered on an +experimental basis. If nobody feels a real need for using it, or +a compulsion for writing it, we should drop this whole idea. +The incentive for doing it should come from translators rather than +programmers, as opinions from an experienced translator are surely +more worth to me than opinions from programmers @emph{thinking} about +how @emph{others} should do translation. + +The commands @kbd{n} (@code{po-next-entry}) and @kbd{p} +(@code{po-previous-entry}) move the cursor the entry following, +or preceding, the current one. If @kbd{n} is given while the +cursor is on the last entry of the PO file, or if @kbd{p} +is given while the cursor is on the first entry, no move is done. + +The commands @kbd{<} (@code{po-first-entry}) and @kbd{>} +(@code{po-last-entry}) move the cursor to the first entry, or last +entry, of the PO file. When the cursor is located past the last +entry in a PO file, most PO mode commands will return an error saying +@samp{After last entry}. Moreover, the commands @kbd{<} and @kbd{>} +have the special property of being able to work even when the cursor +is not into some PO file entry, and one may use them for nicely +correcting this situation. But even these commands will fail on a +truly empty PO file. There are development plans for the PO mode for it +to interactively fill an empty PO file from sources. @xref{Marking}. + +The translator may decide, before working at the translation of +a particular entry, that she needs to browse the remainder of the +PO file, maybe for finding the terminology or phraseology used +in related entries. She can of course use the standard Emacs idioms +for saving the current cursor location in some register, and use that +register for getting back, or else, use the location ring. + +PO mode offers another approach, by which cursor locations may be saved +onto a special stack. The command @kbd{m} (@code{po-push-location}) +merely adds the location of current entry to the stack, pushing +the already saved locations under the new one. The command +@kbd{r} (@code{po-pop-location}) consumes the top stack element and +reposition the cursor to the entry associated with that top element. +This position is then lost, for the next @kbd{r} will move the cursor +to the previously saved location, and so on until no locations remain +on the stack. + +If the translator wants the position to be kept on the location stack, +maybe for taking a look at the entry associated with the top +element, then go elsewhere with the intent of getting back later, she +ought to use @kbd{m} immediately after @kbd{r}. + +The command @kbd{x} (@code{po-exchange-location}) simultaneously +reposition the cursor to the entry associated with the top element of +the stack of saved locations, and replace that top element with the +location of the current entry before the move. Consequently, repeating +the @kbd{x} command toggles alternatively between two entries. +For achieving this, the translator will position the cursor on the +first entry, use @kbd{m}, then position to the second entry, and +merely use @kbd{x} for making the switch. + +@node Normalizing, , Entry Positioning, Basics +@section Normalizing Strings in Entries + +There are many different ways for encoding a particular string into a +PO file entry, because there are so many different ways to split and +quote multi-line strings, and even, to represent special characters +by backslahsed escaped sequences. Some features of PO mode rely on +the ability for PO mode to scan an already existing PO file for a +particular string encoded into the @code{msgid} field of some entry. +Even if PO mode has internally all the built-in machinery for +implementing this recognition easily, doing it fast is technically +difficult. To facilitate a solution to this efficiency problem, +we decided on a canonical representation for strings. + +A conventional representation of strings in a PO file is currently +under discussion, and PO mode experiments with a canonical representation. +Having both @code{xgettext} and PO mode converging towards a uniform +way of representing equivalent strings would be useful, as the internal +normalization needed by PO mode could be automatically satisfied +when using @code{xgettext} from GNU @code{gettext}. An explicit +PO mode normalization should then be only necessary for PO files +imported from elsewhere, or for when the convention itself evolves. + +So, for achieving normalization of at least the strings of a given +PO file needing a canonical representation, the following PO mode +command is available: + +@table @kbd +@item M-x po-normalize +Tidy the whole PO file by making entries more uniform. + +@end table + +The special command @kbd{M-x po-normalize}, which has no associate +keys, revises all entries, ensuring that strings of both original +and translated entries use uniform internal quoting in the PO file. +It also removes any crumb after the last entry. This command may be +useful for PO files freshly imported from elsewhere, or if we ever +improve on the canonical quoting format we use. This canonical format +is not only meant for getting cleaner PO files, but also for greatly +speeding up @code{msgid} string lookup for some other PO mode commands. + +@kbd{M-x po-normalize} presently makes three passes over the entries. +The first implements heuristics for converting PO files for GNU +@code{gettext} 0.6 and earlier, in which @code{msgid} and @code{msgstr} +fields were using K&R style C string syntax for multi-line strings. +These heuristics may fail for comments not related to obsolete +entries and ending with a backslash; they also depend on subsequent +passes for finalizing the proper commenting of continued lines for +obsolete entries. This first pass might disappear once all oldish PO +files would have been adjusted. The second and third pass normalize +all @code{msgid} and @code{msgstr} strings respectively. They also +clean out those trailing backslashes used by XView's @code{msgfmt} +for continued lines. + +Having such an explicit normalizing command allows for importing PO +files from other sources, but also eases the evolution of the current +convention, evolution driven mostly by aesthetic concerns, as of now. +It is easy to make suggested adjustments at a later time, as the +normalizing command and eventually, other GNU @code{gettext} tools +should greatly automate conformance. A description of the canonical +string format is given below, for the particular benefit of those not +having GNU Emacs handy, and who would nevertheless want to handcraft +their PO files in nice ways. + +Right now, in PO mode, strings are single line or multi-line. A string +goes multi-line if and only if it has @emph{embedded} newlines, that +is, if it matches @samp{[^\n]\n+[^\n]}. So, we would have: + +@example +msgstr "\n\nHello, world!\n\n\n" +@end example + +but, replacing the space by a newline, this becomes: + +@example +msgstr "" +"\n" +"\n" +"Hello,\n" +"world!\n" +"\n" +"\n" +@end example + +We are deliberately using a caricatural example, here, to make the +point clearer. Usually, multi-lines are not that bad looking. +It is probable that we will implement the following suggestion. +We might lump together all initial newlines into the empty string, +and also all newlines introducing empty lines (that is, for @w{@var{n} +> 1}, the @var{n}-1'th last newlines would go together on a separate +string), so making the previous example appear: + +@example +msgstr "\n\n" +"Hello,\n" +"world!\n" +"\n\n" +@end example + +There are a few yet undecided little points about string normalization, +to be documented in this manual, once these questions settle. + +@node Sources, Initial, Basics, Top +@chapter Preparing Program Sources + +@c FIXME: Rewrite (the whole chapter). + +For the programmer, changes to the C source code fall into three +categories. First, you have to make the localization functions +known to all modules needing message translation. Second, you should +properly trigger the operation of GNU @code{gettext} when the program +initializes, usually from the @code{main} function. Last, you should +identify and especially mark all constant strings in your program +needing translation. + +Presuming that your set of programs, or package, has been adjusted +so all needed GNU @code{gettext} files are available, and your +@file{Makefile} files are adjusted (@pxref{Maintainers}), each C module +having translated C strings should contain the line: + +@example +#include <libintl.h> +@end example + +The remaining changes to your C sources are discussed in the further +sections of this chapter. + +@menu +* Triggering:: Triggering @code{gettext} Operations +* Mark Keywords:: How Marks Appears in Sources +* Marking:: Marking Translatable Strings +* c-format:: Telling something about the following string +* Special cases:: Special Cases of Translatable Strings +@end menu + +@node Triggering, Mark Keywords, Sources, Sources +@section Triggering @code{gettext} Operations + +The initialization of locale data should be done with more or less +the same code in every program, as demonstrated below: + +@example +@group +int +main (argc, argv) + int argc; + char argv; +@{ + @dots{} + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + @dots{} +@} +@end group +@end example + +@var{PACKAGE} and @var{LOCALEDIR} should be provided either by +@file{config.h} or by the Makefile. For now consult the @code{gettext} +sources for more information. + +The use of @code{LC_ALL} might not be appropriate for you. +@code{LC_ALL} includes all locale categories and especially +@code{LC_CTYPE}. This later category is responsible for determining +character classes with the @code{isalnum} etc. functions from +@file{ctype.h} which could especially for programs, which process some +kind of input language, be wrong. For example this would mean that a +source code using the @,{c} (c-cedilla character) is runnable in +France but not in the U.S. + +Some systems also have problems with parsing number using the +@code{scanf} functions if an other but the @code{LC_ALL} locale is used. +The standards say that additional formats but the one known in the +@code{"C"} locale might be recognized. But some systems seem to reject +numbers in the @code{"C"} locale format. In some situation, it might +also be a problem with the notation itself which makes it impossible to +recognize whether the number is in the @code{"C"} locale or the local +format. This can happen if thousands separator characters are used. +Some locales define this character accordfing to the national +conventions to @code{'.'} which is the same character used in the +@code{"C"} locale to denote the decimal point. + +So it is sometimes necessary to replace the @code{LC_ALL} line in the +code above by a sequence of @code{setlocale} lines + +@example +@group +@{ + @dots{} + setlocale (LC_TIME, ""); + setlocale (LC_MESSAGES, ""); + @dots{} +@} +@end group +@end example + +@noindent +or to switch for and back to the character class in question. On all +POSIX conformant systems the locale categories @code{LC_CTYPE}, +@code{LC_COLLATE}, @code{LC_MONETARY}, @code{LC_NUMERIC}, and +@code{LC_TIME} are available. On some modern systems there is also a +locale @code{LC_MESSAGES} which is called on some old, XPG2 compliant +systems @code{LC_RESPONSES}. + +@node Mark Keywords, Marking, Triggering, Sources +@section How Marks Appears in Sources + +All strings requiring translation should be marked in the C sources. Marking +is done in such a way that each translatable string appears to be +the sole argument of some function or preprocessor macro. There are +only a few such possible functions or macros meant for translation, +and their names are said to be marking keywords. The marking is +attached to strings themselves, rather than to what we do with them. +This approach has more uses. A blatant example is an error message +produced by formatting. The format string needs translation, as +well as some strings inserted through some @samp{%s} specification +in the format, while the result from @code{sprintf} may have so many +different instances that it is impractical to list them all in some +@samp{error_string_out()} routine, say. + +This marking operation has two goals. The first goal of marking +is for triggering the retrieval of the translation, at run time. +The keyword are possibly resolved into a routine able to dynamically +return the proper translation, as far as possible or wanted, for the +argument string. Most localizable strings are found in executable +positions, that is, attached to variables or given as parameters to +functions. But this is not universal usage, and some translatable +strings appear in structured initializations. @xref{Special cases}. + +The second goal of the marking operation is to help @code{xgettext} +at properly extracting all translatable strings when it scans a set +of program sources and produces PO file templates. + +The canonical keyword for marking translatable strings is +@samp{gettext}, it gave its name to the whole GNU @code{gettext} +package. For packages making only light use of the @samp{gettext} +keyword, macro or function, it is easily used @emph{as is}. However, +for packages using the @code{gettext} interface more heavily, it +is usually more convenient to give the main keyword a shorter, less +obtrusive name. Indeed, the keyword might appear on a lot of strings +all over the package, and programmers usually do not want nor need +their program sources to remind them forcefully, all the time, that they +are internationalized. Further, a long keyword has the disadvantage +of using more horizontal space, forcing more indentation work on +sources for those trying to keep them within 79 or 80 columns. + +Many packages use @samp{_} (a simple underline) as a keyword, +and write @samp{_("Translatable string")} instead of @samp{gettext +("Translatable string")}. Further, the coding rule, from GNU standards, +wanting that there is a space between the keyword and the opening +parenthesis is relaxed, in practice, for this particular usage. +So, the textual overhead per translatable string is reduced to +only three characters: the underline and the two parentheses. +However, even if GNU @code{gettext} uses this convention internally, +it does not offer it officially. The real, genuine keyword is truly +@samp{gettext} indeed. It is fairly easy for those wanting to use +@samp{_} instead of @samp{gettext} to declare: + +@example +#include <libintl.h> +#define _(String) gettext (String) +@end example + +@noindent +instead of merely using @samp{#include <libintl.h>}. + +Later on, the maintenance is relatively easy. If, as a programmer, +you add or modify a string, you will have to ask yourself if the +new or altered string requires translation, and include it within +@samp{_()} if you think it should be translated. @samp{"%s: %d"} is +an example of string @emph{not} requiring translation! + +@node Marking, c-format, Mark Keywords, Sources +@section Marking Translatable Strings + +In PO mode, one set of features is meant more for the programmer than +for the translator, and allows him to interactively mark which strings, +in a set of program sources, are translatable, and which are not. +Even if it is a fairly easy job for a programmer to find and mark +such strings by other means, using any editor of his choice, PO mode +makes this work more comfortable. Further, this gives translators +who feel a little like programmers, or programmers who feel a little +like translators, a tool letting them work at marking translatable +strings in the program sources, while simultaneously producing a set of +translation in some language, for the package being internationalized. + +The set of program sources, targetted by the PO mode commands describe +here, should have an Emacs tags table constructed for your project, +prior to using these PO file commands. This is easy to do. In any +shell window, change the directory to the root of your project, then +execute a command resembling: + +@example +etags src/*.[hc] lib/*.[hc] +@end example + +@noindent +presuming here you want to process all @file{.h} and @file{.c} files +from the @file{src/} and @file{lib/} directories. This command will +explore all said files and create a @file{TAGS} file in your root +directory, somewhat summarizing the contents using a special file +format Emacs can understand. + +For packages following the GNU coding standards, there is +a make goal @code{tags} or @code{TAGS} which construct the tag files in +all directories and for all files containing source code. + +Once your @file{TAGS} file is ready, the following commands assist +the programmer at marking translatable strings in his set of sources. +But these commands are necessarily driven from within a PO file +window, and it is likely that you do not even have such a PO file yet. +This is not a problem at all, as you may safely open a new, empty PO +file, mainly for using these commands. This empty PO file will slowly +fill in while you mark strings as translatable in your program sources. + +@table @kbd +@item , +Search through program sources for a string which looks like a +candidate for translation. + +@item M-, +Mark the last string found with @samp{_()}. + +@item M-. +Mark the last string found with a keyword taken from a set of possible +keywords. This command with a prefix allows some management of these +keywords. + +@end table + +The @kbd{,} (@code{po-tags-search}) command search for the next +occurrence of a string which looks like a possible candidate for +translation, and displays the program source in another Emacs window, +positioned in such a way that the string is near the top of this other +window. If the string is too big to fit whole in this window, it is +positioned so only its end is shown. In any case, the cursor +is left in the PO file window. If the shown string would be better +presented differently in different native languages, you may mark it +using @kbd{M-,} or @kbd{M-.}. Otherwise, you might rather ignore it +and skip to the next string by merely repeating the @kbd{,} command. + +A string is a good candidate for translation if it contains a sequence +of three or more letters. A string containing at most two letters in +a row will be considered as a candidate if it has more letters than +non-letters. The command disregards strings containing no letters, +or isolated letters only. It also disregards strings within comments, +or strings already marked with some keyword PO mode knows (see below). + +If you have never told Emacs about some @file{TAGS} file to use, the +command will request that you specify one from the minibuffer, the +first time you use the command. You may later change your @file{TAGS} +file by using the regular Emacs command @w{@kbd{M-x visit-tags-table}}, +which will ask you to name the precise @file{TAGS} file you want +to use. @xref{Tags, , Tag Tables, emacs, The Emacs Editor}. + +Each time you use the @kbd{,} command, the search resumes from where it was +left by the previous search, and goes through all program sources, +obeying the @file{TAGS} file, until all sources have been processed. +However, by giving a prefix argument to the command @w{(@kbd{C-u +,})}, you may request that the search be restarted all over again +from the first program source; but in this case, strings that you +recently marked as translatable will be automatically skipped. + +Using this @kbd{,} command does not prevent using of other regular +Emacs tags commands. For example, regular @code{tags-search} or +@code{tags-query-replace} commands may be used without disrupting the +independent @kbd{,} search sequence. However, as implemented, the +@emph{initial} @kbd{,} command (or the @kbd{,} command is used with a +prefix) might also reinitialize the regular Emacs tags searching to the +first tags file, this reinitialization might be considered spurious. + +The @kbd{M-,} (@code{po-mark-translatable}) command will mark the +recently found string with the @samp{_} keyword. The @kbd{M-.} +(@code{po-select-mark-and-mark}) command will request that you type +one keyword from the minibuffer and use that keyword for marking +the string. Both commands will automatically create a new PO file +untranslated entry for the string being marked, and make it the +current entry (making it easy for you to immediately proceed to its +translation, if you feel like doing it right away). It is possible +that the modifications made to the program source by @kbd{M-,} or +@kbd{M-.} render some source line longer than 80 columns, forcing you +to break and re-indent this line differently. You may use the @kbd{O} +command from PO mode, or any other window changing command from +GNU Emacs, to break out into the program source window, and do any +needed adjustments. You will have to use some regular Emacs command +to return the cursor to the PO file window, if you want command +@kbd{,} for the next string, say. + +The @kbd{M-.} command has a few built-in speedups, so you do not +have to explicitly type all keywords all the time. The first such +speedup is that you are presented with a @emph{preferred} keyword, +which you may accept by merely typing @kbd{@key{RET}} at the prompt. +The second speedup is that you may type any non-ambiguous prefix of the +keyword you really mean, and the command will complete it automatically +for you. This also means that PO mode has to @emph{know} all +your possible keywords, and that it will not accept mistyped keywords. + +If you reply @kbd{?} to the keyword request, the command gives a +list of all known keywords, from which you may choose. When the +command is prefixed by an argument @w{(@kbd{C-u M-.})}, it inhibits +updating any program source or PO file buffer, and does some simple +keyword management instead. In this case, the command asks for a +keyword, written in full, which becomes a new allowed keyword for +later @kbd{M-.} commands. Moreover, this new keyword automatically +becomes the @emph{preferred} keyword for later commands. By typing +an already known keyword in response to @w{@kbd{C-u M-.}}, one merely +changes the @emph{preferred} keyword and does nothing more. + +All keywords known for @kbd{M-.} are recognized by the @kbd{,} command +when scanning for strings, and strings already marked by any of those +known keywords are automatically skipped. If many PO files are opened +simultaneously, each one has its own independent set of known keywords. +There is no provision in PO mode, currently, for deleting a known +keyword, you have to quit the file (maybe using @kbd{q}) and reopen +it afresh. When a PO file is newly brought up in an Emacs window, only +@samp{gettext} and @samp{_} are known as keywords, and @samp{gettext} +is preferred for the @kbd{M-.} command. In fact, this is not useful to +prefer @samp{_}, as this one is already built in the @kbd{M-,} command. + +@node c-format, Special cases, Marking, Sources +@section Special Comments preceding Keywords + +@c FIXME document c-format and no-c-format. + +In C programs strings are often used within calls of functions from the +@code{printf} family. The special thing about these format strings is +that they can contain format specifiers introduced with @kbd{%}. Assume +we have the code + +@example +printf (gettext ("String `%s' has %d characters\n"), s, strlen (s)); +@end example + +@noindent +A possible German translation for the above string might be: + +@example +"%d Zeichen lang ist die Zeichenkette `%s'" +@end example + +A C programmer, even if he cannot speak German, will recognize that +there is something wrong here. The order of the two format specifiers +is changed but of course the arguments in the @code{printf} don't have. +This will most probably lead to problems because now the length of the +string is regarded as the address. + +To prevent errors at runtime caused by translations the @code{msgfmt} +tool can check statically whether the arguments in the original and the +translation string match in type and number. If this is not the case a +warning will be given and the error cannot causes problems at runtime. + +@noindent +If the word order in the above German translation would be correct one +would have to write + +@example +"%2$d Zeichen lang ist die Zeichenkette `%1$s'" +@end example + +@noindent +The routines in @code{msgfmt} know about this special notation. + +Because not all strings in a program must be format strings it is not +useful for @code{msgfmt} to test all the strings in the @file{.po} file. +This might cause problems because the string might contain what looks +like a format specifier, but the string is not used in @code{printf}. + +Therefore the @code{xgettext} adds a special tag to those messages it +thinks might be a format string. There is no absolute rule for this, +only a heuristic. In the @file{.po} file the entry is marked using the +@code{c-format} flag in the @kbd{#,} comment line (@pxref{PO Files}). + +The careful reader now might say that this again can cause problems. +The heuristic might guess it wrong. This is true and therefore +@code{xgettext} knows about special kind of comment which lets +the programmer take over the decision. If in the same line or +the immediately preceding line of the @code{gettext} keyword +the @code{xgettext} program find a comment containing the words +@kbd{xgettext:c-format} it will mark the string in any case with +the @kbd{c-format} flag. This kind of comment should be used when +@code{xgettext} does not recognize the string as a format string but +is really is one and it should be tested. Please note that when the +comment is in the same line of the @code{gettext} keyword, it must be +before the string to be translated. + +This situation happens quite often. The @code{printf} function is often +called with strings which do not contain a format specifier. Of course +one would normally use @code{fputs} but it does happen. In this case +@code{xgettext} does not recognize this as a format string but what +happens if the translation introduces a valid format specifier? The +@code{printf} function will try to access one of the parameter but none +exists because the original code does not refer to any parameter. + +@code{xgettext} of course could make a wrong decision the other way +round. A string marked as a format string is not really a format +string. In this case the @code{msgfmt} might give too many warnings and +would prevent translating the @file{.po} file. The method to prevent +this wrong decision is similar to the one used above, only the comment +to use must contain the string @kbd{xgettext:no-c-format}. + +If a string is marked with @kbd{c-format} and this is not correct the +user can find out who is responsible for the decision. @xref{xgettext +Invocation} to see how the @kbd{--debug} option can be used for solving +this problem. + +@node Special cases, , c-format, Sources +@section Special Cases of Translatable Strings + +The attentive reader might now point out that it is not always possible +to mark translatable string with @code{gettext} or something like this. +Consider the following case: + +@example +@group +@{ + static const char *messages[] = @{ + "some very meaningful message", + "and another one" + @}; + const char *string; + @dots{} + string + = index > 1 ? "a default message" : messages[index]; + + fputs (string); + @dots{} +@} +@end group +@end example + +While it is no problem to mark the string @code{"a default message"} it +is not possible to mark the string initializers for @code{messages}. +What is to be done? We have to fulfill two tasks. First we have to mark the +strings so that the @code{xgettext} program (@pxref{xgettext Invocation}) +can find them, and second we have to translate the string at runtime +before printing them. + +The first task can be fulfilled by creating a new keyword, which names a +no-op. For the second we have to mark all access points to a string +from the array. So one solution can look like this: + +@example +@group +#define gettext_noop(String) (String) + +@{ + static const char *messages[] = @{ + gettext_noop ("some very meaningful message"), + gettext_noop ("and another one") + @}; + const char *string; + @dots{} + string + = index > 1 ? gettext ("a default message") : gettext (messages[index]); + + fputs (string); + @dots{} +@} +@end group +@end example + +Please convince yourself that the string which is written by +@code{fputs} is translated in any case. How to get @code{xgettext} know +the additional keyword @code{gettext_noop} is explained in @ref{xgettext +Invocation}. + +The above is of course not the only solution. You could also come along +with the following one: + +@example +@group +#define gettext_noop(String) (String) + +@{ + static const char *messages[] = @{ + gettext_noop ("some very meaningful message", + gettext_noop ("and another one") + @}; + const char *string; + @dots{} + string + = index > 1 ? gettext_noop ("a default message") : messages[index]; + + fputs (gettext (string)); + @dots{} +@} +@end group +@end example + +But this has some drawbacks. First the programmer has to take care that +he uses @code{gettext_noop} for the string @code{"a default message"}. +A use of @code{gettext} could have in rare cases unpredictable results. +The second reason is found in the internals of the GNU @code{gettext} +Library which will make this solution less efficient. + +One advantage is that you need not make control flow analysis to make +sure the output is really translated in any case. But this analysis is +generally not very difficult. If it should be in any situation you can +use this second method in this situation. + +@node Initial, Updating, Sources, Top +@chapter Making the Initial PO File + +@c FIXME: Rewrite. + +@menu +* xgettext Invocation:: Invoking the @code{xgettext} Program +* C Sources Context:: C Sources Context +* Compendium:: Using Translation Compendiums +@end menu + +@node xgettext Invocation, C Sources Context, Initial, Initial +@section Invoking the @code{xgettext} Program + +@c FIXME: Rewrite. + +@example +xgettext [@var{option}] @var{inputfile} @dots{} +@end example + +@table @samp +@item -a +@itemx --extract-all +Extract all strings. + +@item -c [@var{tag}] +@itemx --add-comments[=@var{tag}] +Place comment block with @var{tag} (or those preceding keyword lines) +in output file. + +@item -C +@itemx --c++ +Recognize C++ style comments. + +@itemx --debug +Use the flags @kbd{c-format} and @kbd{possible-c-format} to show who was +responsible for marking a message as a format string. The later form is +used if the @code{xgettext} program decided, the format form is used if +the programmer prescribed it. + +By default only the @kbd{c-format} form is used. The translator should +not have to care about these details. + +@item -d @var{name} +@itemx --default-domain=@var{name} +Use @file{@var{name}.po} for output (instead of @file{messages.po}). + +The special domain name @file{-} or @file{/dev/stdout} means to write +the output to @file{stdout}. + +@item -D @var{directory} +@itemx --directory=@var{directory} +Change to @var{directory} before beginning to search and scan source +files. The resulting @file{.po} file will be written relative to the +original directory, though. + +@item -f @var{file} +@itemx --files-from=@var{file} +Read the names of the input files from @var{file} instead of getting +them from the command line. + +@itemx --force +Always write output file even if no message is defined. + +@item -h +@itemx --help +Display this help and exit. + +@item -I @var{list} +@itemx --input-path=@var{list} +List of directories searched for input files. + +@item -j +@itemx --join-existing +Join messages with existing file. + +@item -k @var{word} +@itemx --keyword[=@var{word}] +Additonal keyword to be looked for (without @var{word} means not to +use default keywords). + +The default keywords, which are always looked for if not explicitly +disabled, are @code{gettext}, @code{dgettext}, @code{dcgettext} and +@code{gettext_noop}. + +@item -m [@var{string}] +@itemx --msgstr-prefix[=@var{string}] +Use @var{string} or "" as prefix for msgstr entries. + +@item -M [@var{string}] +@itemx --msgstr-suffix[=@var{string}] +Use @var{string} or "" as suffix for msgstr entries. + +@item --no-location +Do not write @samp{#: @var{filename}:@var{line}} lines. + +@item -n +@itemx --add-location +Generate @samp{#: @var{filename}:@var{line}} lines (default). + +@item --omit-header +Don't write header with @samp{msgid ""} entry. + +This is useful for testing purposes because it eliminates a source +of variance for generated @code{.gmo} files. We can ship some of +these files in the GNU @code{gettext} package, and the result of +regenerating them through @code{msgfmt} should yield the same values. + +@item -p @var{dir} +@itemx --output-dir=@var{dir} +Output files will be placed in directory @var{dir}. + +@item -s +@itemx --sort-output +Generate sorted output and remove duplicates. + +@item --strict +Write out strict Uniforum conforming PO file. + +@item -v +@itemx --version +Output version information and exit. + +@item -x @var{file} +@itemx --exclude-file=@var{file} +Entries from @var{file} are not extracted. + +@end table + +Search path for supplementary PO files is: +@file{/usr/local/share/nls/src/}. + +If @var{inputfile} is @samp{-}, standard input is read. + +This implementation of @code{xgettext} is able to process a few awkward +cases, like strings in preprocessor macros, ANSI concatenation of +adjacent strings, and escaped end of lines for continued strings. + +@node C Sources Context, Compendium, xgettext Invocation, Initial +@section C Sources Context + +PO mode is particularily powerful when used with PO files +created through GNU @code{gettext} utilities, as those utilities +insert special comments in the PO files they generate. +Some of these special comments relate the PO file entry to +exactly where the untranslated string appears in the program sources. + +When the translator gets to an untranslated entry, she is fairly +often faced with an original string which is not as informative as +it normally should be, being succinct, cryptic, or otherwise ambiguous. +Before chosing how to translate the string, she needs to understand +better what the string really means and how tight the translation has +to be. Most of times, when problems arise, the only way left to make +her judgment is looking at the true program sources from where this +string originated, searching for surrounding comments the programmer +might have put in there, and looking around for helping clues of +@emph{any} kind. + +Surely, when looking at program sources, the translator will receive +more help if she is a fluent programmer. However, even if she is +not versed in programming and feels a little lost in C code, the +translator should not be shy at taking a look, once in a while. +It is most probable that she will still be able to find some of the +hints she needs. She will learn quickly to not feel uncomfortable +in program code, paying more attention to programmer's comments, +variable and function names (if he dared chosing them well), and +overall organization, than to programmation itself. + +The following commands are meant to help the translator at getting +program source context for a PO file entry. + +@table @kbd +@item s +Resume the display of a program source context, or cycle through them. + +@item M-s +Display of a program source context selected by menu. + +@item S +Add a directory to the search path for source files. + +@item M-S +Delete a directory from the search path for source files. + +@end table + +The commands @kbd{s} (@code{po-cycle-reference}) and @kbd{M-s} +(@code{po-select-source-reference}) both open another window displaying +some source program file, and already positioned in such a way that +it shows an actual use of the string to be translated. By doing +so, the command gives source program context for the string. But if +the entry has no source context references, or if all references +are unresolved along the search path for program sources, then the +command diagnoses this as an error. + +Even if @kbd{s} (or @kbd{M-s}) opens a new window, the cursor stays +in the PO file window. If the translator really wants to +get into the program source window, she ought to do it explicitly, +maybe by using command @kbd{O}. + +When @kbd{s} is typed for the first time, or for a PO file entry which +is different of the last one used for getting source context, then the +command reacts by giving the first context available for this entry, +if any. If some context has already been recently displayed for the +current PO file entry, and the translator wandered off to do other +things, typing @kbd{s} again will merely resume, in another window, +the context last displayed. In particular, if the translator moved +the cursor away from the context in the source file, the command will +bring the cursor back to the context. By using @kbd{s} many times +in a row, with no other commands intervening, PO mode will cycle to +the next available contexts for this particular entry, getting back +to the first context once the last has been shown. + +The command @kbd{M-s} behaves differently. Instead of cycling through +references, it lets the translator choose of particular reference among +many, and displays that reference. It is best used with completion, +if the translator types @kbd{TAB} immediately after @kbd{M-s}, in +response to the question, she will be offered a menu of all possible +references, as a reminder of which are the acceptable answers. +This command is useful only where there are really many contexts +available for a single string to translate. + +Program source files are usually found relative to where the PO +file stands. As a special provision, when this fails, the file is +also looked for, but relative to the directory immediately above it. +Those two cases take proper care of most PO files. However, it might +happen that a PO file has been moved, or is edited in a different +place than its normal location. When this happens, the translator +should tell PO mode in which directory normally sits the genuine PO +file. Many such directories may be specified, and all together, they +constitute what is called the @dfn{search path} for program sources. +The command @kbd{S} (@code{po-consider-source-path}) is used to interactively +enter a new directory at the front of the search path, and the command +@kbd{M-S} (@code{po-ignore-source-path}) is used to select, with completion, +one of the directories she does not want anymore on the search path. + +@node Compendium, , C Sources Context, Initial +@section Using Translation Compendiums + +@c FIXME: Rewrite. + +Compendiums are yet to be implemented. + +An incoming PO mode feature will let the translator maintain a +compendium of already achieved translations. A @dfn{compendium} +is a special PO file containing a set of translations recurring in +many different packages. The translator will be given commands for +adding entries to her compendium, and later initializing untranslated +entries, or updating already translated entries, from translations +kept in the compendium. For this to work, however, the compendium +would have to be normalized. @xref{Normalizing}. + +@c It is not useful that I modify the @file{lib/} routines if not done in +@c the true sources. How do you/I/they proceed for getting this job done? +@c I presume that @file{lib/} routines will all use @code{gettext} for +@c the time being. + +@node Updating, Binaries, Initial, Top +@chapter Updating Existing PO Files + +@c FIXME: Rewrite. + +@menu +* msgmerge Invocation:: Invoking the @code{msgmerge} Program +* Translated Entries:: +* Fuzzy Entries:: +* Untranslated Entries:: Untranslated Entries +* Obsolete Entries:: Obsolete Entries +* Modifying Translations:: Modifying Translations +* Modifying Comments:: Modifying Comments +* Auxiliary:: Consulting Auxiliary PO Files +@end menu + +@node msgmerge Invocation, Translated Entries, Updating, Updating +@section Invoking the @code{msgmerge} Program + +@c FIXME: Rewrite. + +@c @example +@c tupdate --help +@c tupdate --version +@c tupdate @var{new} @var{old} +@c @end example + +@c File @var{new} is the last created PO file (generally by +@c @code{xgettext}). It need not contain any translations. File +@c @var{old} is the PO file including the old translations which will +@c be taken over to the newly created file as long as they still match. + +@c When English messages change in the programs, this is reflected in +@c the PO file as extracted by @code{xgettext}. In large messages, that +@c can be hard to detect, and will obviously result in an incomplete +@c translation. One of the virtues of @code{tupdate} is that it detects +@c such changes, saving the previous translation into a PO file comment, +@c so marking the entry as obsolete, and giving the modified string with +@c an empty translation, that is, marking the entry as untranslated. + +@node Translated Entries +@section Translated Entries + +Each PO file entry for which the @code{msgstr} field has been filled with +a translation, and which is not marked as fuzzy (@pxref{Fuzzy Entries}), +is a said to be a @dfn{translated} entry. Only translated entries will +later be compiled by GNU @code{msgfmt} and become usable in programs. +Other entry types will be excluded; translation will not occur for them. + +Some commands are more specifically related to translated entry processing. + +@table @kbd +@item t +Find the next translated entry. + +@item M-t +Find the previous translated entry. + +@end table + +The commands @kbd{t} (@code{po-next-translated-entry}) and @kbd{M-t} +(@code{po-previous-transted-entry}) move forwards or backwards, chasing +for an translated entry. If none is found, the search is extended and +wraps around in the PO file buffer. + +Translated entries usually result from the translator having edited in +a translation for them, @ref{Modifying Translations}. However, if the +variable @code{po-auto-fuzzy-on-edit} is not @code{nil}, the entry having +received a new translation first becomes a fuzzy entry, which ought to +be later unfuzzied before becoming an official, genuine translated entry. +@xref{Fuzzy Entries}. + +@node Fuzzy Entries, Untranslated Entries, Translated Entries, Updating +@section Fuzzy Entries + +Each PO file entry may have a set of @dfn{attributes}, which are +qualities given an name and explicitely associated with the entry +translation, using a special system comment. One of these attributes +has the name @code{fuzzy}, and entries having this attribute are said +to have a fuzzy translation. They are called fuzzy entries, for short. + +Fuzzy entries, even if they account for translated entries for +most other purposes, usually call for revision by the translator. +Those may be produced by applying the program @code{msgmerge} to +update an older translated PO files according to a new PO template +file, when this tool hypothesises that some new @code{msgid} has +been modified only slightly out of an older one, and chooses to pair +what it thinks to be the old translation for the new modified entry. +The slight alteration in the original string (the @code{msgid} string) +should often be reflected in the translated string, and this requires +the intervention of the translator. For this reason, @code{msgmerge} +might mark some entries as being fuzzy. + +Also, the translator may decide herself to mark an entry as fuzzy +for her own convenience, when she wants to remember that the entry +has to be later revisited. So, some commands are more specifically +related to fuzzy entry processing. + +@table @kbd +@item f +Find the next fuzzy entry. + +@item M-f +Find the previous fuzzy entry. + +@item TAB +Remove the fuzzy attribute of the current entry. + +@end table + +The commands @kbd{f} (@code{po-next-fuzzy}) and @kbd{M-f} +(@code{po-previous-fuzzy}) move forwards or backwards, chasing for +a fuzzy entry. If none is found, the search is extended and wraps +around in the PO file buffer. + +The command @kbd{TAB} (@code{po-unfuzzy}) removes the fuzzy +attribute associated with an entry, usually leaving it translated. +Further, if the variable @code{po-auto-select-on-unfuzzy} has not +the @code{nil} value, the @kbd{TAB} command will automatically chase +for another interesting entry to work on. The initial value of +@code{po-auto-select-on-unfuzzy} is @code{nil}. + +The initial value of @code{po-auto-fuzzy-on-edit} is @code{nil}. However, +if the variable @code{po-auto-fuzzy-on-edit} is set to @code{t}, any entry +edited through the @kbd{RET} command is marked fuzzy, as a way to ensure +some kind of double check, later. In this case, the usual paradigm is +that an entry becomes fuzzy (if not already) whenever the translator +modifies it. If she is satisfied with the translation, she then uses +@kbd{TAB} to pick another entry to work on, clearing the fuzzy attribute +on the same blow. If she is not satisfied yet, she merely uses @kbd{SPC} +to chase another entry, leaving the entry fuzzy. + +The translator may also use the @kbd{DEL} command +(@code{po-fade-out-entry}) over any translated entry to mark it as being +fuzzy, when she wants to easily leave a trace she wants to later return +working at this entry. + +Also, when time comes to quit working on a PO file buffer with the @kbd{q} +command, the translator is asked for confirmation, if fuzzy string +still exists. + +@node Untranslated Entries, Obsolete Entries, Fuzzy Entries, Updating +@section Untranslated Entries + +When @code{xgettext} originally creates a PO file, unless told +otherwise, it initializes the @code{msgid} field with the untranslated +string, and leaves the @code{msgstr} string to be empty. Such entries, +having an empty translation, are said to be @dfn{untranslated} entries. +Later, when the programmer slightly modifies some string right in +the program, this change is later reflected in the PO file +by the appearance of a new untranslated entry for the modified string. + +The usual commands moving from entry to entry consider untranslated +entries on the same level as active entries. Untranslated entries +are easily recognizable by the fact they end with @w{@samp{msgstr ""}}. + +The work of the translator might be (quite naively) seen as the process +of seeking after an untranslated entry, editing a translation for +it, and repeating these actions until no untranslated entries remain. +Some commands are more specifically related to untranslated entry +processing. + +@table @kbd +@item u +Find the next untranslated entry. + +@item M-u +Find the previous untranslated entry. + +@item k +Turn the current entry into an untranslated one. + +@end table + +The commands @kbd{u} (@code{po-next-untranslated-entry}) and @kbd{M-u} +(@code{po-previous-untransted-entry}) move forwards or backwards, +chasing for an untranslated entry. If none is found, the search is +extended and wraps around in the PO file buffer. + +An entry can be turned back into an untranslated entry by +merely emptying its translation, using the command @kbd{k} +(@code{po-kill-msgstr}). @xref{Modifying Translations}. + +Also, when time comes to quit working on a PO file buffer +with the @kbd{q} command, the translator is asked for confirmation, +if some untranslated string still exists. + +@node Obsolete Entries, Modifying Translations, Untranslated Entries, Updating +@section Obsolete Entries + +By @dfn{obsolete} PO file entries, we mean those entries which are +commented out, usually by @code{msgmerge} when it found that the +translation is not needed anymore by the package being localized. + +The usual commands moving from entry to entry consider obsolete +entries on the same level as active entries. Obsolete entries are +easily recognizable by the fact that all their lines start with +@kbd{#}, even those lines containing @code{msgid} or @code{msgstr}. + +Commands exist for emptying the translation or reinitializing it +to the original untranslated string. Commands interfacing with the +kill ring may force some previously saved text into the translation. +The user may interactively edit the translation. All these commands +may apply to obsolete entries, carefully leaving the entry obsolete +after the fact. + +Moreover, some commands are more specifically related to obsolete +entry processing. + +@table @kbd +@item o +Find the next obsolete entry. + +@item M-o +Find the previous obsolete entry. + +@item DEL +Make an active entry obsolete, or zap out an obsolete entry. + +@end table + +The commands @kbd{o} (@code{po-next-obsolete-entry}) and @kbd{M-o} +(@code{po-previous-obsolete-entry}) move forwards or backwards, +chasing for an obsolete entry. If none is found, the search is +extended and wraps around in the PO file buffer. + +PO mode does not provide ways for un-commenting an obsolete entry +and making it active, because this would reintroduce an original +untranslated string which does not correspond to any marked string +in the program sources. This goes with the philosophy of never +introducing useless @code{msgid} values. + +However, it is possible to comment out an active entry, so making +it obsolete. GNU @code{gettext} utilities will later react to the +disappearance of a translation by using the untranslated string. +The command @kbd{DEL} (@code{po-fade-out-entry}) pushes the current entry +a little further towards annihilation. If the entry is active (it is a +translated entry), then it is first made fuzzy. If it is already fuzzy, +then the entry is merely commented out, with confirmation. If the entry +is already obsolete, then it is completely deleted from the PO file. +It is easy to recycle the translation so deleted into some other PO file +entry, usually one which is untranslated. @xref{Modifying Translations}. + +Here is a quite interesting problem to solve for later development of +PO mode, for those nights you are not sleepy. The idea would be that +PO mode might become bright enough, one of these days, to make good +guesses at retrieving the most probable candidate, among all obsolete +entries, for initializing the translation of a newly appeared string. +I think it might be a quite hard problem to do this algorithmically, as +we have to develop good and efficient measures of string similarity. +Right now, PO mode completely lets the decision to the translator, +when the time comes to find the adequate obsolete translation, it +merely tries to provide handy tools for helping her to do so. + +@node Modifying Translations, Modifying Comments, Obsolete Entries, Updating +@section Modifying Translations + +PO mode prevents direct edition of the PO file, by the usual +means Emacs give for altering a buffer's contents. By doing so, +it pretends helping the translator to avoid little clerical errors +about the overall file format, or the proper quoting of strings, +as those errors would be easily made. Other kinds of errors are +still possible, but some may be caught and diagnosed by the batch +validation process, which the translator may always trigger by the +@kbd{V} command. For all other errors, the translator has to rely on +her own judgment, and also on the linguistic reports submitted to her +by the users of the translated package, having the same mother tongue. + +When the time comes to create a translation, correct an error diagnosed +mechanically or reported by a user, the translators have to resort to +using the following commands for modifying the translations. + +@table @kbd + +@item RET +Interactively edit the translation. + +@item LFD +Reinitialize the translation with the original, untranslated string. + +@item k +Save the translation on the kill ring, and delete it. + +@item w +Save the translation on the kill ring, without deleting it. + +@item y +Replace the translation, taking the new from the kill ring. + +@end table + +The command @kbd{RET} (@code{po-edit-msgstr}) opens a new Emacs window +containing a copy of the translation taken from the current PO file entry, +all ready for edition, fully modifiable and with the complete extent of +GNU Emacs modifying commands. The string is presented to the translator +expunged of all quoting marks, and she will modify the @emph{unquoted} +string in this window to heart's content. Once done, the regular Emacs +command @kbd{M-C-c} (@code{exit-recursive-edit}) may be used to return the +edited translation into the PO file, replacing the original translation. +The keys @w{@kbd{C-c C-c}} are bound so they have the same effect as +@kbd{M-C-c}. + +If the translator becomes unsatisfied with her translation to the extent +she prefers keeping the translation which was existent prior to the +@kbd{RET} command, she may use the standard Emacs command @kbd{C-]} +(@code{abort-recursive-edit}) to merely get rid of edition, while +preserving the original translation. The keys @w{@kbd{C-c C-k}} are +bound so they have the same effect as @kbd{C-]}. Another way would +be for her to exit normally with @w{@kbd{C-c C-c}}, then type @code{U} +once for undoing the whole effect of last edition. + +Functions found on @code{po-subedit-mode-hook}, if any, are executed after +the string has been inserted in the edit buffer and before recursive edit +is entered. + +While editing her translation, the translator should pay attention to +not inserting unwanted @kbd{@key{RET}} (carriage returns) characters at +the end of the translated string if those are not meant to be there, +or to removing such characters when they are required. Since these +characters are not visible in the editing buffer, they are easily +introduced by mistake. To help her, @kbd{@key{RET}} automatically puts +the character @kbd{<} at the end of the string being edited, but this +@kbd{<} is not really part of the string. On exiting the editing +window with @w{@kbd{C-c C-c}}, PO mode automatically removes such +@kbd{<} and all whitespace added after it. If the translator adds +characters after the terminating @kbd{<}, it looses its delimiting +property and integrally becomes part of the string. If she removes +the delimiting @kbd{<}, then the edited string is taken @emph{as +is}, with all trailing newlines, even if invisible. Also, if the +translated string ought to end itself with a genuine @kbd{<}, then the +delimiting @kbd{<} may not be removed; so the string should appear, +in the editing window, as ending with two @kbd{<} in a row. + +When a translation (or a comment) is being edited, the translator +may move the cursor back into the PO file buffer and freely +move to other entries, browsing at will. The edited entry will +be recovered as soon as the edit ceases, because it is this entry +only which is being modified. If, with an edition still opened, the +translator wanders in the PO file buffer, she cannot modify +any other entry. If she tries to, PO mode will react by suggesting +that she abort the current edit, or else, by inviting her to finish +the current edit prior to any other modification. + +The command @kbd{LFD} (@code{po-msgid-to-msgstr}) initializes, or +reinitializes the translation with the original string. This command +is normally used when the translator wants to redo a fresh translation +of the original string, disregarding any previous work. + +It is possible to arrange so, whenever editing an untranslated +entry, the @kbd{LFD} command be automatically executed. If you set +@code{po-auto-edit-with-msgid} to @code{t}, the translation gets +initialised with the original string, in case none exist already. +The default value for @code{po-auto-edit-with-msgid} is @code{nil}. + +In fact, whether it is best to start a translation with an empty +string, or rather with a copy of the original string, is a matter of +taste or habit. Sometimes, the source language and the +target language are so different that is simply best to start writing +on an empty page. At other times, the source and target languages +are so close that it would be a waste to retype a number of words +already being written in the original string. A translator may also +like having the original string right under her eyes, as she will +progressively overwrite the original text with the translation, even +if this requires some extra editing work to get rid of the original. + +The command @kbd{k} (@code{po-kill-msgstr}) merely empties the +translation string, so turning the entry into an untranslated +one. But while doing so, its previous contents is put apart in +a special place, known as the kill ring. The command @kbd{w} +(@code{po-kill-ring-save-msgstr}) has also the effect of taking a +copy of the translation onto the kill ring, but it otherwise leaves +the entry alone, and does @emph{not} remove the translation from the +entry. Both commands use exactly the Emacs kill ring, which is shared +between buffers, and which is well known already to GNU Emacs lovers. + +The translator may use @kbd{k} or @kbd{w} many times in the course +of her work, as the kill ring may hold several saved translations. +From the kill ring, strings may later be reinserted in various +Emacs buffers. In particular, the kill ring may be used for moving +translation strings between different entries of a single PO file +buffer, or if the translator is handling many such buffers at once, +even between PO files. + +To facilitate exchanges with buffers which are not in PO mode, the +translation string put on the kill ring by the @kbd{k} command is fully +unquoted before being saved: external quotes are removed, multi-lines +strings are concatenated, and backslashed escaped sequences are turned +into their corresponding characters. In the special case of obsolete +entries, the translation is also uncommented prior to saving. + +The command @kbd{y} (@code{po-yank-msgstr}) completely replaces the +translation of the current entry by a string taken from the kill ring. +Following GNU Emacs terminology, we then say that the replacement +string is @dfn{yanked} into the PO file buffer. +@xref{Yanking, , , emacs, The Emacs Editor}. +The first time @kbd{y} is used, the translation receives the value of +the most recent addition to the kill ring. If @kbd{y} is typed once +again, immediately, without intervening keystrokes, the translation +just inserted is taken away and replaced by the second most recent +addition to the kill ring. By repeating @kbd{y} many times in a row, +the translator may travel along the kill ring for saved strings, +until she finds the string she really wanted. + +When a string is yanked into a PO file entry, it is fully and +automatically requoted for complying with the format PO files should +have. Further, if the entry is obsolete, PO mode then appropriately +push the inserted string inside comments. Once again, translators +should not burden themselves with quoting considerations besides, of +course, the necessity of the translated string itself respective to +the program using it. + +Note that @kbd{k} or @kbd{w} are not the only commands pushing strings +on the kill ring, as almost any PO mode command replacing translation +strings (or the translator comments) automatically save the old string +on the kill ring. The main exceptions to this general rule are the +yanking commands themselves. + +To better illustrate the operation of killing and yanking, let's +use an actual example, taken from a common situation. When the +programmer slightly modifies some string right in the program, his +change is later reflected in the PO file by the appearance +of a new untranslated entry for the modified string, and the fact +that the entry translating the original or unmodified string becomes +obsolete. In many cases, the translator might spare herself some work +by retrieving the unmodified translation from the obsolete entry, +then initializing the untranslated entry @code{msgstr} field with +this retrieved translation. Once this done, the obsolete entry is +not wanted anymore, and may be safely deleted. + +When the translator finds an untranslated entry and suspects that a +slight variant of the translation exists, she immediately uses @kbd{m} +to mark the current entry location, then starts chasing obsolete +entries with @kbd{o}, hoping to find some translation corresponding +to the unmodified string. Once found, she uses the @kbd{DEL} command +for deleting the obsolete entry, knowing that @kbd{DEL} also @emph{kills} +the translation, that is, pushes the translation on the kill ring. +Then, @kbd{r} returns to the initial untranslated entry, @kbd{y} +then @emph{yanks} the saved translation right into the @code{msgstr} +field. The translator is then free to use @kbd{@key{RET}} for fine +tuning the translation contents, and maybe to later use @kbd{u}, +then @kbd{m} again, for going on with the next untranslated string. + +When some sequence of keys has to be typed over and over again, the +translator may find it useful to become better acquainted with the GNU +Emacs capability of learning these sequences and playing them back under +request. @xref{Keyboard Macros, , , emacs, The Emacs Editor}. + +@node Modifying Comments, Auxiliary, Modifying Translations, Updating +@section Modifying Comments + +Any translation work done seriously will raise many linguistic +difficulties, for which decisions have to be made, and the choices +further documented. These documents may be saved within the +PO file in form of translator comments, which the translator +is free to create, delete, or modify at will. These comments may +be useful to herself when she returns to this PO file after a while. + +Comments not having whitespace after the initial @samp{#}, for example, +those beginning with @samp{#.} or @samp{#:}, are @emph{not} translator +comments, they are exclusively created by other @code{gettext} tools. +So, the commands below will never alter such system added comments, +they are not meant for the translator to modify. @xref{PO Files}. + +The following commands are somewhat similar to those modifying translations, +so the general indications given for those apply here. @xref{Modifying +Translations}. + +@table @kbd + +@item # +Interactively edit the translator comments. + +@item K +Save the translator comments on the kill ring, and delete it. + +@item W +Save the translator comments on the kill ring, without deleting it. + +@item Y +Replace the translator comments, taking the new from the kill ring. + +@end table + +These commands parallel PO mode commands for modifying the translation +strings, and behave much the same way as they do, except that they handle +this part of PO file comments meant for translator usage, rather +than the translation strings. So, if the descriptions given below are +slightly succinct, it is because the full details have already been given. +@xref{Modifying Translations}. + +The command @kbd{#} (@code{po-edit-comment}) opens a new Emacs +window containing a copy of the translator comments on the current +PO file entry. If there are no such comments, PO mode +understands that the translator wants to add a comment to the entry, +and she is presented with an empty screen. Comment marks (@kbd{#}) and +the space following them are automatically removed before edition, +and reinstated after. For translator comments pertaining to obsolete +entries, the uncommenting and recommenting operations are done twice. +Once in the editing window, the keys @w{@kbd{C-c C-c}} allow the +translator to tell she is finished with editing the comment. + +Functions found on @code{po-subedit-mode-hook}, if any, are executed after +the string has been inserted in the edit buffer and before recursive edit +is entered. + +The command @kbd{K} (@code{po-kill-comment}) get rid of all +translator comments, while saving those comments on the kill ring. +The command @kbd{W} (@code{po-kill-ring-save-comment}) takes +a copy of the translator comments on the kill ring, but leaves +them undisturbed in the current entry. The command @kbd{Y} +(@code{po-yank-comment}) completely replaces the translator comments +by a string taken at the front of the kill ring. When this command +is immediately repeated, the comments just inserted are withdrawn, +and replaced by other strings taken along the kill ring. + +On the kill ring, all strings have the same nature. There is no +distinction between @emph{translation} strings and @emph{translator +comments} strings. So, for example, let's presume the translator +has just finished editing a translation, and wants to create a new +translator comment to document why the previous translation was +not good, just to remember what was the problem. Foreseeing that she +will do that in her documentation, the translator may want to quote +the previous translation in her translator comments. To do so, she +may initialize the translator comments with the previous translation, +still at the head of the kill ring. Because editing already pushed the +previous translation on the kill ring, she merely has to type @kbd{M-w} +prior to @kbd{#}, and the previous translation will be right there, +all ready for being introduced by some explanatory text. + +On the other hand, presume there are some translator comments already +and that the translator wants to add to those comments, instead +of wholly replacing them. Then, she should edit the comment right +away with @kbd{#}. Once inside the editing window, she can use the +regular GNU Emacs commands @kbd{C-y} (@code{yank}) and @kbd{M-y} +(@code{yank-pop}) to get the previous translation where she likes. + +@node Auxiliary, , Modifying Comments, Updating +@section Consulting Auxiliary PO Files + +PO mode is able to help the knowledgeable translator, being fluent in +many languages, at taking advantage of translations already achieved +in other languages she just happens to know. It provides these other +language translations as additional context for her own work. Moreover, +it has features to ease the production of translations for many languages +at once, for translators preferring to work in this way. + +An @dfn{auxiliary} PO file is an existing PO file meant for the same +package the translator is working on, but targeted to a different mother +tongue language. Commands exist for declaring and handling auxiliary +PO files, and also for showing contexts for the entry under work. + +Here are the auxiliary file commands available in PO mode. + +@table @kbd +@item a +Seek auxiliary files for another translation for the same entry. + +@item M-a +Switch to a particular auxiliary file. + +@item A +Declare this PO file as an auxiliary file. + +@item M-A +Remove this PO file from the list of auxiliary files. + +@end table + +Command @kbd{A} (@code{po-consider-as-auxiliary}) adds the current +PO file to the list of auxiliary files, while command @kbd{M-A} +(@code{po-ignore-as-auxiliary} just removes it. + +The command @kbd{a} (@code{po-cycle-auxiliary}) seeks all auxiliary PO +files, round-robin, searching for a translated entry in some other language +having an @code{msgid} field identical as the one for the current entry. +The found PO file, if any, takes the place of the current PO file in +the display (its window gets on top). Before doing so, the current PO +file is also made into an auxiliary file, if not already. So, @kbd{a} +in this newly displayed PO file will seek another PO file, and so on, +so repeating @kbd{a} will eventually yield back the original PO file. + +The command @kbd{M-a} (@code{po-select-auxiliary}) asks the translator +for her choice of a particular auxiliary file, with completion, and +then switches to that selected PO file. The command also checks if +the selected file has an @code{msgid} field identical as the one for +the current entry, and if yes, this entry becomes current. Otherwise, +the cursor of the selected file is left undisturbed. + +For all this to work fully, auxiliary PO files will have to be normalized, +in that way that @code{msgid} fields should be written @emph{exactly} +the same way. It is possible to write @code{msgid} fields in various +ways for representing the same string, different writing would break the +proper behaviour of the auxiliary file commands of PO mode. This is not +expected to be much a problem in practice, as most existing PO files have +their @code{msgid} entries written by the same GNU @code{gettext} tools. + +However, PO files initially created by PO mode itself, while marking +strings in source files, are normalised differently. So are PO +files resulting of the the @samp{M-x normalize} command. Until these +discrepancies between PO mode and other GNU @code{gettext} tools get +fully resolved, the translator should stay aware of normalisation issues. + +@node Binaries, Users, Updating, Top +@chapter Producing Binary MO Files + +@c FIXME: Rewrite. + +@menu +* msgfmt Invocation:: Invoking the @code{msgfmt} Program +* MO Files:: The Format of GNU MO Files +@end menu + +@node msgfmt Invocation, MO Files, Binaries, Binaries +@section Invoking the @code{msgfmt} Program + +@c FIXME: Rewrite. + +@example +Usage: msgfmt [@var{option}] @var{filename}.po @dots{} +@end example + +@table @samp +@item -a @var{number} +@itemx --alignment=@var{number} +Align strings to @var{number} bytes (default: 1). +@c Currently the README mentions that this constant could be changed by +@c the installer by changing the value in config.h. Should this go away? + +@item -h +@itemx --help +Display this help and exit. + +@item --no-hash +Binary file will not include the hash table. + +@item -o @var{file} +@itemx --output-file=@var{file} +Specify output file name as @var{file}. + +@itemx --strict +Direct the program to work strictly following the Uniforum/Sun +implementation. Currently this only affects the naming of the output +file. If this option is not given the name of the output file is the +same as the domain name. If the strict Uniforum mode is enable the +suffix @file{.mo} is added to the file name if it is not already +present. + +We find this behaviour of Sun's implementation rather silly and so by +default this mode is @emph{not} selected. + +@item -v +@itemx --verbose +Detect and diagnose input file anomalies which might represent +translation errors. The @code{msgid} and @code{msgstr} strings are +studied and compared. It is considered abnormal that one string +starts or ends with a newline while the other does not. + +Also, if the string represents a format sring used in a +@code{printf}-like function both strings should have the same number of +@samp{%} format specifiers, with matching types. If the flag +@code{c-format} or @code{possible-c-format} appears in the special +comment @key{#,} for this entry a check is performed. For example, the +check will diagnose using @samp{%.*s} against @samp{%s}, or @samp{%d} +against @samp{%s}, or @samp{%d} against @samp{%x}. It can even handle +positional parameters. + +Normally the @code{xgettext} program automatically decides whether a +string is a format string or not. This algorithm is not perfect, +though. It might regard a string as a format string though it is not +used in a @code{printf}-like function and so @code{msgfmt} might report +errors where there are none. Or the other way round: a string is not +regarded as a format string but it is used in a @code{printf}-like +function. + +So solve this problem the programmer can dictate the decision to the +@code{xgettext} program (@pxref{c-format}). The translator should not +consider removing the flag from the @key{#,} line. This "fix" would be +reversed again as soon as @code{msgmerge} is called the next time. + +@item -V +@itemx --version +Output version information and exit. + +@end table + +If input file is @samp{-}, standard input is read. If output file +is @samp{-}, output is written to standard output. + +@node MO Files, , msgfmt Invocation, Binaries +@section The Format of GNU MO Files + +The format of the generated MO files is best described by a picture, +which appears below. + +The first two words serve the identification of the file. The magic +number will always signal GNU MO files. The number is stored in the +byte order of the generating machine, so the magic number really is +two numbers: @code{0x950412de} and @code{0xde120495}. The second +word describes the current revision of the file format. For now the +revision is 0. This might change in future versions, and ensures +that the readers of MO files can distinguish new formats from old +ones, so that both can be handled correctly. The version is kept +separate from the magic number, instead of using different magic +numbers for different formats, mainly because @file{/etc/magic} is +not updated often. It might be better to have magic separated from +internal format version identification. + +Follow a number of pointers to later tables in the file, allowing +for the extension of the prefix part of MO files without having to +recompile programs reading them. This might become useful for later +inserting a few flag bits, indication about the charset used, new +tables, or other things. + +Then, at offset @var{O} and offset @var{T} in the picture, two tables +of string descriptors can be found. In both tables, each string +descriptor uses two 32 bits integers, one for the string length, +another for the offset of the string in the MO file, counting in bytes +from the start of the file. The first table contains descriptors +for the original strings, and is sorted so the original strings +are in increasing lexicographical order. The second table contains +descriptors for the translated strings, and is parallel to the first +table: to find the corresponding translation one has to access the +array slot in the second array with the same index. + +Having the original strings sorted enables the use of simple binary +search, for when the MO file does not contain an hashing table, or +for when it is not practical to use the hashing table provided in +the MO file. This also has another advantage, as the empty string +in a PO file GNU @code{gettext} is usually @emph{translated} into +some system information attached to that particular MO file, and the +empty string necessarily becomes the first in both the original and +translated tables, making the system information very easy to find. + +The size @var{S} of the hash table can be zero. In this case, the +hash table itself is not contained in the MO file. Some people might +prefer this because a precomputed hashing table takes disk space, and +does not win @emph{that} much speed. The hash table contains indices +to the sorted array of strings in the MO file. Conflict resolution is +done by double hashing. The precise hashing algorithm used is fairly +dependent of GNU @code{gettext} code, and is not documented here. + +As for the strings themselves, they follow the hash file, and each +is terminated with a @key{NUL}, and this @key{NUL} is not counted in +the length which appears in the string descriptor. The @code{msgfmt} +program has an option selecting the alignment for MO file strings. +With this option, each string is separately aligned so it starts at +an offset which is a multiple of the alignment value. On some RISC +machines, a correct alignment will speed things up. + +Nothing prevents a MO file from having embedded @key{NUL}s in strings. +However, the program interface currently used already presumes +that strings are @key{NUL} terminated, so embedded @key{NUL}s are +somewhat useless. But MO file format is general enough so other +interfaces would be later possible, if for example, we ever want to +implement wide characters right in MO files, where @key{NUL} bytes may +accidently appear. + +This particular issue has been strongly debated in the GNU +@code{gettext} development forum, and it is expectable that MO file +format will evolve or change over time. It is even possible that many +formats may later be supported concurrently. But surely, we have to +start somewhere, and the MO file format described here is a good start. +Nothing is cast in concrete, and the format may later evolve fairly +easily, so we should feel comfortable with the current approach. + +@example +@group + byte + +------------------------------------------+ + 0 | magic number = 0x950412de | + | | + 4 | file format revision = 0 | + | | + 8 | number of strings | == N + | | + 12 | offset of table with original strings | == O + | | + 16 | offset of table with translation strings | == T + | | + 20 | size of hashing table | == S + | | + 24 | offset of hashing table | == H + | | + . . + . (possibly more entries later) . + . . + | | + O | length & offset 0th string ----------------. + O + 8 | length & offset 1st string ------------------. + ... ... | | +O + ((N-1)*8)| length & offset (N-1)th string | | | + | | | | + T | length & offset 0th translation ---------------. + T + 8 | length & offset 1st translation -----------------. + ... ... | | | | +T + ((N-1)*8)| length & offset (N-1)th translation | | | | | + | | | | | | + H | start hash table | | | | | + ... ... | | | | + H + S * 4 | end hash table | | | | | + | | | | | | + | NUL terminated 0th string <----------------' | | | + | | | | | + | NUL terminated 1st string <------------------' | | + | | | | + ... ... | | + | | | | + | NUL terminated 0th translation <---------------' | + | | | + | NUL terminated 1st translation <-----------------' + | | + ... ... + | | + +------------------------------------------+ +@end group +@end example + +@node Users, Programmers, Binaries, Top +@chapter The User's View + +When GNU @code{gettext} will truly have reached is goal, average users +should feel some kind of astonished pleasure, seeing the effect of +that strange kind of magic that just makes their own native language +appear everywhere on their screens. As for naive users, they would +ideally have no special pleasure about it, merely taking their own +language for @emph{granted}, and becoming rather unhappy otherwise. + +So, let's try to describe here how we would like the magic to operate, +as we want the users' view to be the simplest, among all ways one +could look at GNU @code{gettext}. All other software engineers: +programmers, translators, maintainers, should work together in such a +way that the magic becomes possible. This is a long and progressive +undertaking, and information is available about the progress of the +Translation Project. + +When a package is distributed, there are two kind of users: +@dfn{installers} who fetch the distribution, unpack it, configure +it, compile it and install it for themselves or others to use; and +@dfn{end users} that call programs of the package, once these have +been installed at their site. GNU @code{gettext} is offering magic +for both installers and end users. + +@menu +* Matrix:: The Current @file{ABOUT-NLS} Matrix +* Installers:: Magic for Installers +* End Users:: Magic for End Users +@end menu + +@node Matrix, Installers, Users, Users +@section The Current @file{ABOUT-NLS} Matrix + +Languages are not equally supported in all packages using GNU +@code{gettext}. To know if some package uses GNU @code{gettext}, one +may check the distribution for the @file{ABOUT-NLS} information file, for +some @file{@var{ll}.po} files, often kept together into some @file{po/} +directory, or for an @file{intl/} directory. Internationalized packages +have usually many @file{@var{ll}.po} files, where @var{ll} represents +the language. @ref{End Users} for a complete description of the format +for @var{ll}. + +More generally, a matrix is available for showing the current state +of the Translation Project, listing which packages are prepared for +multi-lingual messages, and which languages is supported by each. +Because this information changes often, this matrix is not kept within +this GNU @code{gettext} manual. This information is often found in +file @file{ABOUT-NLS} from various distributions, but is also as old as +the distribution itself. A recent copy of this @file{ABOUT-NLS} file, +containing up-to-date information, should generally be found on the +Translation Project sites, and also on most GNU archive sites. + +@node Installers, End Users, Matrix, Users +@section Magic for Installers + +By default, packages fully using GNU @code{gettext}, internally, +are installed in such a way that they to allow translation of +messages. At @emph{configuration} time, those packages should +automatically detect whether the underlying host system provides usable +@code{catgets} or @code{gettext} functions. If neither is present, +the GNU @code{gettext} library should be automatically prepared +and used. Installers may use special options at configuration +time for changing this behavior. The command @samp{./configure +--with-included-gettext} bypasses system @code{catgets} or @code{gettext} to +use GNU @code{gettext} instead, while @samp{./configure --disable-nls} +produces program totally unable to translate messages. + +Internationalized packages have usually many @file{@var{ll}.po} +files. Unless +translations are disabled, all those available are installed together +with the package. However, the environment variable @code{LINGUAS} +may be set, prior to configuration, to limit the installed set. +@code{LINGUAS} should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +@node End Users, , Installers, Users +@section Magic for End Users + +We consider here those packages using GNU @code{gettext} internally, +and for which the installers did not disable translation at +@emph{configure} time. Then, users only have to set the @code{LANG} +environment variable to the appropriate @samp{@var{ll}} prior to +using the programs in the package. @xref{Matrix}. For example, +let's presume a German site. At the shell prompt, users merely have to +execute @w{@samp{setenv LANG de}} (in @code{csh}) or @w{@samp{export +LANG; LANG=de}} (in @code{sh}). They could even do this from their +@file{.login} or @file{.profile} file. + +@node Programmers, Translators, Users, Top +@chapter The Programmer's View + +@c FIXME: Reorganize whole chapter. + +One aim of the current message catalog implementation provided by +GNU @code{gettext} was to use the systems message catalog handling, if the +installer wishes to do so. So we perhaps should first take a look at +the solutions we know about. The people in the POSIX committee does not +manage to agree on one of the semi-official standards which we'll +describe below. In fact they couldn't agree on anything, so nothing +decide only to include an example of an interface. The major Unix vendors +are split in the usage of the two most important specifications: X/Opens +catgets vs. Uniforums gettext interface. We'll describe them both and +later explain our solution of this dilemma. + +@menu +* catgets:: About @code{catgets} +* gettext:: About @code{gettext} +* Comparison:: Comparing the two interfaces +* Using libintl.a:: Using libintl.a in own programs +* gettext grok:: Being a @code{gettext} grok +* Temp Programmers:: Temporary Notes for the Programmers Chapter +@end menu + +@node catgets, gettext, Programmers, Programmers +@section About @code{catgets} + +The @code{catgets} implementation is defined in the X/Open Portability +Guide, Volume 3, XSI Supplementary Definitions, Chapter 5. But the +process of creating this standard seemed to be too slow for some of +the Unix vendors so they created their implementations on preliminary +versions of the standard. Of course this leads again to problems while +writing platform independent programs: even the usage of @code{catgets} +does not guarantee a unique interface. + +Another, personal comment on this that only a bunch of committee members +could have made this interface. They never really tried to program +using this interface. It is a fast, memory-saving implementation, an +user can happily live with it. But programmers hate it (at least me and +some others do@dots{}) + +But we must not forget one point: after all the trouble with transfering +the rights on Unix(tm) they at last came to X/Open, the very same who +published this specifications. This leads me to making the prediction +that this interface will be in future Unix standards (e.g. Spec1170) and +therefore part of all Unix implementation (implementations, which are +@emph{allowed} to wear this name). + +@menu +* Interface to catgets:: The interface +* Problems with catgets:: Problems with the @code{catgets} interface?! +@end menu + +@node Interface to catgets, Problems with catgets, catgets, catgets +@subsection The Interface + +The interface to the @code{catgets} implementation consists of three +functions which correspond to those used in file access: @code{catopen} +to open the catalog for using, @code{catgets} for accessing the message +tables, and @code{catclose} for closing after work is done. Prototypes +for the functions and the needed definitions are in the +@code{<nl_types.h>} header file. + +@code{catopen} is used like in this: + +@example +nl_catd catd = catopen ("catalog_name", 0); +@end example + +The function takes as the argument the name of the catalog. This usual +refers to the name of the program or the package. The second parameter +is not further specified in the standard. I don't even know whether it +is implemented consistently among various systems. So the common advice +is to use @code{0} as the value. The return value is a handle to the +message catalog, equivalent to handles to file returned by @code{open}. + +This handle is of course used in the @code{catgets} function which can +be used like this: + +@example +char *translation = catgets (catd, set_no, msg_id, "original string"); +@end example + +The first parameter is this catalog descriptor. The second parameter +specifies the set of messages in this catalog, in which the message +described by @code{msg_id} is obtained. @code{catgets} therefore uses a +three-stage addressing: + +@display +catalog name @result{} set number @result{} message ID @result{} translation +@end display + +@c Anybody else loving Haskell??? :-) -- Uli + +The fourth argument is not used to address the translation. It is given +as a default value in case when one of the addressing stages fail. One +important thing to remember is that although the return type of catgets +is @code{char *} the resulting string @emph{must not} be changed. It +should better @code{const char *}, but the standard is published in +1988, one year before ANSI C. + +@noindent +The last of these function functions is used and behaves as expected: + +@example +catclose (catd); +@end example + +After this no @code{catgets} call using the descriptor is legal anymore. + +@node Problems with catgets, , Interface to catgets, catgets +@subsection Problems with the @code{catgets} Interface?! + +Now that this descriptions seemed to be really easy where are the +problem we speak of. In fact the interface could be used in a +reasonable way, but constructing the message catalogs is a pain. The +reason for this lies in the third argument of @code{catgets}: the unique +message ID. This has to be a numeric value for all messages in a single +set. Perhaps you could imagine the problems keeping such list while +changing the source code. Add a new message here, remove one there. Of +course there have been developed a lot of tools helping to organize this +chaos but one as the other fails in one aspect or the other. We don't +want to say that the other approach has no problems but they are far +more easily to manage. + +@node gettext, Comparison, catgets, Programmers +@section About @code{gettext} + +The definition of the @code{gettext} interface comes from a Uniforum +proposal and it is followed by at least one major Unix vendor +(Sun) in its last developments. It is not specified in any official +standard, though. + +The main points about this solution is that it does not follow the +method of normal file handling (open-use-close) and that it does not +burden the programmer so many task, especially the unique key handling. +Of course here is also a unique key needed, but this key is the +message itself (how long or short it is). @xref{Comparison} for a +more detailed comparison of the two methods. + +The following section contains a rather detailed description of the +interface. We make it that detailed because this is the interface +we chose for the GNU @code{gettext} Library. Programmers interested +in using this library will be interested in this description. + +@menu +* Interface to gettext:: The interface +* Ambiguities:: Solving ambiguities +* Locating Catalogs:: Locating message catalog files +* Optimized gettext:: Optimization of the *gettext functions +@end menu + +@node Interface to gettext, Ambiguities, gettext, gettext +@subsection The Interface + +The minimal functionality an interface must have is a) to select a +domain the strings are coming from (a single domain for all programs is +not reasonable because its construction and maintenance is difficult, +perhaps impossible) and b) to access a string in a selected domain. + +This is principally the description of the @code{gettext} interface. It +has an global domain which unqualified usages reference. Of course this +domain is selectable by the user. + +@example +char *textdomain (const char *domain_name); +@end example + +This provides the possibility to change or query the current status of +the current global domain of the @code{LC_MESSAGE} category. The +argument is a null-terminated string, whose characters must be legal in +the use in filenames. If the @var{domain_name} argument is @code{NULL}, +the function return the current value. If no value has been set +before, the name of the default domain is returned: @emph{messages}. +Please note that although the return value of @code{textdomain} is of +type @code{char *} no changing is allowed. It is also important to know +that no checks of the availability are made. If the name is not +available you will see this by the fact that no translations are provided. + +@noindent +To use a domain set by @code{textdomain} the function + +@example +char *gettext (const char *msgid); +@end example + +is to be used. This is the simplest reasonable form one can imagine. +The translation of the string @var{msgid} is returned if it is available +in the current domain. If not available the argument itself is +returned. If the argument is @code{NULL} the result is undefined. + +One things which should come into mind is that no explicit dependency to +the used domain is given. The current value of the domain for the +@code{LC_MESSAGES} locale is used. If this changes between two +executions of the same @code{gettext} call in the program, both calls +reference a different message catalog. + +For the easiest case, which is normally used in internationalized +packages, once at the beginning of execution a call to @code{textdomain} +is issued, setting the domain to a unique name, normally the package +name. In the following code all strings which have to be translated are +filtered through the gettext function. That's all, the package speaks +your language. + +@node Ambiguities, Locating Catalogs, Interface to gettext, gettext +@subsection Solving Ambiguities + +While this single name domain work good for most applications there +might be the need to get translations from more than one domain. Of +course one could switch between different domains with calls to +@code{textdomain}, but this is really not convenient nor is it fast. A +possible situation could be one case discussing while this writing: all +error messages of functions in the set of common used functions should +go into a separate domain @code{error}. By this mean we would only need +to translate them once. + +@noindent +For this reasons there are two more functions to retrieve strings: + +@example +char *dgettext (const char *domain_name, const char *msgid); +char *dcgettext (const char *domain_name, const char *msgid, + int category); +@end example + +Both take an additional argument at the first place, which corresponds +to the argument of @code{textdomain}. The third argument of +@code{dcgettext} allows to use another locale but @code{LC_MESSAGES}. +But I really don't know where this can be useful. If the +@var{domain_name} is @code{NULL} or @var{category} has an value beside +the known ones, the result is undefined. It should also be noted that +this function is not part of the second known implementation of this +function family, the one found in Solaris. + +A second ambiguity can arise by the fact, that perhaps more than one +domain has the same name. This can be solved by specifying where the +needed message catalog files can be found. + +@example +char *bindtextdomain (const char *domain_name, + const char *dir_name); +@end example + +Calling this function binds the given domain to a file in the specified +directory (how this file is determined follows below). Especially a +file in the systems default place is not favored against the specified +file anymore (as it would be by solely using @code{textdomain}). A +@code{NULL} pointer for the @var{dir_name} parameter returns the binding +associated with @var{domain_name}. If @var{domain_name} itself is +@code{NULL} nothing happens and a @code{NULL} pointer is returned. Here +again as for all the other functions is true that none of the return +value must be changed! + +It is important to remember that relative path names for the +@var{dir_name} parameter can be trouble. Since the path is always +computed relative to the current directory different results will be +achieved when the program executes a @code{chdir} command. Relative +paths should always be avoided to avoid dependencies and +unreliabilities. + +@node Locating Catalogs, Optimized gettext, Ambiguities, gettext +@subsection Locating Message Catalog Files + +Because many different languages for many different packages have to be +stored we need some way to add these information to file message catalog +files. The way usually used in Unix environments is have this encoding +in the file name. This is also done here. The directory name given in +@code{bindtextdomain}s second argument (or the default directory), +followed by the value and name of the locale and the domain name are +concatenated: + +@example +@var{dir_name}/@var{locale}/LC_@var{category}/@var{domain_name}.mo +@end example + +The default value for @var{dir_name} is system specific. For the GNU +library, and for packages adhering to its conventions, it's: +@example +/usr/local/share/locale +@end example + +@noindent +@var{locale} is the value of the locale whose name is this +@code{LC_@var{category}}. For @code{gettext} and @code{dgettext} this +locale is always @code{LC_MESSAGES}. @code{dcgettext} specifies the +locale by the third argument.@footnote{Some +system, eg Ultrix, don't have @code{LC_MESSAGES}. Here we use a more or +less arbitrary value for it.} @footnote{When the system does not support +@code{setlocale} its behavior in setting the locale values is simulated +by looking at the environment variables.} + +@node Optimized gettext, , Locating Catalogs, gettext +@subsection Optimization of the *gettext functions + +At this point of the discussion we should talk about an advantage of the +GNU @code{gettext} implementation. Some readers might have pointed out +that an internationalized program might have a poor performance if some +string has to be translated in an inner loop. While this is unavoidable +when the string varies from one run of the loop to the other it is +simply a waste of time when the string is always the same. Take the +following example: + +@example +@group +@{ + while (@dots{}) + @{ + puts (gettext ("Hello world")); + @} +@} +@end group +@end example + +@noindent +When the locale selection does not change between two runs the resulting +string is always the same. One way to use this is: + +@example +@group +@{ + str = gettext ("Hello world"); + while (@dots{}) + @{ + puts (str); + @} +@} +@end group +@end example + +@noindent +But this solution is not usable in all situation (e.g. when the locale +selection changes) nor is it good readable. + +The GNU C compiler, version 2.7 and above, provide another solution for +this. To describe this we show here some lines of the +@file{intl/libgettext.h} file. For an explanation of the expression +command block see @ref{Statement Exprs, , Statements and Declarations in +Expressions, gcc, The GNU CC Manual}. + +@example +@group +# if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7 +extern int _nl_msg_cat_cntr; +# define dcgettext(domainname, msgid, category) \ + (__extension__ \ + (@{ \ + char *result; \ + if (__builtin_constant_p (msgid)) \ + @{ \ + static char *__translation__; \ + static int __catalog_counter__; \ + if (! __translation__ \ + || __catalog_counter__ != _nl_msg_cat_cntr) \ + @{ \ + __translation__ = \ + dcgettext__ ((domainname), (msgid), (category)); \ + __catalog_counter__ = _nl_msg_cat_cntr; \ + @} \ + result = __translation__; \ + @} \ + else \ + result = dcgettext__ ((domainname), (msgid), (category)); \ + result; \ + @})) +# endif +@end group +@end example + +The interesting thing here is the @code{__builtin_constant_p} predicate. +This is evaluated at compile time and so optimization can take place +immediately. Here two cases are distinguished: the argument to +@code{gettext} is not a constant value in which case simply the function +@code{dcgettext__} is called, the real implementation of the +@code{dcgettext} function. + +If the string argument @emph{is} constant we can reuse the once gained +translation when the locale selection has not changed. This is exactly +what is done here. The @code{_nl_msg_cat_cntr} variable is defined in +the @file{loadmsgcat.c} which is available in @file{libintl.a} and is +changed whenever a new message catalog is loaded. + +@node Comparison, Using libintl.a, gettext, Programmers +@section Comparing the Two Interfaces + +@c FIXME: arguments to catgets vs. gettext +@c Partly done 950718 -- drepper + +The following discussion is perhaps a little bit colored. As said +above we implemented GNU @code{gettext} following the Uniforum +proposal and this surely has its reasons. But it should show how we +came to this decision. + +First we take a look at the developing process. When we write an +application using NLS provided by @code{gettext} we proceed as always. +Only when we come to a string which might be seen by the users and thus +has to be translated we use @code{gettext("@dots{}")} instead of +@code{"@dots{}"}. At the beginning of each source file (or in a central +header file) we define + +@example +#define gettext(String) (String) +@end example + +Even this definition can be avoided when the system supports the +@code{gettext} function in its C library. When we compile this code the +result is the same as if no NLS code is used. When you take a look at +the GNU @code{gettext} code you will see that we use @code{_("@dots{}")} +instead of @code{gettext("@dots{}")}. This reduces the number of +additional characters per translatable string to @emph{3} (in words: +three). + +When now a production version of the program is needed we simply replace +the definition + +@example +#define _(String) (String) +@end example + +@noindent +by + +@example +#include <libintl.h> +#define _(String) gettext (String) +@end example + +@noindent +Additionally we run the program @file{xgettext} on all source code file +which contain translatable strings and that's it: we have a running +program which does not depend on translations to be available, but which +can use any that becomes available. + +The same procedure can be done for the @code{gettext_noop} invocations +(@pxref{Special cases}). First you can define @code{gettext_noop} to a +no-op macro and later use the definition from @file{libintl.h}. Because +this name is not used in Suns implementation of @file{libintl.h}, +you should consider the following code for your project: + +@example +#ifdef gettext_noop +# define N_(String) gettext_noop (String) +#else +# define N_(String) (String) +#endif +@end example + +@code{N_} is a short form similar to @code{_}. The @file{Makefile} in +the @file{po/} directory of GNU gettext knows by default both of the +mentioned short forms so you are invited to follow this proposal for +your own ease. + +Now to @code{catgets}. The main problem is the work for the +programmer. Every time he comes to a translatable string he has to +define a number (or a symbolic constant) which has also be defined in +the message catalog file. He also has to take care for duplicate +entries, duplicate message IDs etc. If he wants to have the same +quality in the message catalog as the GNU @code{gettext} program +provides he also has to put the descriptive comments for the strings and +the location in all source code files in the message catalog. This is +nearly a Mission: Impossible. + +But there are also some points people might call advantages speaking for +@code{catgets}. If you have a single word in a string and this string +is used in different contexts it is likely that in one or the other +language the word has different translations. Example: + +@example +printf ("%s: %d", gettext ("number"), number_of_errors) + +printf ("you should see %d %s", number_count, + number_count == 1 ? gettext ("number") : gettext ("numbers")) +@end example + +Here we have to translate two times the string @code{"number"}. Even +if you do not speak a language beside English it might be possible to +recognize that the two words have a different meaning. In German the +first appearance has to be translated to @code{"Anzahl"} and the second +to @code{"Zahl"}. + +Now you can say that this example is really esoteric. And you are +right! This is exactly how we felt about this problem and decide that +it does not weight that much. The solution for the above problem could +be very easy: + +@example +printf ("%s %d", gettext ("number:"), number_of_errors) + +printf (number_count == 1 ? gettext ("you should see %d number") + : gettext ("you should see %d numbers"), + number_count) +@end example + +We believe that we can solve all conflicts with this method. If it is +difficult one can also consider changing one of the conflicting string a +little bit. But it is not impossible to overcome. + +@c Should this be here? +Translator note: It is perhaps appropriate here to tell those English +speaking programmers that the plural form of a noun cannot be formed by +appending a single `s'. Most other languages use different methods. +Even the above form is not general enough to cope with all languages. +Rafal Maszkowski <rzm@@mat.uni.torun.pl> reports: + +@quotation +In Polish we use e.g. plik (file) this way: +@example +1 plik +2,3,4 pliki +5-21 pliko'w +22-24 pliki +25-31 pliko'w +@end example +and so on (o' means 8859-2 oacute which should be rather okreska, +similar to aogonek). +@end quotation + +A workable approach might be to consider methods like the one used for +@code{LC_TIME} in the POSIX.2 standard. The value of the +@code{alt_digits} field can be up to 100 strings which represent the +numbers 1 to 100. Using this in a situation of an internationalized +program means that an array of translatable strings should be indexed by +the number which should represent. A small example: + +@example +@group +void +print_month_info (int month) +@{ + const char *month_pos[12] = + @{ N_("first"), N_("second"), N_("third"), N_("fourth"), + N_("fifth"), N_("sixth"), N_("seventh"), N_("eighth"), + N_("ninth"), N_("tenth"), N_("eleventh"), N_("twelfth") @}; + printf (_("%s is the %s month\n"), nl_langinfo (MON_1 + month), + _(month_pos[month])); +@} +@end group +@end example + +@noindent +It should be obvious that this method is only reasonable for small +ranges of numbers. + +@c catgets allows same original entry to have different translations + +@node Using libintl.a, gettext grok, Comparison, Programmers +@section Using libintl.a in own programs + +Starting with version 0.9.4 the library @code{libintl.h} should be +self-contained. I.e., you can use it in your own programs without +providing additional functions. The @file{Makefile} will put the header +and the library in directories selected using the @code{$(prefix)}. + +One exception of the above is found on HP-UX systems. Here the C library +does not contain the @code{alloca} function (and the HP compiler does +not generate it inlined). But it is not intended to rewrite the whole +library just because of this dumb system. Instead include the +@code{alloca} function in all package you use the @code{libintl.a} in. + +@node gettext grok, Temp Programmers, Using libintl.a, Programmers +@section Being a @code{gettext} grok + +To fully exploit the functionality of the GNU @code{gettext} library it +is surely helpful to read the source code. But for those who don't want +to spend that much time in reading the (sometimes complicated) code here +is a list comments: + +@itemize @bullet +@item Changing the language at runtime + +For interactive programs it might be useful to offer a selection of the +used language at runtime. To understand how to do this one need to know +how the used language is determined while executing the @code{gettext} +function. The method which is presented here only works correctly +with the GNU implementation of the @code{gettext} functions. It is not +possible with underlying @code{catgets} functions or @code{gettext} +functions from the systems C library. The exception is of course the +GNU C Library which uses the GNU @code{gettext} Library for message handling. + +In the function @code{dcgettext} at every call the current setting of +the highest priority environment variable is determined and used. +Highest priority means here the following list with decreasing +priority: + +@enumerate +@item @code{LANGUAGE} +@item @code{LC_ALL} +@item @code{LC_xxx}, according to selected locale +@item @code{LANG} +@end enumerate + +Afterwards the path is constructed using the found value and the +translation file is loaded if available. + +What is now when the value for, say, @code{LANGUAGE} changes. According +to the process explained above the new value of this variable is found +as soon as the @code{dcgettext} function is called. But this also means +the (perhaps) different message catalog file is loaded. In other +words: the used language is changed. + +But there is one little hook. The code for gcc-2.7.0 and up provides +some optimization. This optimization normally prevents the calling of +the @code{dcgettext} function as long as no new catalog is loaded. But +if @code{dcgettext} is not called the program also cannot find the +@code{LANGUAGE} variable be changed (@pxref{Optimized gettext}). A +solution for this is very easy. Include the following code in the +language switching function. + +@example + /* Change language. */ + setenv ("LANGUAGE", "fr", 1); + + /* Make change known. */ + @{ + extern int _nl_msg_cat_cntr; + ++_nl_msg_cat_cntr; + @} +@end example + +The variable @code{_nl_msg_cat_cntr} is defined in @file{loadmsgcat.c}. +The programmer will find himself in need for a construct like this only +when developing programs which do run longer and provide the user to +select the language at runtime. Non-interactive programs (like all +these little Unix tools) should never need this. + +@end itemize + +@node Temp Programmers, , gettext grok, Programmers +@section Temporary Notes for the Programmers Chapter + +@menu +* Temp Implementations:: Temporary - Two Possible Implementations +* Temp catgets:: Temporary - About @code{catgets} +* Temp WSI:: Temporary - Why a single implementation +* Temp Notes:: Temporary - Notes +@end menu + +@node Temp Implementations, Temp catgets, Temp Programmers, Temp Programmers +@subsection Temporary - Two Possible Implementations + +There are two competing methods for language independent messages: +the X/Open @code{catgets} method, and the Uniforum @code{gettext} +method. The @code{catgets} method indexes messages by integers; the +@code{gettext} method indexes them by their English translations. +The @code{catgets} method has been around longer and is supported +by more vendors. The @code{gettext} method is supported by Sun, +and it has been heard that the COSE multi-vendor initiative is +supporting it. Neither method is a POSIX standard; the POSIX.1 +committee had a lot of disagreement in this area. + +Neither one is in the POSIX standard. There was much disagreement +in the POSIX.1 committee about using the @code{gettext} routines +vs. @code{catgets} (XPG). In the end the committee couldn't +agree on anything, so no messaging system was included as part +of the standard. I believe the informative annex of the standard +includes the XPG3 messaging interfaces, ``@dots{}as an example of +a messaging system that has been implemented@dots{}'' + +They were very careful not to say anywhere that you should use one +set of interfaces over the other. For more on this topic please +see the Programming for Internationalization FAQ. + +@node Temp catgets, Temp WSI, Temp Implementations, Temp Programmers +@subsection Temporary - About @code{catgets} + +There have been a few discussions of late on the use of +@code{catgets} as a base. I think it important to present both +sides of the argument and hence am opting to play devil's advocate +for a little bit. + +I'll not deny the fact that @code{catgets} could have been designed +a lot better. It currently has quite a number of limitations and +these have already been pointed out. + +However there is a great deal to be said for consistency and +standardization. A common recurring problem when writing Unix +software is the myriad portability problems across Unix platforms. +It seems as if every Unix vendor had a look at the operating system +and found parts they could improve upon. Undoubtedly, these +modifications are probably innovative and solve real problems. +However, software developers have a hard time keeping up with all +these changes across so many platforms. + +And this has prompted the Unix vendors to begin to standardize their +systems. Hence the impetus for Spec1170. Every major Unix vendor +has committed to supporting this standard and every Unix software +developer waits with glee the day they can write software to this +standard and simply recompile (without having to use autoconf) +across different platforms. + +As I understand it, Spec1170 is roughly based upon version 4 of the +X/Open Portability Guidelines (XPG4). Because @code{catgets} and +friends are defined in XPG4, I'm led to believe that @code{catgets} +is a part of Spec1170 and hence will become a standardized component +of all Unix systems. + +@node Temp WSI, Temp Notes, Temp catgets, Temp Programmers +@subsection Temporary - Why a single implementation + +Now it seems kind of wasteful to me to have two different systems +installed for accessing message catalogs. If we do want to remedy +@code{catgets} deficiencies why don't we try to expand @code{catgets} +(in a compatible manner) rather than implement an entirely new system. +Otherwise, we'll end up with two message catalog access systems installed +with an operating system - one set of routines for packages using GNU +@code{gettext} for their internationalization, and another set of routines +(catgets) for all other software. Bloated? + +Supposing another catalog access system is implemented. Which do +we recommend? At least for Linux, we need to attract as many +software developers as possible. Hence we need to make it as easy +for them to port their software as possible. Which means supporting +@code{catgets}. We will be implementing the @code{glocale} code +within our @code{libc}, but does this mean we also have to incorporate +another message catalog access scheme within our @code{libc} as well? +And what about people who are going to be using the @code{glocale} ++ non-@code{catgets} routines. When they port their software to +other platforms, they're now going to have to include the front-end +(@code{glocale}) code plus the back-end code (the non-@code{catgets} +access routines) with their software instead of just including the +@code{glocale} code with their software. + +Message catalog support is however only the tip of the iceberg. +What about the data for the other locale categories. They also have +a number of deficiencies. Are we going to abandon them as well and +develop another duplicate set of routines (should @code{glocale} +expand beyond message catalog support)? + +Like many parts of Unix that can be improved upon, we're stuck with balancing +compatibility with the past with useful improvements and innovations for +the future. + +@c @node Temp DLS, Temp Notes, Temp WSI, Temp Programmers +@c @subsection Temporary - Double layer solution + +@c GNU locale implements a @code{gettext}-style interface on top of a +@c @code{catgets}-style interface. + +@c This is not needless complexity. It is absolutely vital, because +@c it enables @code{gettext} to run on top of @code{catgets}, which +@c enables Linux International to recommend users use it @emph{today}. + +@c Rewriting @code{gettext} so that it could use @emph{either} +@c @code{catgets} @emph{or} some simpler mechanism would not break +@c anything, but would not reduce complexity either. It might be +@c worth doing, but it isn't urgent. + +@c In general, simplicity is not enough of a reason to rewrite a +@c program that works. Simplicity is just one desirable thing. +@c It is not overridingly important. + +@node Temp Notes, , Temp WSI, Temp Programmers +@subsection Temporary - Notes + +X/Open agreed very late on the standard form so that many +implementations differ from the final form. Both of my system (old +Linux catgets and Ultrix-4) have a strange variation. + +OK. After incorporating the last changes I have to spend some time on +making the GNU/Linux @code{libc} @code{gettext} functions. So in future +Solaris is not the only system having @code{gettext}. + +@node Translators, Maintainers, Programmers, Top +@chapter The Translator's View + +@c FIXME: Reorganize whole chapter. + +@menu +* Trans Intro 0:: Introduction 0 +* Trans Intro 1:: Introduction 1 +* Discussions:: Discussions +* Organization:: Organization +* Information Flow:: Information Flow +@end menu + +@node Trans Intro 0, Trans Intro 1, Translators, Translators +@section Introduction 0 + +GNU is going international! The Translation Project is a way +to get maintainers, translators and users all together, so GNU will +gradually become able to speak many native languages. + +The GNU @code{gettext} tool set contains @emph{everything} maintainers +need for internationalizing their packages for messages. It also +contains quite useful tools for helping translators at localizing +messages to their native language, once a package has already been +internationalized. + +To achieve the Translation Project, we need many interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +If you'd like to volunteer to @emph{work} at translating messages, +please send mail to your translating team. + +Each team has its own mailing list, courtesy of Linux +International. You may reach your translating team at the address +@file{@var{ll}@@li.org}, replacing @var{ll} by the two-letter @w{ISO 639} +code for your language. Language codes are @emph{not} the same as +country codes given in @w{ISO 3166}. The following translating teams +exist: + +@quotation +Chinese @code{zh}, Czech @code{cs}, Danish @code{da}, Dutch @code{nl}, +Esperanto @code{eo}, Finnish @code{fi}, French @code{fr}, Irish +@code{ga}, German @code{de}, Greek @code{el}, Italian @code{it}, +Japanese @code{ja}, Indonesian @code{in}, Norwegian @code{no}, Polish +@code{pl}, Portuguese @code{pt}, Russian @code{ru}, Spanish @code{es}, +Swedish @code{sv} and Turkish @code{tr}. +@end quotation + +@noindent +For example, you may reach the Chinese translating team by writing to +@file{zh@@li.org}. When you become a member of the translating team +for your own language, you may subscribe to its list. For example, +Swedish people can send a message to @w{@file{sv-request@@li.org}}, +having this message body: + +@example +subscribe +@end example + +Keep in mind that team members should be interested in @emph{working} +at translations, or at solving translational difficulties, rather than +merely lurking around. If your team does not exist yet and you want to +start one, please write to @w{@file{gnu-translation@@prep.ai.mit.edu}}; +you will then reach the GNU coordinator for all translator teams. + +A handful of GNU packages have already been adapted and provided +with message translations for several languages. Translation +teams have begun to organize, using these packages as a starting +point. But there are many more packages and many languages for +which we have no volunteer translators. If you would like to +volunteer to work at translating messages, please send mail to +@file{gnu-translation@@prep.ai.mit.edu} indicating what language(s) +you can work on. + +@node Trans Intro 1, Discussions, Trans Intro 0, Translators +@section Introduction 1 + +This is now official, GNU is going international! Here is the +announcement submitted for the January 1995 GNU Bulletin: + +@quotation +A handful of GNU packages have already been adapted and provided +with message translations for several languages. Translation +teams have begun to organize, using these packages as a starting +point. But there are many more packages and many languages +for which we have no volunteer translators. If you'd like to +volunteer to work at translating messages, please send mail to +@samp{gnu-translation@@prep.ai.mit.edu} indicating what language(s) +you can work on. +@end quotation + +This document should answer many questions for those who are curious +about the process or would like to contribute. Please at least skim +over it, hoping to cut down a little of the high volume of e-mail +generated by this collective effort towards GNU internationalization. + +Most free programming which is widely shared is done in English, and +currently, English is used as the main communicating language between +national communities collaborating to the GNU project. This very document +is written in English. This will not change in the foreseeable future. + +However, there is a strong appetite from national communities for +having more software able to write using national language and habits, +and there is an on-going effort to modify GNU software in such a way +that it becomes able to do so. The experiments driven so far raised +an enthusiastic response from pretesters, so we believe that GNU +internationalization is dedicated to succeed. + +For suggestion clarifications, additions or corrections to this +document, please e-mail to @file{gnu-translation@@prep.ai.mit.edu}. + +@node Discussions, Organization, Trans Intro 1, Translators +@section Discussions + +Facing this internationalization effort, a few users expressed their +concerns. Some of these doubts are presented and discussed, here. + +@itemize @bullet +@item Smaller groups + +Some languages are not spoken by a very large number of people, so people +speaking them sometimes consider that there may not be all that much +demand such versions of free software packages. Moreover, many people +being @emph{into computers}, in some countries, generally seem to prefer +English versions of their software. + +On the other end, people might enjoy their own language a lot, and be +very motivated at providing to themselves the pleasure of having their +beloved free software speaking their mother tongue. They do themselves +a personal favor, and do not pay that much attention to the number of +people beneficiating of their work. + +@item Misinterpretation + +Other users are shy to push forward their own language, seeing in this +some kind of misplaced propaganda. Someone thought there must be some +users of the language over the networks pestering other people with it. + +But any spoken language is worth localization, because there are +people behind the language for whom the language is important and +dear to their hearts. + +@item Odd translations + +The biggest problem is to find the right translations so that +everybody can understand the messages. Translations are usually a +little odd. Some people get used to English, to the extent they may +find translations into their own language ``rather pushy, obnoxious +and sometimes even hilarious.'' As a French speaking man, I have +the experience of those instruction manuals for goods, so poorly +translated in French in Korea or Taiwan@dots{} + +The fact is that we sometimes have to create a kind of national +computer culture, and this is not easy without the collaboration of +many people liking their mother tongue. This is why translations are +better achieved by people knowing and loving their own language, and +ready to work together at improving the results they obtain. + +@item Dependencies over the GPL + +Some people wonder if using GNU @code{gettext} necessarily brings their package +under the protective wing of the GNU General Public License, when they +do not want to make their program free, or want other kinds of freedom. +The simplest answer is yes. + +The mere marking of localizable strings in a package, or conditional +inclusion of a few lines for initialization, is not really including +GPL'ed code. However, the localization routines themselves are under +the GPL and would bring the remainder of the package under the GPL +if they were distributed with it. So, I presume that, for those +for which this is a problem, it could be circumvented by letting to +the end installers the burden of assembling a package prepared for +localization, but not providing the localization routines themselves. + +@end itemize + +@node Organization, Information Flow, Discussions, Translators +@section Organization + +On a larger scale, the true solution would be to organize some kind of +fairly precise set up in which volunteers could participate. I gave +some thought to this idea lately, and realize there will be some +touchy points. I thought of writing to Richard Stallman to launch +such a project, but feel it might be good to shake out the ideas +between ourselves first. Most probably that Linux International has +some experience in the field already, or would like to orchestrate +the volunteer work, maybe. Food for thought, in any case! + +I guess we have to setup something early, somehow, that will help +many possible contributors of the same language to interlock and avoid +work duplication, and further be put in contact for solving together +problems particular to their tongue (in most languages, there are many +difficulties peculiar to translating technical English). My Swedish +contributor acknowledged these difficulties, and I'm well aware of +them for French. + +This is surely not a technical issue, but we should manage so the +effort of locale contributors be maximally useful, despite the national +team layer interface between contributors and maintainers. + +The Translation Project needs some setup for coordinating language +coordinators. Localizing evolving programs will surely +become a permanent and continuous activity in the free software community, +once well started. +The setup should be minimally completed and tested before GNU +@code{gettext} becomes an official reality. The e-mail address +@file{translation@@iro.umontreal.ca} has been setup for receiving +offers from volunteers and general e-mail on these topics. This address +reaches the Translation Project coordinator. + +@menu +* Central Coordination:: Central Coordination +* National Teams:: National Teams +* Mailing Lists:: Mailing Lists +@end menu + +@node Central Coordination, National Teams, Organization, Organization +@subsection Central Coordination + +I also think GNU will need sooner than it thinks, that someone setup +a way to organize and coordinate these groups. Some kind of group +of groups. My opinion is that it would be good that GNU delegates +this task to a small group of collaborating volunteers, shortly. +Perhaps in @file{gnu.announce} a list of this national committee's +can be published. + +My role as coordinator would simply be to refer to Ulrich any German +speaking volunteer interested to localization of free software packages, and +maybe helping national groups to initially organize, while maintaining +national registries for until national groups are ready to take over. +In fact, the coordinator should ease volunteers to get in contact with +one another for creating national teams, which should then select +one coordinator per language, or country (regionalized language). +If well done, the coordination should be useful without being an +overwhelming task, the time to put delegations in place. + +@node National Teams, Mailing Lists, Central Coordination, Organization +@subsection National Teams + +I suggest we look for volunteer coordinators/editors for individual +languages. These people will scan contributions of translation files +for various programs, for their own languages, and will ensure high +and uniform standards of diction. + +From my current experience with other people in these days, those who +provide localizations are very enthusiastic about the process, and are +more interested in the localization process than in the program they +localize, and want to do many programs, not just one. This seems +to confirm that having a coordinator/editor for each language is a +good idea. + +We need to choose someone who is good at writing clear and concise +prose in the language in question. That is hard---we can't check +it ourselves. So we need to ask a few people to judge each others' +writing and select the one who is best. + +I announce my prerelease to a few dozen people, and you would not +believe all the discussions it generated already. I shudder to think +what will happen when this will be launched, for true, officially, +world wide. Who am I to arbitrate between two Czekolsovak users +contradicting each other, for example? + +I assume that your German is not much better than my French so that +I would not be able to judge about these formulations. What I would +suggest is that for each language there is a group for people who +maintain the PO files and judge about changes. I suspect there will +be cultural differences between how such groups of people will behave. +Some will have relaxed ways, reach consensus easily, and have anyone +of the group relate to the maintainers, while others will fight to +death, organize heavy administrations up to national standards, and +use strict channels. + +The German team is putting out a good example. Right now, they are +maybe half a dozen people revising translations of each other and +discussing the linguistic issues. I do not even have all the names. +Ulrich Drepper is taking care of coordinating the German team. +He subscribed to all my pretest lists, so I do not even have to warn +him specifically of incoming releases. + +I'm sure, that is a good idea to get teams for each language working +on translations. That will make the translations better and more +consistent. + +@menu +* Sub-Cultures:: Sub-Cultures +* Organizational Ideas:: Organizational Ideas +@end menu + +@node Sub-Cultures, Organizational Ideas, National Teams, National Teams +@subsubsection Sub-Cultures + +Taking French for example, there are a few sub-cultures around computers +which developed diverging vocabularies. Picking volunteers here and +there without addressing this problem in an organized way, soon in the +project, might produce a distasteful mix of internationalized programs, +and possibly trigger endless quarrels among those who really care. + +Keeping some kind of unity in the way French localization of +internationalized programs is achieved is a difficult (and delicate) job. +Knowing the latin character of French people (:-), if we take this +the wrong way, we could end up nowhere, or spoil a lot of energies. +Maybe we should begin to address this problem seriously @emph{before} +GNU @code{gettext} become officially published. And I suspect that this +means soon! + +@node Organizational Ideas, , Sub-Cultures, National Teams +@subsubsection Organizational Ideas + +I expect the next big changes after the official release. Please note +that I use the German translation of the short GPL message. We need +to set a few good examples before the localization goes out for true +in the free software community. Here are a few points to discuss: + +@itemize @bullet +@item +Each group should have one FTP server (at least one master). + +@item +The files on the server should reflect the latest version (of +course!) and it should also contain a RCS directory with the +corresponding archives (I don't have this now). + +@item +There should also be a ChangeLog file (this is more useful than the +RCS archive but can be generated automatically from the later by +Emacs). + +@item +A @dfn{core group} should judge about questionable changes (for now +this group consists solely by me but I ask some others occasionally; +this also seems to work). + +@end itemize + +@node Mailing Lists, , National Teams, Organization +@subsection Mailing Lists + +If we get any inquiries about GNU @code{gettext}, send them on to: + +@example +@file{translation@@iro.umontreal.ca} +@end example + +The @file{*-pretest} lists are quite useful to me, maybe the idea could +be generalized to many GNU, and non-GNU packages. But each maintainer +his/her way! + +Fran@,{c}ois, we have a mechanism in place here at +@file{gnu.ai.mit.edu} to track teams, support mailing lists for +them and log members. We have a slight preference that you use it. +If this is OK with you, I can get you clued in. + +Things are changing! A few years ago, when Daniel Fekete and I +asked for a mailing list for GNU localization, nested at the FSF, we +were politely invited to organize it anywhere else, and so did we. +For communicating with my pretesters, I later made a handful of +mailing lists located at iro.umontreal.ca and administrated by +@code{majordomo}. These lists have been @emph{very} dependable +so far@dots{} + +I suspect that the German team will organize itself a mailing list +located in Germany, and so forth for other countries. But before they +organize for true, it could surely be useful to offer mailing lists +located at the FSF to each national team. So yes, please explain me +how I should proceed to create and handle them. + +We should create temporary mailing lists, one per country, to help +people organize. Temporary, because once regrouped and structured, it +would be fair the volunteers from country bring back @emph{their} list +in there and manage it as they want. My feeling is that, in the long +run, each team should run its own list, from within their country. +There also should be some central list to which all teams could +subscribe as they see fit, as long as each team is represented in it. + +@node Information Flow, , Organization, Translators +@section Information Flow + +There will surely be some discussion about this messages after the +packages are finally released. If people now send you some proposals +for better messages, how do you proceed? Jim, please note that +right now, as I put forward nearly a dozen of localizable programs, I +receive both the translations and the coordination concerns about them. + +If I put one of my things to pretest, Ulrich receives the announcement +and passes it on to the German team, who make last minute revisions. +Then he submits the translation files to me @emph{as the maintainer}. +For free packages I do not maintain, I would not even hear about it. +This scheme could be made to work for the whole Translation Project, +I think. For security reasons, maybe Ulrich (national coordinators, +in fact) should update central registry kept at the Translation Project +(Jim, me, or Len's recruits) once in a while. + +In December/January, I was aggressively ready to internationalize +all of GNU, giving myself the duty of one small GNU package per week +or so, taking many weeks or months for bigger packages. But it does +not work this way. I first did all the things I'm responsible for. +I've nothing against some missionary work on other maintainers, but +I'm also loosing a lot of energy over it---same debates over again. + +And when the first localized packages are released we'll get a lot of +responses about ugly translations :-). Surely, and we need to have +beforehand a fairly good idea about how to handle the information +flow between the national teams and the package maintainers. + +Please start saving somewhere a quick history of each PO file. I know +for sure that the file format will change, allowing for comments. +It would be nice that each file has a kind of log, and references for +those who want to submit comments or gripes, or otherwise contribute. +I sent a proposal for a fast and flexible format, but it is not +receiving acceptance yet by the GNU deciders. I'll tell you when I +have more information about this. + +@node Maintainers, Conclusion, Translators, Top +@chapter The Maintainer's View + +The maintainer of a package has many responsibilities. One of them +is ensuring that the package will install easily on many platforms, +and that the magic we described earlier (@pxref{Users}) will work +for installers and end users. + +Of course, there are many possible ways by which GNU @code{gettext} +might be integrated in a distribution, and this chapter does not cover +them in all generality. Instead, it details one possible approach which +is especially adequate for many free software distributions following GNU +standards, or even better, Gnits standards, because GNU @code{gettext} +is purposely for helping the internationalization of the whole GNU +project, and as many other good free packages as possible. So, the +maintainer's view presented here presumes that the package already has +a @file{configure.in} file and uses GNU Autoconf. + +Nevertheless, GNU @code{gettext} may surely be useful for free packages +not following GNU standards and conventions, but the maintainers of such +packages might have to show imagination and initiative in organizing +their distributions so @code{gettext} work for them in all situations. +There are surely many, out there. + +Even if @code{gettext} methods are now stabilizing, slight adjustments +might be needed between successive @code{gettext} versions, so you +should ideally revise this chapter in subsequent releases, looking +for changes. + +@menu +* Flat and Non-Flat:: Flat or Non-Flat Directory Structures +* Prerequisites:: Prerequisite Works +* gettextize Invocation:: Invoking the @code{gettextize} Program +* Adjusting Files:: Files You Must Create or Alter +@end menu + +@node Flat and Non-Flat, Prerequisites, Maintainers, Maintainers +@section Flat or Non-Flat Directory Structures + +Some free software packages are distributed as @code{tar} files which unpack +in a single directory, these are said to be @dfn{flat} distributions. +Other free software packages have a one level hierarchy of subdirectories, using +for example a subdirectory named @file{doc/} for the Texinfo manual and +man pages, another called @file{lib/} for holding functions meant to +replace or complement C libraries, and a subdirectory @file{src/} for +holding the proper sources for the package. These other distributions +are said to be @dfn{non-flat}. + +For now, we cannot say much about flat distributions. A flat +directory structure has the disadvantage of increasing the difficulty +of updating to a new version of GNU @code{gettext}. Also, if you have +many PO files, this could somewhat pollute your single directory. +In the GNU @code{gettext} distribution, the @file{misc/} directory +contains a shell script named @file{combine-sh}. That script may +be used for combining all the C files of the @file{intl/} directory +into a pair of C files (one @file{.c} and one @file{.h}). Those two +generated files would fit more easily in a flat directory structure, +and you will then have to add these two files to your project. + +Maybe because GNU @code{gettext} itself has a non-flat structure, +we have more experience with this approach, and this is what will be +described in the remaining of this chapter. Some maintainers might +use this as an opportunity to unflatten their package structure. +Only later, once gained more experience adapting GNU @code{gettext} +to flat distributions, we might add some notes about how to proceed +in flat situations. + +@node Prerequisites, gettextize Invocation, Flat and Non-Flat, Maintainers +@section Prerequisite Works + +There are some works which are required for using GNU @code{gettext} +in one of your package. These works have some kind of generality +that escape the point by point descriptions used in the remainder +of this chapter. So, we describe them here. + +@itemize @bullet +@item +Before attempting to use you should install some other packages first. +Ensure that recent versions of GNU @code{m4}, GNU Autoconf and GNU +@code{gettext} are already installed at your site, and if not, proceed +to do this first. If you got to install these things, beware that +GNU @code{m4} must be fully installed before GNU Autoconf is even +@emph{configured}. + +To further ease the task of a package maintainer the @code{automake} +package was designed and implemented. GNU @code{gettext} now uses this +tool and the @file{Makefile}s in the @file{intl/} and @file{po/} +therefore know about all the goals necessary for using @code{automake} +and @file{libintl} in one project. + +Those four packages are only needed to you, as a maintainer; the +installers of your own package and end users do not really need any of +GNU @code{m4}, GNU Autoconf, GNU @code{gettext}, or GNU @code{automake} +for successfully installing and running your package, with messages +properly translated. But this is not completely true if you provide +internationalized shell scripts within your own package: GNU +@code{gettext} shall then be installed at the user site if the end users +want to see the translation of shell script messages. + +@item +Your package should use Autoconf and have a @file{configure.in} file. +If it does not, you have to learn how. The Autoconf documentation +is quite well written, it is a good idea that you print it and get +familiar with it. + +@item +Your C sources should have already been modified according to +instructions given earlier in this manual. @xref{Sources}. + +@item +Your @file{po/} directory should receive all PO files submitted to you +by the translator teams, each having @file{@var{ll}.po} as a name. +This is not usually easy to get translation +work done before your package gets internationalized and available! +Since the cycle has to start somewhere, the easiest for the maintainer +is to start with absolutely no PO files, and wait until various +translator teams get interested in your package, and submit PO files. + +@end itemize + +It is worth adding here a few words about how the maintainer should +ideally behave with PO files submissions. As a maintainer, your role is +to authentify the origin of the submission as being the representative +of the appropriate translating teams of the Translation Project (forward +the submission to @file{translation@@iro.umontreal.ca} in case of doubt), +to ensure that the PO file format is not severely broken and does not +prevent successful installation, and for the rest, to merely to put these +PO files in @file{po/} for distribution. + +As a maintainer, you do not have to take on your shoulders the +responsibility of checking if the translations are adequate or +complete, and should avoid diving into linguistic matters. Translation +teams drive themselves and are fully responsible of their linguistic +choices for the Translation Project. Keep in mind that translator teams are @emph{not} +driven by maintainers. You can help by carefully redirecting all +communications and reports from users about linguistic matters to the +appropriate translation team, or explain users how to reach or join +their team. The simplest might be to send them the @file{ABOUT-NLS} file. + +Maintainers should @emph{never ever} apply PO file bug reports +themselves, short-cutting translation teams. If some translator has +difficulty to get some of her points through her team, it should not be +an issue for her to directly negotiate translations with maintainers. +Teams ought to settle their problems themselves, if any. If you, as +a maintainer, ever think there is a real problem with a team, please +never try to @emph{solve} a team's problem on your own. + +@node gettextize Invocation, Adjusting Files, Prerequisites, Maintainers +@section Invoking the @code{gettextize} Program + +Some files are consistently and identically needed in every package +internationalized through GNU @code{gettext}. As a matter of +convenience, the @code{gettextize} program puts all these files right +in your package. This program has the following synopsis: + +@example +gettextize [ @var{option}@dots{} ] [ @var{directory} ] +@end example + +@noindent +and accepts the following options: + +@table @samp +@item -c +@itemx --copy +Copy the needed files instead of making symbolic links. Using links +would allow the package to always use the latest @code{gettext} code +available on the system, but it might disturb some mechanism the +maintainer is used to apply to the sources. Because running +@code{gettextize} is easy there shouldn't be problems with using copies. + +@item -f +@itemx --force +Force replacement of files which already exist. + +@item -h +@itemx --help +Display this help and exit. + +@item --version +Output version information and exit. + +@end table + +If @var{directory} is given, this is the top level directory of a +package to prepare for using GNU @code{gettext}. If not given, it +is assumed that the current directory is the top level directory of +such a package. + +The program @code{gettextize} provides the following files. However, +no existing file will be replaced unless the option @code{--force} +(@code{-f}) is specified. + +@enumerate +@item +The @file{ABOUT-NLS} file is copied in the main directory of your package, +the one being at the top level. This file gives the main indications +about how to install and use the Native Language Support features +of your program. You might elect to use a more recent copy of this +@file{ABOUT-NLS} file than the one provided through @code{gettextize}, +if you have one handy. You may also fetch a more recent copy of file +@file{ABOUT-NLS} from Translation Project sites, and from most GNU +archive sites. + +@item +A @file{po/} directory is created for eventually holding +all translation files, but initially only containing the file +@file{po/Makefile.in.in} from the GNU @code{gettext} distribution. +(beware the double @samp{.in} in the file name). If the @file{po/} +directory already exists, it will be preserved along with the files +it contains, and only @file{Makefile.in.in} will be overwritten. + +@item +A @file{intl/} directory is created and filled with most of the files +originally in the @file{intl/} directory of the GNU @code{gettext} +distribution. Also, if option @code{--force} (@code{-f}) is given, +the @file{intl/} directory is emptied first. + +@end enumerate + +If your site support symbolic links, @code{gettextize} will not +actually copy the files into your package, but establish symbolic +links instead. This avoids duplicating the disk space needed in +all packages. Merely using the @samp{-h} option while creating the +@code{tar} archive of your distribution will resolve each link by an +actual copy in the distribution archive. So, to insist, you really +should use @samp{-h} option with @code{tar} within your @code{dist} +goal of your main @file{Makefile.in}. + +It is interesting to understand that most new files for supporting +GNU @code{gettext} facilities in one package go in @file{intl/} +and @file{po/} subdirectories. One distinction between these two +directories is that @file{intl/} is meant to be completely identical +in all packages using GNU @code{gettext}, while all newly created +files, which have to be different, go into @file{po/}. There is a +common @file{Makefile.in.in} in @file{po/}, because the @file{po/} +directory needs its own @file{Makefile}, and it has been designed so +it can be identical in all packages. + +@node Adjusting Files, , gettextize Invocation, Maintainers +@section Files You Must Create or Alter + +Besides files which are automatically added through @code{gettextize}, +there are many files needing revision for properly interacting with +GNU @code{gettext}. If you are closely following GNU standards for +Makefile engineering and auto-configuration, the adaptations should +be easier to achieve. Here is a point by point description of the +changes needed in each. + +So, here comes a list of files, each one followed by a description of +all alterations it needs. Many examples are taken out from the GNU +@code{gettext} @value{VERSION} distribution itself. You may indeed +refer to the source code of the GNU @code{gettext} package, as it +is intended to be a good example and master implementation for using +its own functionality. + +@menu +* po/POTFILES.in:: @file{POTFILES.in} in @file{po/} +* configure.in:: @file{configure.in} at top level +* aclocal:: @file{aclocal.m4} at top level +* acconfig:: @file{acconfig.h} at top level +* Makefile:: @file{Makefile.in} at top level +* src/Makefile:: @file{Makefile.in} in @file{src/} +@end menu + +@node po/POTFILES.in, configure.in, Adjusting Files, Adjusting Files +@subsection @file{POTFILES.in} in @file{po/} + +The @file{po/} directory should receive a file named +@file{POTFILES.in}. This file tells which files, among all program +sources, have marked strings needing translation. Here is an example +of such a file: + +@example +@group +# List of source files containing translatable strings. +# Copyright (C) 1995 Free Software Foundation, Inc. + +# Common library files +lib/error.c +lib/getopt.c +lib/xmalloc.c + +# Package source files +src/gettextp.c +src/msgfmt.c +src/xgettext.c +@end group +@end example + +@noindent +Dashed comments and white lines are ignored. All other lines +list those source files containing strings marked for translation +(@pxref{Mark Keywords}), in a notation relative to the top level +of your whole distribution, rather than the location of the +@file{POTFILES.in} file itself. + +@node configure.in, aclocal, po/POTFILES.in, Adjusting Files +@subsection @file{configure.in} at top level + +@enumerate +@item Declare the package and version. + +This is done by a set of lines like these: + +@example +PACKAGE=gettext +VERSION=@value{VERSION} +AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE") +AC_DEFINE_UNQUOTED(VERSION, "$VERSION") +AC_SUBST(PACKAGE) +AC_SUBST(VERSION) +@end example + +@noindent +Of course, you replace @samp{gettext} with the name of your package, +and @samp{@value{VERSION}} by its version numbers, exactly as they +should appear in the packaged @code{tar} file name of your distribution +(@file{gettext-@value{VERSION}.tar.gz}, here). + +@item Declare the available translations. + +This is done by defining @code{ALL_LINGUAS} to the white separated, +quoted list of available languages, in a single line, like this: + +@example +ALL_LINGUAS="de fr" +@end example + +@noindent +This example means that German and French PO files are available, so +that these languages are currently supported by your package. If you +want to further restrict, at installation time, the set of installed +languages, this should not be done by modifying @code{ALL_LINGUAS} in +@file{configure.in}, but rather by using the @code{LINGUAS} environment +variable (@pxref{Installers}). + +@item Check for internationalization support. + +Here is the main @code{m4} macro for triggering internationalization +support. Just add this line to @file{configure.in}: + +@example +AM_GNU_GETTEXT +@end example + +@noindent +This call is purposely simple, even if it generates a lot of configure +time checking and actions. + +@item Have output files created. + +The @code{AC_OUTPUT} directive, at the end of your @file{configure.in} +file, needs to be modified in two ways: + +@example +AC_OUTPUT([@var{existing configuration files} intl/Makefile po/Makefile.in], +@var{existing additional actions}]) +@end example + +The modification to the first argument to @code{AC_OUTPUT} asks +for substitution in the @file{intl/} and @file{po/} directories. +Note the @samp{.in} suffix used for @file{po/} only. This is because +the distributed file is really @file{po/Makefile.in.in}. + +@end enumerate + +@node aclocal, acconfig, configure.in, Adjusting Files +@subsection @file{aclocal.m4} at top level + +If you do not have an @file{aclocal.m4} file in your distribution, +the simplest is taking a copy of @file{aclocal.m4} from +GNU @code{gettext}. But to be precise, you only need macros +@code{AM_LC_MESSAGES}, @code{AM_WITH_NLS} and @code{AM_GNU_GETTEXT}, +and @code{AM_PATH_PROG_WITH_TEST}, which is called by @code{AM_WITH_NLS}, +so you may use an editor and remove macros you do not need. + +If you already have an @file{aclocal.m4} file, then you will have +to merge the said macros into your @file{aclocal.m4}. Note that if +you are upgrading from a previous release of GNU @code{gettext}, you +should most probably @emph{replace} the said macros, as they usually +change a little from one release of GNU @code{gettext} to the next. +Their contents may vary as we get more experience with strange systems +out there. + +These macros check for the internationalization support functions +and related informations. Hopefully, once stabilized, these macros +might be integrated in the standard Autoconf set, because this +piece of @code{m4} code will be the same for all projects using GNU +@code{gettext}. + +@node acconfig, Makefile, aclocal, Adjusting Files +@subsection @file{acconfig.h} at top level + +If you do not have an @file{acconfig.h} file in your distribution, the +simplest is use take a copy of @file{acconfig.h} from GNU +@code{gettext}. But to be precise, you only need the lines and comments +for @code{ENABLE_NLS}, @code{HAVE_CATGETS}, @code{HAVE_GETTEXT} and +@code{HAVE_LC_MESSAGES}, @code{HAVE_STPCPY}, @code{PACKAGE} and +@code{VERSION}, so you may use an editor and remove everything else. If +you already have an @file{acconfig.h} file, then you should merge the +said definitions into your @file{acconfig.h}. + +@node Makefile, src/Makefile, acconfig, Adjusting Files +@subsection @file{Makefile.in} at top level + +Here are a few modifications you need to make to your main, top-level +@file{Makefile.in} file. + +@enumerate +@item +Add the following lines near the beginning of your @file{Makefile.in}, +so the @samp{dist:} goal will work properly (as explained further down): + +@example +PACKAGE = @@PACKAGE@@ +VERSION = @@VERSION@@ +@end example + +@item +Add file @file{ABOUT-NLS} to the @code{DISTFILES} definition, so the file gets +distributed. + +@item +Wherever you process subdirectories in your @file{Makefile.in}, be sure +you also process dir subdirectories @samp{intl} and @samp{po}. Special +rules in the @file{Makefiles} take care for the case where no +internationalization is wanted. + +If you are using Makefiles, either generated by automake, or hand-written +so they carefully follow the GNU coding standards, the effected goals for +which the new subdirectories must be handled include @samp{installdirs}, +@samp{install}, @samp{uninstall}, @samp{clean}, @samp{distclean}. + +Here is an example of a canonical order of processing. In this +example, we also define @code{SUBDIRS} in @code{Makefile.in} for it +to be further used in the @samp{dist:} goal. + +@example +SUBDIRS = doc lib @@INTLSUB@@ src @@POSUB@@ +@end example + +@noindent +that you will have to adapt to your own package. + +@item +A delicate point is the @samp{dist:} goal, as both +@file{intl/Makefile} and @file{po/Makefile} will later assume that the +proper directory has been set up from the main @file{Makefile}. Here is +an example at what the @samp{dist:} goal might look like: + +@example +distdir = $(PACKAGE)-$(VERSION) +dist: Makefile + rm -fr $(distdir) + mkdir $(distdir) + chmod 777 $(distdir) + for file in $(DISTFILES); do \ + ln $$file $(distdir) 2>/dev/null || cp -p $$file $(distdir); \ + done + for subdir in $(SUBDIRS); do \ + mkdir $(distdir)/$$subdir || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $@@) || exit 1; \ + done + tar chozf $(distdir).tar.gz $(distdir) + rm -fr $(distdir) +@end example + +@end enumerate + +@node src/Makefile, , Makefile, Adjusting Files +@subsection @file{Makefile.in} in @file{src/} + +Some of the modifications made in the main @file{Makefile.in} will +also be needed in the @file{Makefile.in} from your package sources, +which we assume here to be in the @file{src/} subdirectory. Here are +all the modifications needed in @file{src/Makefile.in}: + +@enumerate +@item +In view of the @samp{dist:} goal, you should have these lines near the +beginning of @file{src/Makefile.in}: + +@example +PACKAGE = @@PACKAGE@@ +VERSION = @@VERSION@@ +@end example + +@item +If not done already, you should guarantee that @code{top_srcdir} +gets defined. This will serve for @code{cpp} include files. Just add +the line: + +@example +top_srcdir = @@top_srcdir@@ +@end example + +@item +You might also want to define @code{subdir} as @samp{src}, later +allowing for almost uniform @samp{dist:} goals in all your +@file{Makefile.in}. At list, the @samp{dist:} goal below assume that +you used: + +@example +subdir = src +@end example + +@item +You should ensure that the final linking will use @code{@@INTLLIBS@@} as +a library. An easy way to achieve this is to manage that it gets into +@code{LIBS}, like this: + +@example +LIBS = @@INTLLIBS@@ @@LIBS@@ +@end example + +In most packages internationalized with GNU @code{gettext}, one will +find a directory @file{lib/} in which a library containing some helper +functions will be build. (You need at least the few functions which the +GNU @code{gettext} Library itself needs.) However some of the functions +in the @file{lib/} also give messages to the user which of course should be +translated, too. Taking care of this it is not enough to place the support +library (say @file{libsupport.a}) just between the @code{@@INTLLIBS@@} +and @code{@@LIBS@@} in the above example. Instead one has to write this: + +@example +LIBS = ../lib/libsupport.a @@INTLLIBS@@ ../lib/libsupport.a @@LIBS@@ +@end example + +@item +You should also ensure that directory @file{intl/} will be searched for +C preprocessor include files in all circumstances. So, you have to +manage so both @samp{-I../intl} and @samp{-I$(top_srcdir)/intl} will +be given to the C compiler. + +@item +Your @samp{dist:} goal has to conform with others. Here is a +reasonable definition for it: + +@example +distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) +dist: Makefile $(DISTFILES) + for file in $(DISTFILES); do \ + ln $$file $(distdir) 2>/dev/null || cp -p $$file $(distdir); \ + done +@end example + +@end enumerate + +@node Conclusion, Country Codes, Maintainers, Top +@chapter Concluding Remarks + +We would like to conclude this GNU @code{gettext} manual by presenting +an history of the Translation Project so far. We finally give +a few pointers for those who want to do further research or readings +about Native Language Support matters. + +@menu +* History:: History of GNU @code{gettext} +* References:: Related Readings +@end menu + +@node History, References, Conclusion, Conclusion +@section History of GNU @code{gettext} + +Internationalization concerns and algorithms have been informally +and casually discussed for years in GNU, sometimes around GNU +@code{libc}, maybe around the incoming @code{Hurd}, or otherwise +(nobody clearly remembers). And even then, when the work started for +real, this was somewhat independently of these previous discussions. + +This all began in July 1994, when Patrick D'Cruze had the idea and +initiative of internationalizing version 3.9.2 of GNU @code{fileutils}. +He then asked Jim Meyering, the maintainer, how to get those changes +folded into an official release. That first draft was full of +@code{#ifdef}s and somewhat disconcerting, and Jim wanted to find +nicer ways. Patrick and Jim shared some tries and experimentations +in this area. Then, feeling that this might eventually have a deeper +impact on GNU, Jim wanted to know what standards were, and contacted +Richard Stallman, who very quickly and verbally described an overall +design for what was meant to become @code{glocale}, at that time. + +Jim implemented @code{glocale} and got a lot of exhausting feedback +from Patrick and Richard, of course, but also from Mitchum DSouza +(who wrote a @code{catgets}-like package), Roland McGrath, maybe David +MacKenzie, Fran@,{c}ois Pinard, and Paul Eggert, all pushing and +pulling in various directions, not always compatible, to the extent +that after a couple of test releases, @code{glocale} was torn apart. + +While Jim took some distance and time and became dad for a second +time, Roland wanted to get GNU @code{libc} internationalized, and +got Ulrich Drepper involved in that project. Instead of starting +from @code{glocale}, Ulrich rewrote something from scratch, but +more conformant to the set of guidelines who emerged out of the +@code{glocale} effort. Then, Ulrich got people from the previous +forum to involve themselves into this new project, and the switch +from @code{glocale} to what was first named @code{msgutils}, renamed +@code{nlsutils}, and later @code{gettext}, became officially accepted +by Richard in May 1995 or so. + +Let's summarize by saying that Ulrich Drepper wrote GNU @code{gettext} +in April 1995. The first official release of the package, including +PO mode, occurred in July 1995, and was numbered 0.7. Other people +contributed to the effort by providing a discussion forum around +Ulrich, writing little pieces of code, or testing. These are quoted +in the @code{THANKS} file which comes with the GNU @code{gettext} +distribution. + +While this was being done, Fran@,{c}ois adapted half a dozen of +GNU packages to @code{glocale} first, then later to @code{gettext}, +putting them in pretest, so providing along the way an effective +user environment for fine tuning the evolving tools. He also took +the responsibility of organizing and coordinating the Translation +Project. After nearly a year of informal exchanges between people from +many countries, translator teams started to exist in May 1995, through +the creation and support by Patrick D'Cruze of twenty unmoderated +mailing lists for that many native languages, and two moderated +lists: one for reaching all teams at once, the other for reaching +all willing maintainers of internationalized free software packages. + +Fran@,{c}ois also wrote PO mode in June 1995 with the collaboration +of Greg McGary, as a kind of contribution to Ulrich's package. +He also gave a hand with the GNU @code{gettext} Texinfo manual. + +@node References, , History, Conclusion +@section Related Readings + +Eugene H. Dorr (@file{dorre@@well.com}) maintains an interesting +bibliography on internationalization matters, called +@cite{Internationalization Reference List}, which is available as: +@example +ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/i18n-books.txt +@end example + +Michael Gschwind (@file{mike@@vlsivie.tuwien.ac.at}) maintains a +Frequently Asked Questions (FAQ) list, entitled @cite{Programming for +Internationalisation}. This FAQ discusses writing programs which +can handle different language conventions, character sets, etc.; +and is applicable to all character set encodings, with particular +emphasis on @w{ISO 8859-1}. It is regularly published in Usenet +groups @file{comp.unix.questions}, @file{comp.std.internat}, +@file{comp.software.international}, @file{comp.lang.c}, +@file{comp.windows.x}, @file{comp.std.c}, @file{comp.answers} +and @file{news.answers}. The home location of this document is: +@example +ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit/ISO-programming +@end example + +Patrick D'Cruze (@file{pdcruze@@li.org}) wrote a tutorial about NLS +matters, and Jochen Hein (@file{Hein@@student.tu-clausthal.de}) took +over the responsibility of maintaining it. It may be found as: +@example +ftp://sunsite.unc.edu/pub/Linux/utils/nls/catalogs/Incoming/... + ...locale-tutorial-0.8.txt.gz +@end example +@noindent +This site is mirrored in: +@example +ftp://ftp.ibp.fr/pub/linux/sunsite/ +@end example + +A French version of the same tutorial should be findable at: +@example +ftp://ftp.ibp.fr/pub/linux/french/docs/ +@end example +@noindent +together with French translations of many Linux-related documents. + +@node Country Codes, , Conclusion, Top +@appendix Country Codes + +The @w{ISO 639} standard defines two character codes for many countries. +All abreviations for countries or languages used in the Translation +Project should come from this standard. + +@table @samp +@include iso-apdx.texi +@end table + +@contents +@bye + +@c Local variables: +@c texinfo-column-for-description: 32 +@c End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/iso-apdx.sed b/debian/gettext-kde/gettext-kde-0.10.35/doc/iso-apdx.sed new file mode 100644 index 00000000..1f9948b9 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/iso-apdx.sed @@ -0,0 +1,19 @@ +#! /usr/bin/sed -f +# +# each line of the form ^.. .* contains the code for a country. +# +/^.. / { + h + s/^.. \(.*\)/\1./ + x + s/^\(..\).*/@item \1/ + G + p +} +# +# delete the rest +# +d + + + diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/iso-apdx.texi b/debian/gettext-kde/gettext-kde-0.10.35/doc/iso-apdx.texi new file mode 100644 index 00000000..df509213 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/iso-apdx.texi @@ -0,0 +1,278 @@ +@item aa +Afar. +@item ab +Abkhazian. +@item af +Afrikaans. +@item am +Amharic. +@item ar +Arabic. +@item as +Assamese. +@item ay +Aymara. +@item az +Azerbaijani. +@item ba +Bashkir. +@item be +Byelorussian. +@item bg +Bulgarian. +@item bh +Bihari. +@item bi +Bislama. +@item bn +Bengali; Bangla. +@item bo +Tibetan. +@item br +Breton. +@item ca +Catalan. +@item co +Corsican. +@item cs +Czech. +@item cy +Welsh. +@item da +Danish. +@item de +German. +@item dz +Bhutani. +@item el +Greek. +@item en +English. +@item eo +Esperanto. +@item es +Spanish. +@item et +Estonian. +@item eu +Basque. +@item fa +Persian. +@item fi +Finnish. +@item fj +Fiji. +@item fo +Faroese. +@item fr +French. +@item fy +Frisian. +@item ga +Irish. +@item gd +Scots Gaelic. +@item gl +Galician. +@item gn +Guarani. +@item gu +Gujarati. +@item ha +Hausa. +@item he +Hebrew (formerly iw). +@item hi +Hindi. +@item hr +Croatian. +@item hu +Hungarian. +@item hy +Armenian. +@item ia +Interlingua. +@item id +Indonesian (formerly in). +@item ie +Interlingue. +@item ik +Inupiak. +@item is +Icelandic. +@item it +Italian. +@item iu +Inuktitut. +@item ja +Japanese. +@item jw +Javanese. +@item ka +Georgian. +@item kk +Kazakh. +@item kl +Greenlandic. +@item km +Cambodian. +@item kn +Kannada. +@item ko +Korean. +@item ks +Kashmiri. +@item ku +Kurdish. +@item ky +Kirghiz. +@item la +Latin. +@item ln +Lingala. +@item lo +Laothian. +@item lt +Lithuanian. +@item lv +Latvian, Lettish. +@item mg +Malagasy. +@item mi +Maori. +@item mk +Macedonian. +@item ml +Malayalam. +@item mn +Mongolian. +@item mo +Moldavian. +@item mr +Marathi. +@item ms +Malay. +@item mt +Maltese. +@item my +Burmese. +@item na +Nauru. +@item ne +Nepali. +@item nl +Dutch. +@item no +Norwegian. +@item oc +Occitan. +@item om +(Afan) Oromo. +@item or +Oriya. +@item pa +Punjabi. +@item pl +Polish. +@item ps +Pashto, Pushto. +@item pt +Portuguese. +@item qu +Quechua. +@item rm +Rhaeto-Romance. +@item rn +Kirundi. +@item ro +Romanian. +@item ru +Russian. +@item rw +Kinyarwanda. +@item sa +Sanskrit. +@item sd +Sindhi. +@item sg +Sangro. +@item sh +Serbo-Croatian. +@item si +Sinhalese. +@item sk +Slovak. +@item sl +Slovenian. +@item sm +Samoan. +@item sn +Shona. +@item so +Somali. +@item sq +Albanian. +@item sr +Serbian. +@item ss +Siswati. +@item st +Sesotho. +@item su +Sundanese. +@item sv +Swedish. +@item sw +Swahili. +@item ta +Tamil. +@item te +Telugu. +@item tg +Tajik. +@item th +Thai. +@item ti +Tigrinya. +@item tk +Turkmen. +@item tl +Tagalog. +@item tn +Setswana. +@item to +Tonga. +@item tr +Turkish. +@item ts +Tsonga. +@item tt +Tatar. +@item tw +Twi. +@item ug +Uighur. +@item uk +Ukrainian. +@item ur +Urdu. +@item uz +Uzbek. +@item vi +Vietnamese. +@item vo +Volapuk. +@item wo +Wolof. +@item xh +Xhosa. +@item yi +Yiddish (formerly ji). +@item yo +Yoruba. +@item za +Zhuang. +@item zh +Chinese. +@item zu +Zulu. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/matrix.texi b/debian/gettext-kde/gettext-kde-0.10.35/doc/matrix.texi new file mode 100644 index 00000000..59d70d07 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/matrix.texi @@ -0,0 +1,36 @@ +@example +@group +Ready PO files cs da de en es fi fr it ja ko nl no pl pt ru sl sv + .----------------------------------------------------. +bash | [] [] [] | 3 +bison | [] [] [] | 3 +clisp | [] [] [] [] | 4 +cpio | [] [] [] [] [] [] | 6 +diffutils | [] [] [] [] [] | 5 +enscript | [] [] [] [] [] [] | 6 +fileutils | [] [] [] [] [] [] [] [] [] [] | 10 +findutils | [] [] [] [] [] [] [] [] [] | 9 +flex | [] [] [] [] | 4 +gcal | [] [] [] [] [] | 5 +gettext | [] [] [] [] [] [] [] [] [] [] [] | 12 +grep | [] [] [] [] [] [] [] [] [] [] | 10 +hello | [] [] [] [] [] [] [] [] [] [] [] | 11 +id-utils | [] [] [] | 3 +indent | [] [] [] [] [] | 5 +libc | [] [] [] [] [] [] [] | 7 +m4 | [] [] [] [] [] [] | 6 +make | [] [] [] [] [] [] | 6 +music | [] [] | 2 +ptx | [] [] [] [] [] [] [] [] | 8 +recode | [] [] [] [] [] [] [] [] [] | 9 +sh-utils | [] [] [] [] [] [] [] [] | 8 +sharutils | [] [] [] [] [] [] | 6 +tar | [] [] [] [] [] [] [] [] [] [] [] | 11 +texinfo | [] [] [] | 3 +textutils | [] [] [] [] [] [] [] [] [] | 9 +wdiff | [] [] [] [] [] [] [] [] | 8 + `----------------------------------------------------' + 17 languages cs da de en es fi fr it ja ko nl no pl pt ru sl sv + 27 packages 6 4 25 1 18 1 26 2 1 12 20 9 19 7 4 7 17 179 +@end group +@end example diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/mdate-sh b/debian/gettext-kde/gettext-kde-0.10.35/doc/mdate-sh new file mode 100644 index 00000000..37171f21 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/mdate-sh @@ -0,0 +1,92 @@ +#!/bin/sh +# Get modification time of a file or directory and pretty-print it. +# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +# written by Ulrich Drepper <[email protected]>, June 1995 +# +# 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, 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. + +# Prevent date giving response in another language. +LANG=C +export LANG +LC_ALL=C +export LC_ALL +LC_TIME=C +export LC_TIME + +# Get the extended ls output of the file or directory. +# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. +if ls -L /dev/null 1>/dev/null 2>&1; then + set - x`ls -L -l -d $1` +else + set - x`ls -l -d $1` +fi +# The month is at least the fourth argument +# (3 shifts here, the next inside the loop). +shift +shift +shift + +# Find the month. Next argument is day, followed by the year or time. +month= +until test $month +do + shift + case $1 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; + esac +done + +day=$2 + +# Here we have to deal with the problem that the ls output gives either +# the time of day or the year. +case $3 in + *:*) set `date`; eval year=\$$# + case $2 in + Jan) nummonthtod=1;; + Feb) nummonthtod=2;; + Mar) nummonthtod=3;; + Apr) nummonthtod=4;; + May) nummonthtod=5;; + Jun) nummonthtod=6;; + Jul) nummonthtod=7;; + Aug) nummonthtod=8;; + Sep) nummonthtod=9;; + Oct) nummonthtod=10;; + Nov) nummonthtod=11;; + Dec) nummonthtod=12;; + esac + # For the first six month of the year the time notation can also + # be used for files modified in the last year. + if (expr $nummonth \> $nummonthtod) > /dev/null; + then + year=`expr $year - 1` + fi;; + *) year=$3;; +esac + +# The result. +echo $day $month $year diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/nls.texi b/debian/gettext-kde/gettext-kde-0.10.35/doc/nls.texi new file mode 100644 index 00000000..8baa4197 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/nls.texi @@ -0,0 +1,235 @@ +@node Translation Intro +@chapter Notes on the Free Translation Project + +@set STATUS December 1997 + +Free software is going international! The Free Translation Project is +a way to get maintainers of free software, translators, and users all +together, so that will gradually become able to speak many languages. +A few packages already provide translations for their messages. + +If you found this @file{ABOUT-NLS} file inside a distribution, you +may assume that the distributed package does use GNU @code{gettext} +internally, itself available at your nearest GNU archive site. But you +do @emph{not} need to install GNU @code{gettext} prior to configuring, +installing or using this package with messages translated. + +Installers will find here some useful hints. These notes also explain +how users should proceed for getting the programs to use the available +translations. They tell how people wanting to contribute and work +at translations should contact the appropriate team. + +When reporting bugs in the @file{intl/} directory or bugs which may +be related to internationalization, you should tell about the version +of @code{gettext} which is used. The information can be found in +the @file{intl/VERSION} file, in internationalized packages. + +@menu +* One advise:: +* INSTALL Matters:: +* Using This Package:: +* Translating Teams:: +* Available Packages:: +@end menu + +@node One advise +@section One advise in advance + +If you want to exploit the full power of internationalization, you +should configure it using + +@example +./configure --with-included-gettext +@end example + +@noindent +to force usage of internationalizing routines provided within this +package, despite the existence of internationalizing capabilities in the +operating system where this package is being installed. So far, only +the @code{gettext} implementation in the GNU C library version 2 +provides as many features (such as locale alias or message inheritance) +as the implementation here. It is also not possible to offer this +additional functionality on top of a @code{catgets} implementation. +Future versions of GNU @code{gettext} will very likely convey even more +functionality. So it might be a good idea to change to GNU +@code{gettext} as soon as possible. + +So you need not provide this option if you are using GNU libc 2 or you +have installed a recent copy of the GNU gettext package with the +included @file{libintl}. + + +@node INSTALL Matters +@section INSTALL Matters + +Some packages are @dfn{localizable} when properly installed; the +programs they contain can be made to speak your own native language. +Most such packages use GNU @code{gettext}. Other packages have their +own ways to internationalization, predating GNU @code{gettext}. + +By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system provides +usable @code{catgets} (if using this is selected by the installer) or +@code{gettext} functions. If neither is available, the GNU +@code{gettext} own library will be used. This library is wholly +contained within this package, usually in the @file{intl/} subdirectory, +so prior installation of the GNU @code{gettext} package is @emph{not} +required. Installers may use special options at configuration time for +changing the default behaviour. The commands: + +@example +./configure --with-included-gettext +./configure --with-catgets +./configure --disable-nls +@end example + +@noindent +will respectively bypass any pre-existing @code{catgets} or +@code{gettext} to use the internationalizing routines provided within +this package, enable the use of the @code{catgets} functions (if found +on the locale system), or else, @emph{totally} disable translation of +messages. + +When you already have GNU @code{gettext} installed on your system and +run configure without an option for your new package, @code{configure} +will probably detect the previously built and installed @file{libintl.a} +file and will decide to use this. This might be not what is desirable. +You should use the more recent version of the GNU @code{gettext} +library. I.e. if the file @file{intl/VERSION} shows that the library +which comes with this package is more recent, you should use + +@example +./configure --with-included-gettext +@end example + +@noindent +to prevent auto-detection. + +By default the configuration process will not test for the +@code{catgets} function and therefore they will not be used. The +reasons are already given above: the emulation on top of @code{catgets} +cannot provide all the extensions provided by the GNU @code{gettext} +library. If you nevertheless want to use the @code{catgets} functions +use + +@example +./configure --with-catgets +@end example + +@noindent +to enable the test for @code{catgets} (this causes no harm if +@code{catgets} is not available on your system). If you really select +this option we would like to hear about the reasons because we cannot +think of any good one ourself. + +Internationalized packages have usually many @file{po/@var{ll}.po} +files, where @var{ll} gives an @w{ISO 639} two-letter code +identifying the language. Unless translations have been forbidden +at @code{configure} time by using the @samp{--disable-nls} switch, +all available translations are installed together with the package. +However, the environment variable @code{LINGUAS} may be set, prior +to configuration, to limit the installed set. @code{LINGUAS} should +then contain a space separated list of two-letter codes, stating +which languages are allowed. + +@node Using This Package +@section Using This Package + +@c -- +@c FIXME: rewrite to document LANGUAGE, the long names, and aliases. +@c -- +As a user, if your language has been installed for this package, you +only have to set the @code{LANG} environment variable to the appropriate +@w{ISO 639} @samp{@var{ll}} two-letter code prior to using the programs +in the package. For example, let's suppose that you speak German. At +the shell prompt, merely execute @w{@samp{setenv LANG de}} (in +@code{csh}), @w{@samp{export LANG; LANG=de}} (in @code{sh}) or +@w{@samp{export LANG=de}} (in @code{bash}). This can be done from your +@file{.login} or @file{.profile} file, once and for all. +@c Packages which are not internationalized will merely ignore the +@c setting of this variable. +@c FIXME: This last sentence is not true!! --drepper + +An operating system might already offer message localization for many of +its programs, while other programs have been +installed locally with the full capabilities of GNU @code{gettext}. +Just using @code{gettext} extended syntax for @code{LANG} would break +proper localization of already available operating system programs. In +this case, users should set both @code{LANGUAGE} and @code{LANG} +variables in their environment, as programs using GNU @code{gettext} +give preference to @code{LANGUAGE}. For example, some Swedish users +would rather read translations in German than English for when Swedish +is not available. This is easily accomplished by setting +@code{LANGUAGE} to @samp{sv:de} while leaving @code{LANG} to @samp{sv}. + + +@node Translating Teams +@section Translating Teams + +For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list, courtesy of Linux +International. You may reach your translation team at the address +@file{@var{ll}@@li.org}, replacing @var{ll} by the two-letter @w{ISO +639} code for your language. Language codes are @emph{not} the same as +the country codes given in @w{ISO 3166}. The following translation +teams exist, as of @value{STATUS}: + +@quotation +Chinese @code{zh}, Czech @code{cs}, Danish @code{da}, Dutch @code{nl}, +English @code{en}, Esperanto @code{eo}, Finnish @code{fi}, French +@code{fr}, German @code{de}, Hungarian @code{hu}, Irish @code{ga}, +Italian @code{it}, Indonesian @code{id}, Japanese @code{ja}, Korean +@code{ko}, Latin @code{la}, Norwegian @code{no}, Persian @code{fa}, +Polish @code{pl}, Portuguese @code{pt}, Russian @code{ru}, Slovenian +@code{sl}, Spanish @code{es}, Swedish @code{sv}, and Turkish @code{tr}. +@end quotation + +@noindent +For example, you may reach the Chinese translation team by writing to +@file{zh@@li.org}. + +If you'd like to volunteer to @emph{work} at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is @emph{not} the same as the list itself, it +has @samp{-request} appended. For example, speakers of Swedish can send +a message to @w{@file{sv-request@@li.org}}, having this message body: + +@example +subscribe +@end example + +Keep in mind that team members are expected to participate +@emph{actively} in translations, or at solving translational +difficulties, rather than merely lurking around. If your team does not +exist yet and you want to start one, or if you are unsure about what to +do or how to get started, please write to +@w{@file{translation@@iro.umontreal.ca}} to reach the +coordinator for all translator teams. + +The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skill are praised +more than programming skill, here. + +@node Available Packages +@section Available Packages + +Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of +@value{STATUS}. The matrix shows, in regard of each package, for which +languages PO files have been submitted to translation coordination. + +@include matrix.texi + +Some counters in the preceding matrix are higher than the number of visible +blocks let us expect. This is because a few extra PO files are used for +implementing regional variants of languages, or language dialects. + +For a PO file in the matrix above to be effective, the package to which +it applies should also have been internationalized and distributed as +such by its maintainer. There might be an observable lag between the +mere existence a PO file and its wide availability in a distribution. + +If @value{STATUS} seems to be old, you may fetch a more recent copy +of this @file{ABOUT-NLS} file on most GNU archive sites. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/stamp-vti b/debian/gettext-kde/gettext-kde-0.10.35/doc/stamp-vti new file mode 100644 index 00000000..b4f13794 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/stamp-vti @@ -0,0 +1,3 @@ +@set UPDATED 30 April 1998 +@set EDITION 0.10.35 +@set VERSION 0.10.35 diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/texinfo.tex b/debian/gettext-kde/gettext-kde-0.10.35/doc/texinfo.tex new file mode 100644 index 00000000..1d1e570c --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/texinfo.tex @@ -0,0 +1,4935 @@ +%% TeX macros to handle Texinfo files. +%% $Id: texinfo.tex,v 2.217 1997/07/14 17:43:41 karl Exp karl $ + +% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, +% 94, 95, 96, 97 Free Software Foundation, Inc. + +%This texinfo.tex file 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, or (at +%your option) any later version. + +%This texinfo.tex file 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 texinfo.tex file; see the file COPYING. If not, write +%to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +%Boston, MA 02111-1307, USA. + + +%In other words, you are welcome to use, share and improve this program. +%You are forbidden to forbid anyone else to use, share and improve +%what you give them. Help stamp out software-hoarding! + + +% Send bug reports to [email protected]. +% Please include a *precise* test case in each bug report. + + +% Make it possible to create a .fmt file just by loading this file: +% if the underlying format is not loaded, start by loading it now. +% Added by gildea November 1993. +\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi + +% This automatically updates the version number based on RCS. +\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}} +\deftexinfoversion$Revision: 2.217 $ +\message{Loading texinfo package [Version \texinfoversion]:} + +% If in a .fmt file, print the version number +% and turn on active characters that we couldn't do earlier because +% they might have appeared in the input file name. +\everyjob{\message{[Texinfo version \texinfoversion]}\message{} + \catcode`+=\active \catcode`\_=\active} + +% Save some parts of plain tex whose names we will redefine. + +\let\ptexb=\b +\let\ptexbullet=\bullet +\let\ptexc=\c +\let\ptexcomma=\, +\let\ptexdot=\. +\let\ptexdots=\dots +\let\ptexend=\end +\let\ptexequiv = \equiv +\let\ptexi=\i +\let\ptexlbrace=\{ +\let\ptexrbrace=\} +\let\ptexstar=\* +\let\ptext=\t + +% Be sure we're in horizontal mode when doing a tie, since we make space +% equivalent to this in @example-like environments. Otherwise, a space +% at the beginning of a line will start with \penalty -- and +% since \penalty is valid in vertical mode, we'd end up putting the +% penalty on the vertical list instead of in the new paragraph. +{\catcode`@ = 11 + % Avoid using \@M directly, because that causes trouble + % if the definition is written into an index file. + \global\let\tiepenalty = \@M + \gdef\tie{\leavevmode\penalty\tiepenalty\ } +} + + +\message{Basics,} +\chardef\other=12 + +% If this character appears in an error message or help string, it +% starts a new line in the output. +\newlinechar = `^^J + +% Set up fixed words for English. +\ifx\putwordChapter\undefined{\gdef\putwordChapter{Chapter}}\fi% +\def\putwordInfo{Info}% +\ifx\putwordSee\undefined{\gdef\putwordSee{See}}\fi% +\ifx\putwordsee\undefined{\gdef\putwordsee{see}}\fi% +\ifx\putwordfile\undefined{\gdef\putwordfile{file}}\fi% +\ifx\putwordpage\undefined{\gdef\putwordpage{page}}\fi% +\ifx\putwordsection\undefined{\gdef\putwordsection{section}}\fi% +\ifx\putwordSection\undefined{\gdef\putwordSection{Section}}\fi% +\ifx\putwordTableofContents\undefined{\gdef\putwordTableofContents{Table of Contents}}\fi% +\ifx\putwordShortContents\undefined{\gdef\putwordShortContents{Short Contents}}\fi% +\ifx\putwordAppendix\undefined{\gdef\putwordAppendix{Appendix}}\fi% + +% Ignore a token. +% +\def\gobble#1{} + +\hyphenation{ap-pen-dix} +\hyphenation{mini-buf-fer mini-buf-fers} +\hyphenation{eshell} +\hyphenation{white-space} + +% Margin to add to right of even pages, to left of odd pages. +\newdimen \bindingoffset +\newdimen \normaloffset +\newdimen\pagewidth \newdimen\pageheight + +% Sometimes it is convenient to have everything in the transcript file +% and nothing on the terminal. We don't just call \tracingall here, +% since that produces some useless output on the terminal. +% +\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% +\def\loggingall{\tracingcommands2 \tracingstats2 + \tracingpages1 \tracingoutput1 \tracinglostchars1 + \tracingmacros2 \tracingparagraphs1 \tracingrestores1 + \showboxbreadth\maxdimen\showboxdepth\maxdimen +}% + +% For @cropmarks command. +% Do @cropmarks to get crop marks. +% +\newif\ifcropmarks +\let\cropmarks = \cropmarkstrue +% +% Dimensions to add cropmarks at corners. +% Added by P. A. MacKay, 12 Nov. 1986 +% +\newdimen\cornerlong \newdimen\cornerthick +\newdimen\topandbottommargin +\newdimen\outerhsize \newdimen\outervsize +\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks +\outerhsize=7in +%\outervsize=9.5in +% Alternative @smallbook page size is 9.25in +\outervsize=9.25in +\topandbottommargin=.75in + +% Main output routine. +\chardef\PAGE = 255 +\output = {\onepageout{\pagecontents\PAGE}} + +\newbox\headlinebox +\newbox\footlinebox + +% \onepageout takes a vbox as an argument. Note that \pagecontents +% does insertions, but you have to call it yourself. +\def\onepageout#1{% + \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi + % + \ifodd\pageno \advance\hoffset by \bindingoffset + \else \advance\hoffset by -\bindingoffset\fi + % + % Do this outside of the \shipout so @code etc. will be expanded in + % the headline as they should be, not taken literally (outputting ''code). + \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% + \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% + % + {% + % Have to do this stuff outside the \shipout because we want it to + % take effect in \write's, yet the group defined by the \vbox ends + % before the \shipout runs. + % + \escapechar = `\\ % use backslash in output files. + \indexdummies % don't expand commands in the output. + \normalturnoffactive % \ in index entries must not stay \, e.g., if + % the page break happens to be in the middle of an example. + \shipout\vbox{% + \ifcropmarks \vbox to \outervsize\bgroup + \hsize = \outerhsize + \line{\ewtop\hfil\ewtop}% + \nointerlineskip + \line{% + \vbox{\moveleft\cornerthick\nstop}% + \hfill + \vbox{\moveright\cornerthick\nstop}% + }% + \vskip\topandbottommargin + \line\bgroup + \hfil % center the page within the outer (page) hsize. + \ifodd\pageno\hskip\bindingoffset\fi + \vbox\bgroup + \fi + % + \unvbox\headlinebox + \pagebody{#1}% + \ifdim\ht\footlinebox > 0pt + % Only leave this space if the footline is nonempty. + % (We lessened \vsize for it in \oddfootingxxx.) + % The \baselineskip=24pt in plain's \makefootline has no effect. + \vskip 2\baselineskip + \unvbox\footlinebox + \fi + % + \ifcropmarks + \egroup % end of \vbox\bgroup + \hfil\egroup % end of (centering) \line\bgroup + \vskip\topandbottommargin plus1fill minus1fill + \boxmaxdepth = \cornerthick + \line{% + \vbox{\moveleft\cornerthick\nsbot}% + \hfill + \vbox{\moveright\cornerthick\nsbot}% + }% + \nointerlineskip + \line{\ewbot\hfil\ewbot}% + \egroup % \vbox from first cropmarks clause + \fi + }% end of \shipout\vbox + }% end of group with \turnoffactive + \advancepageno + \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} + +\newinsert\margin \dimen\margin=\maxdimen + +\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} +{\catcode`\@ =11 +\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi +% marginal hacks, [email protected] (Juha Takala) +\ifvoid\margin\else % marginal info is present + \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi +\dimen@=\dp#1 \unvbox#1 +\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi +\ifr@ggedbottom \kern-\dimen@ \vfil \fi} +} + +% Here are the rules for the cropmarks. Note that they are +% offset so that the space between them is truly \outerhsize or \outervsize +% (P. A. MacKay, 12 November, 1986) +% +\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} +\def\nstop{\vbox + {\hrule height\cornerthick depth\cornerlong width\cornerthick}} +\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} +\def\nsbot{\vbox + {\hrule height\cornerlong depth\cornerthick width\cornerthick}} + +% Parse an argument, then pass it to #1. The argument is the rest of +% the input line (except we remove a trailing comment). #1 should be a +% macro which expects an ordinary undelimited TeX argument. +% +\def\parsearg#1{% + \let\next = #1% + \begingroup + \obeylines + \futurelet\temp\parseargx +} + +% If the next token is an obeyed space (from an @example environment or +% the like), remove it and recurse. Otherwise, we're done. +\def\parseargx{% + % \obeyedspace is defined far below, after the definition of \sepspaces. + \ifx\obeyedspace\temp + \expandafter\parseargdiscardspace + \else + \expandafter\parseargline + \fi +} + +% Remove a single space (as the delimiter token to the macro call). +{\obeyspaces % + \gdef\parseargdiscardspace {\futurelet\temp\parseargx}} + +{\obeylines % + \gdef\parseargline#1^^M{% + \endgroup % End of the group started in \parsearg. + % + % First remove any @c comment, then any @comment. + % Result of each macro is put in \toks0. + \argremovec #1\c\relax % + \expandafter\argremovecomment \the\toks0 \comment\relax % + % + % Call the caller's macro, saved as \next in \parsearg. + \expandafter\next\expandafter{\the\toks0}% + }% +} + +% Since all \c{,omment} does is throw away the argument, we can let TeX +% do that for us. The \relax here is matched by the \relax in the call +% in \parseargline; it could be more or less anything, its purpose is +% just to delimit the argument to the \c. +\def\argremovec#1\c#2\relax{\toks0 = {#1}} +\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}} + +% \argremovec{,omment} might leave us with trailing spaces, though; e.g., +% @end itemize @c foo +% will have two active spaces as part of the argument with the +% `itemize'. Here we remove all active spaces from #1, and assign the +% result to \toks0. +% +% This loses if there are any *other* active characters besides spaces +% in the argument -- _ ^ +, for example -- since they get expanded. +% Fortunately, Texinfo does not define any such commands. (If it ever +% does, the catcode of the characters in questionwill have to be changed +% here.) But this means we cannot call \removeactivespaces as part of +% \argremovec{,omment}, since @c uses \parsearg, and thus the argument +% that \parsearg gets might well have any character at all in it. +% +\def\removeactivespaces#1{% + \begingroup + \ignoreactivespaces + \edef\temp{#1}% + \global\toks0 = \expandafter{\temp}% + \endgroup +} + +% Change the active space to expand to nothing. +% +\begingroup + \obeyspaces + \gdef\ignoreactivespaces{\obeyspaces\let =\empty} +\endgroup + + +\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} + +%% These are used to keep @begin/@end levels from running away +%% Call \inENV within environments (after a \begingroup) +\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi} +\def\ENVcheck{% +\ifENV\errmessage{Still within an environment. Type Return to continue.} +\endgroup\fi} % This is not perfect, but it should reduce lossage + +% @begin foo is the same as @foo, for now. +\newhelp\EMsimple{Type <Return> to continue.} + +\outer\def\begin{\parsearg\beginxxx} + +\def\beginxxx #1{% +\expandafter\ifx\csname #1\endcsname\relax +{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else +\csname #1\endcsname\fi} + +% @end foo executes the definition of \Efoo. +% +\def\end{\parsearg\endxxx} +\def\endxxx #1{% + \removeactivespaces{#1}% + \edef\endthing{\the\toks0}% + % + \expandafter\ifx\csname E\endthing\endcsname\relax + \expandafter\ifx\csname \endthing\endcsname\relax + % There's no \foo, i.e., no ``environment'' foo. + \errhelp = \EMsimple + \errmessage{Undefined command `@end \endthing'}% + \else + \unmatchedenderror\endthing + \fi + \else + % Everything's ok; the right environment has been started. + \csname E\endthing\endcsname + \fi +} + +% There is an environment #1, but it hasn't been started. Give an error. +% +\def\unmatchedenderror#1{% + \errhelp = \EMsimple + \errmessage{This `@end #1' doesn't have a matching `@#1'}% +} + +% Define the control sequence \E#1 to give an unmatched @end error. +% +\def\defineunmatchedend#1{% + \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}% +} + + +% Single-spacing is done by various environments (specifically, in +% \nonfillstart and \quotations). +\newskip\singlespaceskip \singlespaceskip = 12.5pt +\def\singlespace{% + % Why was this kern here? It messes up equalizing space above and below + % environments. --karl, 6may93 + %{\advance \baselineskip by -\singlespaceskip + %\kern \baselineskip}% + \setleading \singlespaceskip +} + +%% Simple single-character @ commands + +% @@ prints an @ +% Kludge this until the fonts are right (grr). +\def\@{{\tt \char '100}} + +% This is turned off because it was never documented +% and you can use @w{...} around a quote to suppress ligatures. +%% Define @` and @' to be the same as ` and ' +%% but suppressing ligatures. +%\def\`{{`}} +%\def\'{{'}} + +% Used to generate quoted braces. +\def\mylbrace {{\tt \char '173}} +\def\myrbrace {{\tt \char '175}} +\let\{=\mylbrace +\let\}=\myrbrace +\begingroup + % Definitions to produce actual \{ & \} command in an index. + \catcode`\{ = 12 \catcode`\} = 12 + \catcode`\[ = 1 \catcode`\] = 2 + \catcode`\@ = 0 \catcode`\\ = 12 + @gdef@lbracecmd[\{]% + @gdef@rbracecmd[\}]% +@endgroup + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H. +\let\, = \c +\let\dotaccent = \. +\def\ringaccent#1{{\accent23 #1}} +\let\tieaccent = \t +\let\ubaraccent = \b +\let\udotaccent = \d + +% Other special characters: @questiondown @exclamdown +% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss. +\def\questiondown{?`} +\def\exclamdown{!`} + +% Dotless i and dotless j, used for accents. +\def\imacro{i} +\def\jmacro{j} +\def\dotless#1{% + \def\temp{#1}% + \ifx\temp\imacro \ptexi + \else\ifx\temp\jmacro \j + \else \errmessage{@dotless can be used only with i or j}% + \fi\fi +} + +% @: forces normal size whitespace following. +\def\:{\spacefactor=1000 } + +% @* forces a line break. +\def\*{\hfil\break\hbox{}\ignorespaces} + +% @. is an end-of-sentence period. +\def\.{.\spacefactor=3000 } + +% @enddots{} is an end-of-sentence ellipsis. +\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000} + +% @! is an end-of-sentence bang. +\gdef\!{!\spacefactor=3000 } + +% @? is an end-of-sentence query. +\gdef\?{?\spacefactor=3000 } + +% @w prevents a word break. Without the \leavevmode, @w at the +% beginning of a paragraph, when TeX is still in vertical mode, would +% produce a whole line of output instead of starting the paragraph. +\def\w#1{\leavevmode\hbox{#1}} + +% @group ... @end group forces ... to be all on one page, by enclosing +% it in a TeX vbox. We use \vtop instead of \vbox to construct the box +% to keep its height that of a normal line. According to the rules for +% \topskip (p.114 of the TeXbook), the glue inserted is +% max (\topskip - \ht (first item), 0). If that height is large, +% therefore, no glue is inserted, and the space between the headline and +% the text is small, which looks bad. +% +\def\group{\begingroup + \ifnum\catcode13=\active \else + \errhelp = \groupinvalidhelp + \errmessage{@group invalid in context where filling is enabled}% + \fi + % + % The \vtop we start below produces a box with normal height and large + % depth; thus, TeX puts \baselineskip glue before it, and (when the + % next line of text is done) \lineskip glue after it. (See p.82 of + % the TeXbook.) Thus, space below is not quite equal to space + % above. But it's pretty close. + \def\Egroup{% + \egroup % End the \vtop. + \endgroup % End the \group. + }% + % + \vtop\bgroup + % We have to put a strut on the last line in case the @group is in + % the midst of an example, rather than completely enclosing it. + % Otherwise, the interline space between the last line of the group + % and the first line afterwards is too small. But we can't put the + % strut in \Egroup, since there it would be on a line by itself. + % Hence this just inserts a strut at the beginning of each line. + \everypar = {\strut}% + % + % Since we have a strut on every line, we don't need any of TeX's + % normal interline spacing. + \offinterlineskip + % + % OK, but now we have to do something about blank + % lines in the input in @example-like environments, which normally + % just turn into \lisppar, which will insert no space now that we've + % turned off the interline space. Simplest is to make them be an + % empty paragraph. + \ifx\par\lisppar + \edef\par{\leavevmode \par}% + % + % Reset ^^M's definition to new definition of \par. + \obeylines + \fi + % + % Do @comment since we are called inside an environment such as + % @example, where each end-of-line in the input causes an + % end-of-line in the output. We don't want the end-of-line after + % the `@group' to put extra space in the output. Since @group + % should appear on a line by itself (according to the Texinfo + % manual), we don't worry about eating any user text. + \comment +} +% +% TeX puts in an \escapechar (i.e., `@') at the beginning of the help +% message, so this ends up printing `@group can only ...'. +% +\newhelp\groupinvalidhelp{% +group can only be used in environments such as @example,^^J% +where each line of input produces a line of output.} + +% @need space-in-mils +% forces a page break if there is not space-in-mils remaining. + +\newdimen\mil \mil=0.001in + +\def\need{\parsearg\needx} + +% Old definition--didn't work. +%\def\needx #1{\par % +%% This method tries to make TeX break the page naturally +%% if the depth of the box does not fit. +%{\baselineskip=0pt% +%\vtop to #1\mil{\vfil}\kern -#1\mil\penalty 10000 +%\prevdepth=-1000pt +%}} + +\def\needx#1{% + % Go into vertical mode, so we don't make a big box in the middle of a + % paragraph. + \par + % + % Don't add any leading before our big empty box, but allow a page + % break, since the best break might be right here. + \allowbreak + \nointerlineskip + \vtop to #1\mil{\vfil}% + % + % TeX does not even consider page breaks if a penalty added to the + % main vertical list is 10000 or more. But in order to see if the + % empty box we just added fits on the page, we must make it consider + % page breaks. On the other hand, we don't want to actually break the + % page after the empty box. So we use a penalty of 9999. + % + % There is an extremely small chance that TeX will actually break the + % page at this \penalty, if there are no other feasible breakpoints in + % sight. (If the user is using lots of big @group commands, which + % almost-but-not-quite fill up a page, TeX will have a hard time doing + % good page breaking, for example.) However, I could not construct an + % example where a page broke at this \penalty; if it happens in a real + % document, then we can reconsider our strategy. + \penalty9999 + % + % Back up by the size of the box, whether we did a page break or not. + \kern -#1\mil + % + % Do not allow a page break right after this kern. + \nobreak +} + +% @br forces paragraph break + +\let\br = \par + +% @dots{} output some dots + +\def\dots{$\ldots$} + +% @page forces the start of a new page + +\def\page{\par\vfill\supereject} + +% @exdent text.... +% outputs text on separate line in roman font, starting at standard page margin + +% This records the amount of indent in the innermost environment. +% That's how much \exdent should take out. +\newskip\exdentamount + +% This defn is used inside fill environments such as @defun. +\def\exdent{\parsearg\exdentyyy} +\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}} + +% This defn is used inside nofill environments such as @example. +\def\nofillexdent{\parsearg\nofillexdentyyy} +\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount +\leftline{\hskip\leftskip{\rm#1}}}} + +% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph. + +\def\inmargin#1{% +\strut\vadjust{\nobreak\kern-\strutdepth + \vtop to \strutdepth{\baselineskip\strutdepth\vss + \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}} +\newskip\inmarginspacing \inmarginspacing=1cm +\def\strutdepth{\dp\strutbox} + +%\hbox{{\rm#1}}\hfil\break}} + +% @include file insert text of that file as input. +% Allow normal characters that we make active in the argument (a file name). +\def\include{\begingroup + \catcode`\\=12 + \catcode`~=12 + \catcode`^=12 + \catcode`_=12 + \catcode`|=12 + \catcode`<=12 + \catcode`>=12 + \catcode`+=12 + \parsearg\includezzz} +% Restore active chars for included file. +\def\includezzz#1{\endgroup\begingroup + % Read the included file in a group so nested @include's work. + \def\thisfile{#1}% + \input\thisfile +\endgroup} + +\def\thisfile{} + +% @center line outputs that line, centered + +\def\center{\parsearg\centerzzz} +\def\centerzzz #1{{\advance\hsize by -\leftskip +\advance\hsize by -\rightskip +\centerline{#1}}} + +% @sp n outputs n lines of vertical space + +\def\sp{\parsearg\spxxx} +\def\spxxx #1{\vskip #1\baselineskip} + +% @comment ...line which is ignored... +% @c is the same as @comment +% @ignore ... @end ignore is another way to write a comment + +\def\comment{\catcode 64=\other \catcode 123=\other \catcode 125=\other% +\parsearg \commentxxx} + +\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 } + +\let\c=\comment + +% @paragraphindent is defined for the Info formatting commands only. +\let\paragraphindent=\comment + +% Prevent errors for section commands. +% Used in @ignore and in failing conditionals. +\def\ignoresections{% +\let\chapter=\relax +\let\unnumbered=\relax +\let\top=\relax +\let\unnumberedsec=\relax +\let\unnumberedsection=\relax +\let\unnumberedsubsec=\relax +\let\unnumberedsubsection=\relax +\let\unnumberedsubsubsec=\relax +\let\unnumberedsubsubsection=\relax +\let\section=\relax +\let\subsec=\relax +\let\subsubsec=\relax +\let\subsection=\relax +\let\subsubsection=\relax +\let\appendix=\relax +\let\appendixsec=\relax +\let\appendixsection=\relax +\let\appendixsubsec=\relax +\let\appendixsubsection=\relax +\let\appendixsubsubsec=\relax +\let\appendixsubsubsection=\relax +\let\contents=\relax +\let\smallbook=\relax +\let\titlepage=\relax +} + +% Used in nested conditionals, where we have to parse the Texinfo source +% and so want to turn off most commands, in case they are used +% incorrectly. +% +\def\ignoremorecommands{% + \let\defcodeindex = \relax + \let\defcv = \relax + \let\deffn = \relax + \let\deffnx = \relax + \let\defindex = \relax + \let\defivar = \relax + \let\defmac = \relax + \let\defmethod = \relax + \let\defop = \relax + \let\defopt = \relax + \let\defspec = \relax + \let\deftp = \relax + \let\deftypefn = \relax + \let\deftypefun = \relax + \let\deftypevar = \relax + \let\deftypevr = \relax + \let\defun = \relax + \let\defvar = \relax + \let\defvr = \relax + \let\ref = \relax + \let\xref = \relax + \let\printindex = \relax + \let\pxref = \relax + \let\settitle = \relax + \let\setchapternewpage = \relax + \let\setchapterstyle = \relax + \let\everyheading = \relax + \let\evenheading = \relax + \let\oddheading = \relax + \let\everyfooting = \relax + \let\evenfooting = \relax + \let\oddfooting = \relax + \let\headings = \relax + \let\include = \relax + \let\lowersections = \relax + \let\down = \relax + \let\raisesections = \relax + \let\up = \relax + \let\set = \relax + \let\clear = \relax + \let\item = \relax +} + +% Ignore @ignore ... @end ignore. +% +\def\ignore{\doignore{ignore}} + +% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text. +% +\def\ifinfo{\doignore{ifinfo}} +\def\ifhtml{\doignore{ifhtml}} +\def\ifnottex{\doignore{ifnottex}} +\def\html{\doignore{html}} +\def\menu{\doignore{menu}} +\def\direntry{\doignore{direntry}} + +% Also ignore @macro ... @end macro. The user must run texi2dvi, +% which runs makeinfo to do macro expansion. Ignore @unmacro, too. +\def\macro{\doignore{macro}} +\let\unmacro = \comment + + +% @dircategory CATEGORY -- specify a category of the dir file +% which this file should belong to. Ignore this in TeX. +\let\dircategory = \comment + +% Ignore text until a line `@end #1'. +% +\def\doignore#1{\begingroup + % Don't complain about control sequences we have declared \outer. + \ignoresections + % + % Define a command to swallow text until we reach `@end #1'. + \long\def\doignoretext##1\end #1{\enddoignore}% + % + % Make sure that spaces turn into tokens that match what \doignoretext wants. + \catcode32 = 10 + % + % Ignore braces, too, so mismatched braces don't cause trouble. + \catcode`\{ = 9 + \catcode`\} = 9 + % + % And now expand that command. + \doignoretext +} + +% What we do to finish off ignored text. +% +\def\enddoignore{\endgroup\ignorespaces}% + +\newif\ifwarnedobs\warnedobsfalse +\def\obstexwarn{% + \ifwarnedobs\relax\else + % We need to warn folks that they may have trouble with TeX 3.0. + % This uses \immediate\write16 rather than \message to get newlines. + \immediate\write16{} + \immediate\write16{***WARNING*** for users of Unix TeX 3.0!} + \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} + \immediate\write16{If you are running another version of TeX, relax.} + \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} + \immediate\write16{ Then upgrade your TeX installation if you can.} + \immediate\write16{ (See ftp://ftp.gnu.ai.mit.edu/pub/gnu/TeX.README.)} + \immediate\write16{If you are stuck with version 3.0, run the} + \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} + \immediate\write16{ to use a workaround.} + \immediate\write16{} + \global\warnedobstrue + \fi +} + +% **In TeX 3.0, setting text in \nullfont hangs tex. For a +% workaround (which requires the file ``dummy.tfm'' to be installed), +% uncomment the following line: +%%%%%\font\nullfont=dummy\let\obstexwarn=\relax + +% Ignore text, except that we keep track of conditional commands for +% purposes of nesting, up to an `@end #1' command. +% +\def\nestedignore#1{% + \obstexwarn + % We must actually expand the ignored text to look for the @end + % command, so that nested ignore constructs work. Thus, we put the + % text into a \vbox and then do nothing with the result. To minimize + % the change of memory overflow, we follow the approach outlined on + % page 401 of the TeXbook: make the current font be a dummy font. + % + \setbox0 = \vbox\bgroup + % Don't complain about control sequences we have declared \outer. + \ignoresections + % + % Define `@end #1' to end the box, which will in turn undefine the + % @end command again. + \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% + % + % We are going to be parsing Texinfo commands. Most cause no + % trouble when they are used incorrectly, but some commands do + % complicated argument parsing or otherwise get confused, so we + % undefine them. + % + % We can't do anything about stray @-signs, unfortunately; + % they'll produce `undefined control sequence' errors. + \ignoremorecommands + % + % Set the current font to be \nullfont, a TeX primitive, and define + % all the font commands to also use \nullfont. We don't use + % dummy.tfm, as suggested in the TeXbook, because not all sites + % might have that installed. Therefore, math mode will still + % produce output, but that should be an extremely small amount of + % stuff compared to the main input. + % + \nullfont + \let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont + \let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont + \let\tensf = \nullfont + % Similarly for index fonts (mostly for their use in + % smallexample) + \let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont + \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont + \let\indsf = \nullfont + % + % Don't complain when characters are missing from the fonts. + \tracinglostchars = 0 + % + % Don't bother to do space factor calculations. + \frenchspacing + % + % Don't report underfull hboxes. + \hbadness = 10000 + % + % Do minimal line-breaking. + \pretolerance = 10000 + % + % Do not execute instructions in @tex + \def\tex{\doignore{tex}}% +} + +% @set VAR sets the variable VAR to an empty value. +% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. +% +% Since we want to separate VAR from REST-OF-LINE (which might be +% empty), we can't just use \parsearg; we have to insert a space of our +% own to delimit the rest of the line, and then take it out again if we +% didn't need it. Make sure the catcode of space is correct to avoid +% losing inside @example, for instance. +% +\def\set{\begingroup\catcode` =10 + \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. + \parsearg\setxxx} +\def\setxxx#1{\setyyy#1 \endsetyyy} +\def\setyyy#1 #2\endsetyyy{% + \def\temp{#2}% + \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty + \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. + \fi + \endgroup +} +% Can't use \xdef to pre-expand #2 and save some time, since \temp or +% \next or other control sequences that we've defined might get us into +% an infinite loop. Consider `@set foo @cite{bar}'. +\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} + +% @clear VAR clears (i.e., unsets) the variable VAR. +% +\def\clear{\parsearg\clearxxx} +\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} + +% @value{foo} gets the text saved in variable foo. +% +\def\value{\begingroup + \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. + \valuexxx} +\def\valuexxx#1{% + \expandafter\ifx\csname SET#1\endcsname\relax + {\{No value for ``#1''\}}% + \else + \csname SET#1\endcsname + \fi +\endgroup} + +% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined +% with @set. +% +\def\ifset{\parsearg\ifsetxxx} +\def\ifsetxxx #1{% + \expandafter\ifx\csname SET#1\endcsname\relax + \expandafter\ifsetfail + \else + \expandafter\ifsetsucceed + \fi +} +\def\ifsetsucceed{\conditionalsucceed{ifset}} +\def\ifsetfail{\nestedignore{ifset}} +\defineunmatchedend{ifset} + +% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been +% defined with @set, or has been undefined with @clear. +% +\def\ifclear{\parsearg\ifclearxxx} +\def\ifclearxxx #1{% + \expandafter\ifx\csname SET#1\endcsname\relax + \expandafter\ifclearsucceed + \else + \expandafter\ifclearfail + \fi +} +\def\ifclearsucceed{\conditionalsucceed{ifclear}} +\def\ifclearfail{\nestedignore{ifclear}} +\defineunmatchedend{ifclear} + +% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text +% following, through the first @end iftex (etc.). Make `@end iftex' +% (etc.) valid only after an @iftex. +% +\def\iftex{\conditionalsucceed{iftex}} +\def\ifnothtml{\conditionalsucceed{ifnothtml}} +\def\ifnotinfo{\conditionalsucceed{ifnotinfo}} +\defineunmatchedend{iftex} +\defineunmatchedend{ifnothtml} +\defineunmatchedend{ifnotinfo} + +% We can't just want to start a group at @iftex (for example) and end it +% at @end iftex, since then @set commands inside the conditional have no +% effect (they'd get reverted at the end of the group). So we must +% define \Eiftex to redefine itself to be its previous value. (We can't +% just define it to fail again with an ``unmatched end'' error, since +% the @ifset might be nested.) +% +\def\conditionalsucceed#1{% + \edef\temp{% + % Remember the current value of \E#1. + \let\nece{prevE#1} = \nece{E#1}% + % + % At the `@end #1', redefine \E#1 to be its previous value. + \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}% + }% + \temp +} + +% We need to expand lots of \csname's, but we don't want to expand the +% control sequences after we've constructed them. +% +\def\nece#1{\expandafter\noexpand\csname#1\endcsname} + +% @asis just yields its argument. Used with @table, for example. +% +\def\asis#1{#1} + +% @math means output in math mode. +% We don't use $'s directly in the definition of \math because control +% sequences like \math are expanded when the toc file is written. Then, +% we read the toc file back, the $'s will be normal characters (as they +% should be, according to the definition of Texinfo). So we must use a +% control sequence to switch into and out of math mode. +% +% This isn't quite enough for @math to work properly in indices, but it +% seems unlikely it will ever be needed there. +% +\let\implicitmath = $ +\def\math#1{\implicitmath #1\implicitmath} + +% @bullet and @minus need the same treatment as @math, just above. +\def\bullet{\implicitmath\ptexbullet\implicitmath} +\def\minus{\implicitmath-\implicitmath} + +\def\node{\ENVcheck\parsearg\nodezzz} +\def\nodezzz#1{\nodexxx [#1,]} +\def\nodexxx[#1,#2]{\gdef\lastnode{#1}} +\let\nwnode=\node +\let\lastnode=\relax + +\def\donoderef{\ifx\lastnode\relax\else +\expandafter\expandafter\expandafter\setref{\lastnode}\fi +\global\let\lastnode=\relax} + +\def\unnumbnoderef{\ifx\lastnode\relax\else +\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi +\global\let\lastnode=\relax} + +\def\appendixnoderef{\ifx\lastnode\relax\else +\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi +\global\let\lastnode=\relax} + +% @refill is a no-op. +\let\refill=\relax + +% @setfilename is done at the beginning of every texinfo file. +% So open here the files we need to have open while reading the input. +% This makes it possible to make a .fmt file for texinfo. +\def\setfilename{% + \readauxfile + \opencontents + \openindices + \fixbackslash % Turn off hack to swallow `\input texinfo'. + \global\let\setfilename=\comment % Ignore extra @setfilename cmds. + % + % If texinfo.cnf is present on the system, read it. + % Useful for site-wide @afourpaper, etc. + % Just to be on the safe side, close the input stream before the \input. + \openin 1 texinfo.cnf + \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi + \closein1 + \temp + % + \comment % Ignore the actual filename. +} + +% @bye. +\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} + +% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx} +% \def\macroxxx#1#2 \end macro{% +% \expandafter\gdef\macrotemp#1{#2}% +% \endgroup} + +%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx} +%\def\linemacroxxx#1#2 \end linemacro{% +%\let\parsearg=\relax +%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}% +%\expandafter\xdef\macrotemp{\parsearg\macrotempx}% +%\expandafter\gdef\macrotempx#1{#2}% +%\endgroup} + +%\def\butfirst#1{} + + +\message{fonts,} + +% Font-change commands. + +% Texinfo supports the sans serif font style, which plain TeX does not. +% So we set up a \sf analogous to plain's \rm, etc. +\newfam\sffam +\def\sf{\fam=\sffam \tensf} +\let\li = \sf % Sometimes we call it \li, not \sf. + +% We don't need math for this one. +\def\ttsl{\tenttsl} + +% Use Computer Modern fonts at \magstephalf (11pt). +\newcount\mainmagstep +\mainmagstep=\magstephalf + +% Set the font macro #1 to the font named #2, adding on the +% specified font prefix (normally `cm'). +% #3 is the font's design size, #4 is a scale factor +\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} + +% Use cm as the default font prefix. +% To specify the font prefix, you must define \fontprefix +% before you read in texinfo.tex. +\ifx\fontprefix\undefined +\def\fontprefix{cm} +\fi +% Support font families that don't use the same naming scheme as CM. +\def\rmshape{r} +\def\rmbshape{bx} %where the normal face is bold +\def\bfshape{b} +\def\bxshape{bx} +\def\ttshape{tt} +\def\ttbshape{tt} +\def\ttslshape{sltt} +\def\itshape{ti} +\def\itbshape{bxti} +\def\slshape{sl} +\def\slbshape{bxsl} +\def\sfshape{ss} +\def\sfbshape{ss} +\def\scshape{csc} +\def\scbshape{csc} + +\ifx\bigger\relax +\let\mainmagstep=\magstep1 +\setfont\textrm\rmshape{12}{1000} +\setfont\texttt\ttshape{12}{1000} +\else +\setfont\textrm\rmshape{10}{\mainmagstep} +\setfont\texttt\ttshape{10}{\mainmagstep} +\fi +% Instead of cmb10, you many want to use cmbx10. +% cmbx10 is a prettier font on its own, but cmb10 +% looks better when embedded in a line with cmr10. +\setfont\textbf\bfshape{10}{\mainmagstep} +\setfont\textit\itshape{10}{\mainmagstep} +\setfont\textsl\slshape{10}{\mainmagstep} +\setfont\textsf\sfshape{10}{\mainmagstep} +\setfont\textsc\scshape{10}{\mainmagstep} +\setfont\textttsl\ttslshape{10}{\mainmagstep} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep + +% A few fonts for @defun, etc. +\setfont\defbf\bxshape{10}{\magstep1} %was 1314 +\setfont\deftt\ttshape{10}{\magstep1} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} + +% Fonts for indices and small examples (9pt). +% We actually use the slanted font rather than the italic, +% because texinfo normally uses the slanted fonts for that. +% Do not make many font distinctions in general in the index, since they +% aren't very useful. +\setfont\ninett\ttshape{9}{1000} +\setfont\indrm\rmshape{9}{1000} +\setfont\indit\slshape{9}{1000} +\let\indsl=\indit +\let\indtt=\ninett +\let\indttsl=\ninett +\let\indsf=\indrm +\let\indbf=\indrm +\setfont\indsc\scshape{10}{900} +\font\indi=cmmi9 +\font\indsy=cmsy9 + +% Fonts for title page: +\setfont\titlerm\rmbshape{12}{\magstep3} +\setfont\titleit\itbshape{10}{\magstep4} +\setfont\titlesl\slbshape{10}{\magstep4} +\setfont\titlett\ttbshape{12}{\magstep3} +\setfont\titlettsl\ttslshape{10}{\magstep4} +\setfont\titlesf\sfbshape{17}{\magstep1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\authorrm{\secrm} + +% Chapter (and unnumbered) fonts (17.28pt). +\setfont\chaprm\rmbshape{12}{\magstep2} +\setfont\chapit\itbshape{10}{\magstep3} +\setfont\chapsl\slbshape{10}{\magstep3} +\setfont\chaptt\ttbshape{12}{\magstep2} +\setfont\chapttsl\ttslshape{10}{\magstep3} +\setfont\chapsf\sfbshape{17}{1000} +\let\chapbf=\chaprm +\setfont\chapsc\scbshape{10}{\magstep3} +\font\chapi=cmmi12 scaled \magstep2 +\font\chapsy=cmsy10 scaled \magstep3 + +% Section fonts (14.4pt). +\setfont\secrm\rmbshape{12}{\magstep1} +\setfont\secit\itbshape{10}{\magstep2} +\setfont\secsl\slbshape{10}{\magstep2} +\setfont\sectt\ttbshape{12}{\magstep1} +\setfont\secttsl\ttslshape{10}{\magstep2} +\setfont\secsf\sfbshape{12}{\magstep1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep2} +\font\seci=cmmi12 scaled \magstep1 +\font\secsy=cmsy10 scaled \magstep2 + +% \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad. +% \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded. +% \setfont\ssecsl\slshape{10}{\magstep1} +% \setfont\ssectt\ttshape{10}{\magstep1} +% \setfont\ssecsf\sfshape{10}{\magstep1} + +%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx. +%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than +%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1. +%\setfont\ssectt\ttshape{10}{1315} +%\setfont\ssecsf\sfshape{10}{1315} + +%\let\ssecbf=\ssecrm + +% Subsection fonts (13.15pt). +\setfont\ssecrm\rmbshape{12}{\magstephalf} +\setfont\ssecit\itbshape{10}{1315} +\setfont\ssecsl\slbshape{10}{1315} +\setfont\ssectt\ttbshape{12}{\magstephalf} +\setfont\ssecttsl\ttslshape{10}{1315} +\setfont\ssecsf\sfbshape{12}{\magstephalf} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{\magstep1} +\font\sseci=cmmi12 scaled \magstephalf +\font\ssecsy=cmsy10 scaled 1315 +% The smallcaps and symbol fonts should actually be scaled \magstep1.5, +% but that is not a standard magnification. + +% In order for the font changes to affect most math symbols and letters, +% we have to define the \textfont of the standard families. Since +% texinfo doesn't allow for producing subscripts and superscripts, we +% don't bother to reset \scriptfont and \scriptscriptfont (which would +% also require loading a lot more fonts). +% +\def\resetmathfonts{% + \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy + \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf + \textfont\ttfam = \tentt \textfont\sffam = \tensf +} + + +% The font-changing commands redefine the meanings of \tenSTYLE, instead +% of just \STYLE. We do this so that font changes will continue to work +% in math mode, where it is the current \fam that is relevant in most +% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam +% \tenbf}, for example. By redefining \tenbf, we obviate the need to +% redefine \bf itself. +\def\textfonts{% + \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl + \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc + \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl + \resetmathfonts} +\def\titlefonts{% + \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl + \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc + \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy + \let\tenttsl=\titlettsl + \resetmathfonts \setleading{25pt}} +\def\titlefont#1{{\titlefonts #1}} +\def\chapfonts{% + \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl + \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc + \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl + \resetmathfonts \setleading{19pt}} +\def\secfonts{% + \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl + \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc + \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl + \resetmathfonts \setleading{16pt}} +\def\subsecfonts{% + \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl + \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc + \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl + \resetmathfonts \setleading{15pt}} +\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf? +\def\indexfonts{% + \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl + \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc + \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl + \resetmathfonts \setleading{12pt}} + +% Set up the default fonts, so we can use them for creating boxes. +% +\textfonts + +% Count depth in font-changes, for error checks +\newcount\fontdepth \fontdepth=0 + +% Fonts for short table of contents. +\setfont\shortcontrm\rmshape{12}{1000} +\setfont\shortcontbf\bxshape{12}{1000} +\setfont\shortcontsl\slshape{12}{1000} + +%% Add scribe-like font environments, plus @l for inline lisp (usually sans +%% serif) and @ii for TeX italic + +% \smartitalic{ARG} outputs arg in italics, followed by an italic correction +% unless the following character is such as not to need one. +\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi} +\def\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx} + +\let\i=\smartitalic +\let\var=\smartitalic +\let\dfn=\smartitalic +\let\emph=\smartitalic +\let\cite=\smartitalic + +\def\b#1{{\bf #1}} +\let\strong=\b + +% We can't just use \exhyphenpenalty, because that only has effect at +% the end of a paragraph. Restore normal hyphenation at the end of the +% group within which \nohyphenation is presumably called. +% +\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} +\def\restorehyphenation{\hyphenchar\font = `- } + +\def\t#1{% + {\tt \rawbackslash \frenchspacing #1}% + \null +} +\let\ttfont=\t +\def\samp #1{`\tclose{#1}'\null} +\setfont\smallrm\rmshape{8}{1000} +\font\smallsy=cmsy9 +\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{% + \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{% + \vbox{\hrule\kern-0.4pt + \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}% + \kern-0.4pt\hrule}% + \kern-.06em\raise0.4pt\hbox{$\rangle$}}}} +% The old definition, with no lozenge: +%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} +\def\ctrl #1{{\tt \rawbackslash \hat}#1} + +\let\file=\samp + +% @code is a modification of @t, +% which makes spaces the same size as normal in the surrounding text. +\def\tclose#1{% + {% + % Change normal interword space to be same as for the current font. + \spaceskip = \fontdimen2\font + % + % Switch to typewriter. + \tt + % + % But `\ ' produces the large typewriter interword space. + \def\ {{\spaceskip = 0pt{} }}% + % + % Turn off hyphenation. + \nohyphenation + % + \rawbackslash + \frenchspacing + #1% + }% + \null +} + +% We *must* turn on hyphenation at `-' and `_' in \code. +% Otherwise, it is too hard to avoid overfull hboxes +% in the Emacs manual, the Library manual, etc. + +% Unfortunately, TeX uses one parameter (\hyphenchar) to control +% both hyphenation at - and hyphenation within words. +% We must therefore turn them both off (\tclose does that) +% and arrange explicitly to hyphenate at a dash. +% -- rms. +{ +\catcode`\-=\active +\catcode`\_=\active +\catcode`\|=\active +\global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex} +% The following is used by \doprintindex to insure that long function names +% wrap around. It is necessary for - and _ to be active before the index is +% read from the file, as \entry parses the arguments long before \code is +% ever called. -- mycroft +% _ is always active; and it shouldn't be \let = to an _ that is a +% subscript character anyway. Then, @cindex @samp{_} (for example) +% fails. --karl +\global\def\indexbreaks{% + \catcode`\-=\active \let-\realdash +} +} + +\def\realdash{-} +\def\codedash{-\discretionary{}{}{}} +\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}} +\def\codex #1{\tclose{#1}\endgroup} + +%\let\exp=\tclose %Was temporary + +% @kbd is like @code, except that if the argument is just one @key command, +% then @kbd has no effect. + +% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), +% `example' (@kbd uses ttsl only inside of @example and friends), +% or `code' (@kbd uses normal tty font always). +\def\kbdinputstyle{\parsearg\kbdinputstylexxx} +\def\kbdinputstylexxx#1{% + \def\arg{#1}% + \ifx\arg\worddistinct + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% + \else\ifx\arg\wordexample + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% + \else\ifx\arg\wordcode + \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% + \fi\fi\fi +} +\def\worddistinct{distinct} +\def\wordexample{example} +\def\wordcode{code} + +% Default is kbdinputdistinct. (Too much of a hassle to call the macro, +% the catcodes are wrong for parsearg to work.) +\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl} + +\def\xkey{\key} +\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% +\ifx\one\xkey\ifx\threex\three \key{#2}% +\else{\tclose{\kbdfont\look}}\fi +\else{\tclose{\kbdfont\look}}\fi} + +% @url. Quotes do not seem necessary, so use \code. +\let\url=\code + +% @uref (abbreviation for `urlref') takes an optional second argument +% specifying the text to display. First (mandatory) arg is the url. +% Perhaps eventually put in a hypertex \special here. +% +\def\uref#1{\urefxxx #1,,\finish} +\def\urefxxx#1,#2,#3\finish{% + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \unhbox0\ (\code{#1})% + \else + \code{#1}% + \fi +} + +% rms does not like the angle brackets --karl, 17may97. +% So now @email is just like @uref. +%\def\email#1{$\langle${\tt #1}$\rangle$} +\let\email=\uref + +% Check if we are currently using a typewriter font. Since all the +% Computer Modern typewriter fonts have zero interword stretch (and +% shrink), and it is reasonable to expect all typewriter fonts to have +% this property, we can check that font parameter. +% +\def\ifmonospace{\ifdim\fontdimen3\font=0pt } + +% Typeset a dimension, e.g., `in' or `pt'. The only reason for the +% argument is to make the input look right: @dmn{pt} instead of +% @dmn{}pt. +% +\def\dmn#1{\thinspace #1} + +\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} + +% @l was never documented to mean ``switch to the Lisp font'', +% and it is not used as such in any manual I can find. We need it for +% Polish suppressed-l. --karl, 22sep96. +%\def\l#1{{\li #1}\null} + +\def\r#1{{\rm #1}} % roman font +% Use of \lowercase was suggested. +\def\sc#1{{\smallcaps#1}} % smallcaps font +\def\ii#1{{\it #1}} % italic font + +% @pounds{} is a sterling sign. +\def\pounds{{\it\$}} + + +\message{page headings,} + +\newskip\titlepagetopglue \titlepagetopglue = 1.5in +\newskip\titlepagebottomglue \titlepagebottomglue = 2pc + +% First the title page. Must do @settitle before @titlepage. +\newif\ifseenauthor +\newif\iffinishedtitlepage + +\def\shorttitlepage{\parsearg\shorttitlepagezzz} +\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% + \endgroup\page\hbox{}\page} + +\def\titlepage{\begingroup \parindent=0pt \textfonts + \let\subtitlerm=\tenrm +% I deinstalled the following change because \cmr12 is undefined. +% This change was not in the ChangeLog anyway. --rms. +% \let\subtitlerm=\cmr12 + \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}% + % + \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}% + % + % Leave some space at the very top of the page. + \vglue\titlepagetopglue + % + % Now you can print the title using @title. + \def\title{\parsearg\titlezzz}% + \def\titlezzz##1{\leftline{\titlefonts\rm ##1} + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt}% + % No rule at page bottom unless we print one at the top with @title. + \finishedtitlepagetrue + % + % Now you can put text using @subtitle. + \def\subtitle{\parsearg\subtitlezzz}% + \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}% + % + % @author should come last, but may come many times. + \def\author{\parsearg\authorzzz}% + \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi + {\authorfont \leftline{##1}}}% + % + % Most title ``pages'' are actually two pages long, with space + % at the top of the second. We don't want the ragged left on the second. + \let\oldpage = \page + \def\page{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + \oldpage + \let\page = \oldpage + \hbox{}}% +% \def\page{\oldpage \hbox{}} +} + +\def\Etitlepage{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + % It is important to do the page break before ending the group, + % because the headline and footline are only empty inside the group. + % If we use the new definition of \page, we always get a blank page + % after the title page, which we certainly don't want. + \oldpage + \endgroup + \HEADINGSon +} + +\def\finishtitlepage{% + \vskip4pt \hrule height 2pt width \hsize + \vskip\titlepagebottomglue + \finishedtitlepagetrue +} + +%%% Set up page headings and footings. + +\let\thispage=\folio + +\newtoks \evenheadline % Token sequence for heading line of even pages +\newtoks \oddheadline % Token sequence for heading line of odd pages +\newtoks \evenfootline % Token sequence for footing line of even pages +\newtoks \oddfootline % Token sequence for footing line of odd pages + +% Now make Tex use those variables +\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline + \else \the\evenheadline \fi}} +\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline + \else \the\evenfootline \fi}\HEADINGShook} +\let\HEADINGShook=\relax + +% Commands to set those variables. +% For example, this is what @headings on does +% @evenheading @thistitle|@thispage|@thischapter +% @oddheading @thischapter|@thispage|@thistitle +% @evenfooting @thisfile|| +% @oddfooting ||@thisfile + +\def\evenheading{\parsearg\evenheadingxxx} +\def\oddheading{\parsearg\oddheadingxxx} +\def\everyheading{\parsearg\everyheadingxxx} + +\def\evenfooting{\parsearg\evenfootingxxx} +\def\oddfooting{\parsearg\oddfootingxxx} +\def\everyfooting{\parsearg\everyfootingxxx} + +{\catcode`\@=0 % + +\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish} +\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{% +\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish} +\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{% +\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}% + +\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish} +\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{% +\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish} +\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{% + \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% + % + % Leave some space for the footline. Hopefully ok to assume + % @evenfooting will not be used by itself. + \global\advance\pageheight by -\baselineskip + \global\advance\vsize by -\baselineskip +} + +\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}} +% +}% unbind the catcode of @. + +% @headings double turns headings on for double-sided printing. +% @headings single turns headings on for single-sided printing. +% @headings off turns them off. +% @headings on same as @headings double, retained for compatibility. +% @headings after turns on double-sided headings after this page. +% @headings doubleafter turns on double-sided headings after this page. +% @headings singleafter turns on single-sided headings after this page. +% By default, they are off at the start of a document, +% and turned `on' after @end titlepage. + +\def\headings #1 {\csname HEADINGS#1\endcsname} + +\def\HEADINGSoff{ +\global\evenheadline={\hfil} \global\evenfootline={\hfil} +\global\oddheadline={\hfil} \global\oddfootline={\hfil}} +\HEADINGSoff +% When we turn headings on, set the page number to 1. +% For double-sided printing, put current file name in lower left corner, +% chapter name on inside top of right hand pages, document +% title on inside top of left hand pages, and page numbers on outside top +% edge of all pages. +\def\HEADINGSdouble{ +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} +\let\contentsalignmacro = \chappager + +% For single-sided printing, chapter title goes across top left of page, +% page number on top right. +\def\HEADINGSsingle{ +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} +\def\HEADINGSon{\HEADINGSdouble} + +\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} +\let\HEADINGSdoubleafter=\HEADINGSafter +\def\HEADINGSdoublex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} + +\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} +\def\HEADINGSsinglex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} + +% Subroutines used in generating headings +% Produces Day Month Year style of output. +\def\today{\number\day\space +\ifcase\month\or +January\or February\or March\or April\or May\or June\or +July\or August\or September\or October\or November\or December\fi +\space\number\year} + +% Use this if you want the Month Day, Year style of output. +%\def\today{\ifcase\month\or +%January\or February\or March\or April\or May\or June\or +%July\or August\or September\or October\or November\or December\fi +%\space\number\day, \number\year} + +% @settitle line... specifies the title of the document, for headings +% It generates no output of its own + +\def\thistitle{No Title} +\def\settitle{\parsearg\settitlezzz} +\def\settitlezzz #1{\gdef\thistitle{#1}} + + +\message{tables,} + +% @tabs -- simple alignment + +% These don't work. For one thing, \+ is defined as outer. +% So these macros cannot even be defined. + +%\def\tabs{\parsearg\tabszzz} +%\def\tabszzz #1{\settabs\+#1\cr} +%\def\tabline{\parsearg\tablinezzz} +%\def\tablinezzz #1{\+#1\cr} +%\def\&{&} + +% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x). + +% default indentation of table text +\newdimen\tableindent \tableindent=.8in +% default indentation of @itemize and @enumerate text +\newdimen\itemindent \itemindent=.3in +% margin between end of table item and start of table text. +\newdimen\itemmargin \itemmargin=.1in + +% used internally for \itemindent minus \itemmargin +\newdimen\itemmax + +% Note @table, @vtable, and @vtable define @item, @itemx, etc., with +% these defs. +% They also define \itemindex +% to index the item name in whatever manner is desired (perhaps none). + +\newif\ifitemxneedsnegativevskip + +\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} + +\def\internalBitem{\smallbreak \parsearg\itemzzz} +\def\internalBitemx{\itemxpar \parsearg\itemzzz} + +\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz} +\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz} + +\def\internalBkitem{\smallbreak \parsearg\kitemzzz} +\def\internalBkitemx{\itemxpar \parsearg\kitemzzz} + +\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}% + \itemzzz {#1}} + +\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}% + \itemzzz {#1}} + +\def\itemzzz #1{\begingroup % + \advance\hsize by -\rightskip + \advance\hsize by -\tableindent + \setbox0=\hbox{\itemfont{#1}}% + \itemindex{#1}% + \nobreak % This prevents a break before @itemx. + % + % Be sure we are not still in the middle of a paragraph. + %{\parskip = 0in + %\par + %}% + % + % If the item text does not fit in the space we have, put it on a line + % by itself, and do not allow a page break either before or after that + % line. We do not start a paragraph here because then if the next + % command is, e.g., @kindex, the whatsit would get put into the + % horizontal list on a line by itself, resulting in extra blank space. + \ifdim \wd0>\itemmax + % + % Make this a paragraph so we get the \parskip glue and wrapping, + % but leave it ragged-right. + \begingroup + \advance\leftskip by-\tableindent + \advance\hsize by\tableindent + \advance\rightskip by0pt plus1fil + \leavevmode\unhbox0\par + \endgroup + % + % We're going to be starting a paragraph, but we don't want the + % \parskip glue -- logically it's part of the @item we just started. + \nobreak \vskip-\parskip + % + % Stop a page break at the \parskip glue coming up. Unfortunately + % we can't prevent a possible page break at the following + % \baselineskip glue. + \nobreak + \endgroup + \itemxneedsnegativevskipfalse + \else + % The item text fits into the space. Start a paragraph, so that the + % following text (if any) will end up on the same line. Since that + % text will be indented by \tableindent, we make the item text be in + % a zero-width box. + \noindent + \rlap{\hskip -\tableindent\box0}\ignorespaces% + \endgroup% + \itemxneedsnegativevskiptrue% + \fi +} + +\def\item{\errmessage{@item while not in a table}} +\def\itemx{\errmessage{@itemx while not in a table}} +\def\kitem{\errmessage{@kitem while not in a table}} +\def\kitemx{\errmessage{@kitemx while not in a table}} +\def\xitem{\errmessage{@xitem while not in a table}} +\def\xitemx{\errmessage{@xitemx while not in a table}} + +%% Contains a kludge to get @end[description] to work +\def\description{\tablez{\dontindex}{1}{}{}{}{}} + +\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex} +{\obeylines\obeyspaces% +\gdef\tablex #1^^M{% +\tabley\dontindex#1 \endtabley}} + +\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex} +{\obeylines\obeyspaces% +\gdef\ftablex #1^^M{% +\tabley\fnitemindex#1 \endtabley +\def\Eftable{\endgraf\afterenvbreak\endgroup}% +\let\Etable=\relax}} + +\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex} +{\obeylines\obeyspaces% +\gdef\vtablex #1^^M{% +\tabley\vritemindex#1 \endtabley +\def\Evtable{\endgraf\afterenvbreak\endgroup}% +\let\Etable=\relax}} + +\def\dontindex #1{} +\def\fnitemindex #1{\doind {fn}{\code{#1}}}% +\def\vritemindex #1{\doind {vr}{\code{#1}}}% + +{\obeyspaces % +\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup% +\tablez{#1}{#2}{#3}{#4}{#5}{#6}}} + +\def\tablez #1#2#3#4#5#6{% +\aboveenvbreak % +\begingroup % +\def\Edescription{\Etable}% Necessary kludge. +\let\itemindex=#1% +\ifnum 0#3>0 \advance \leftskip by #3\mil \fi % +\ifnum 0#4>0 \tableindent=#4\mil \fi % +\ifnum 0#5>0 \advance \rightskip by #5\mil \fi % +\def\itemfont{#2}% +\itemmax=\tableindent % +\advance \itemmax by -\itemmargin % +\advance \leftskip by \tableindent % +\exdentamount=\tableindent +\parindent = 0pt +\parskip = \smallskipamount +\ifdim \parskip=0pt \parskip=2pt \fi% +\def\Etable{\endgraf\afterenvbreak\endgroup}% +\let\item = \internalBitem % +\let\itemx = \internalBitemx % +\let\kitem = \internalBkitem % +\let\kitemx = \internalBkitemx % +\let\xitem = \internalBxitem % +\let\xitemx = \internalBxitemx % +} + +% This is the counter used by @enumerate, which is really @itemize + +\newcount \itemno + +\def\itemize{\parsearg\itemizezzz} + +\def\itemizezzz #1{% + \begingroup % ended by the @end itemsize + \itemizey {#1}{\Eitemize} +} + +\def\itemizey #1#2{% +\aboveenvbreak % +\itemmax=\itemindent % +\advance \itemmax by -\itemmargin % +\advance \leftskip by \itemindent % +\exdentamount=\itemindent +\parindent = 0pt % +\parskip = \smallskipamount % +\ifdim \parskip=0pt \parskip=2pt \fi% +\def#2{\endgraf\afterenvbreak\endgroup}% +\def\itemcontents{#1}% +\let\item=\itemizeitem} + +% Set sfcode to normal for the chars that usually have another value. +% These are `.?!:;,' +\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000 + \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 } + +% \splitoff TOKENS\endmark defines \first to be the first token in +% TOKENS, and \rest to be the remainder. +% +\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% + +% Allow an optional argument of an uppercase letter, lowercase letter, +% or number, to specify the first label in the enumerated list. No +% argument is the same as `1'. +% +\def\enumerate{\parsearg\enumeratezzz} +\def\enumeratezzz #1{\enumeratey #1 \endenumeratey} +\def\enumeratey #1 #2\endenumeratey{% + \begingroup % ended by the @end enumerate + % + % If we were given no argument, pretend we were given `1'. + \def\thearg{#1}% + \ifx\thearg\empty \def\thearg{1}\fi + % + % Detect if the argument is a single token. If so, it might be a + % letter. Otherwise, the only valid thing it can be is a number. + % (We will always have one token, because of the test we just made. + % This is a good thing, since \splitoff doesn't work given nothing at + % all -- the first parameter is undelimited.) + \expandafter\splitoff\thearg\endmark + \ifx\rest\empty + % Only one token in the argument. It could still be anything. + % A ``lowercase letter'' is one whose \lccode is nonzero. + % An ``uppercase letter'' is one whose \lccode is both nonzero, and + % not equal to itself. + % Otherwise, we assume it's a number. + % + % We need the \relax at the end of the \ifnum lines to stop TeX from + % continuing to look for a <number>. + % + \ifnum\lccode\expandafter`\thearg=0\relax + \numericenumerate % a number (we hope) + \else + % It's a letter. + \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax + \lowercaseenumerate % lowercase letter + \else + \uppercaseenumerate % uppercase letter + \fi + \fi + \else + % Multiple tokens in the argument. We hope it's a number. + \numericenumerate + \fi +} + +% An @enumerate whose labels are integers. The starting integer is +% given in \thearg. +% +\def\numericenumerate{% + \itemno = \thearg + \startenumeration{\the\itemno}% +} + +% The starting (lowercase) letter is in \thearg. +\def\lowercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more lowercase letters in @enumerate; get a bigger + alphabet}% + \fi + \char\lccode\itemno + }% +} + +% The starting (uppercase) letter is in \thearg. +\def\uppercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more uppercase letters in @enumerate; get a bigger + alphabet} + \fi + \char\uccode\itemno + }% +} + +% Call itemizey, adding a period to the first argument and supplying the +% common last two arguments. Also subtract one from the initial value in +% \itemno, since @item increments \itemno. +% +\def\startenumeration#1{% + \advance\itemno by -1 + \itemizey{#1.}\Eenumerate\flushcr +} + +% @alphaenumerate and @capsenumerate are abbreviations for giving an arg +% to @enumerate. +% +\def\alphaenumerate{\enumerate{a}} +\def\capsenumerate{\enumerate{A}} +\def\Ealphaenumerate{\Eenumerate} +\def\Ecapsenumerate{\Eenumerate} + +% Definition of @item while inside @itemize. + +\def\itemizeitem{% +\advance\itemno by 1 +{\let\par=\endgraf \smallbreak}% +\ifhmode \errmessage{In hmode at itemizeitem}\fi +{\parskip=0in \hskip 0pt +\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}% +\vadjust{\penalty 1200}}% +\flushcr} + +% @multitable macros +% Amy Hendrickson, 8/18/94, 3/6/96 +% +% @multitable ... @end multitable will make as many columns as desired. +% Contents of each column will wrap at width given in preamble. Width +% can be specified either with sample text given in a template line, +% or in percent of \hsize, the current width of text on page. + +% Table can continue over pages but will only break between lines. + +% To make preamble: +% +% Either define widths of columns in terms of percent of \hsize: +% @multitable @columnfractions .25 .3 .45 +% @item ... +% +% Numbers following @columnfractions are the percent of the total +% current hsize to be used for each column. You may use as many +% columns as desired. + + +% Or use a template: +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item ... +% using the widest term desired in each column. +% +% For those who want to use more than one line's worth of words in +% the preamble, break the line within one argument and it +% will parse correctly, i.e., +% +% @multitable {Column 1 template} {Column 2 template} {Column 3 +% template} +% Not: +% @multitable {Column 1 template} {Column 2 template} +% {Column 3 template} + +% Each new table line starts with @item, each subsequent new column +% starts with @tab. Empty columns may be produced by supplying @tab's +% with nothing between them for as many times as empty columns are needed, +% ie, @tab@tab@tab will produce two empty columns. + +% @item, @tab, @multitable or @end multitable do not need to be on their +% own lines, but it will not hurt if they are. + +% Sample multitable: + +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item first col stuff @tab second col stuff @tab third col +% @item +% first col stuff +% @tab +% second col stuff +% @tab +% third col +% @item first col stuff @tab second col stuff +% @tab Many paragraphs of text may be used in any column. +% +% They will wrap at the width determined by the template. +% @item@tab@tab This will be in third column. +% @end multitable + +% Default dimensions may be reset by user. +% @multitableparskip is vertical space between paragraphs in table. +% @multitableparindent is paragraph indent in table. +% @multitablecolmargin is horizontal space to be left between columns. +% @multitablelinespace is space to leave between table items, baseline +% to baseline. +% 0pt means it depends on current normal line spacing. + +%%%% +% Dimensions + +\newskip\multitableparskip +\newskip\multitableparindent +\newdimen\multitablecolspace +\newskip\multitablelinespace +\multitableparskip=0pt +\multitableparindent=6pt +\multitablecolspace=12pt +\multitablelinespace=0pt + +%%%% +% Macros used to set up halign preamble: +\let\endsetuptable\relax +\def\xendsetuptable{\endsetuptable} +\let\columnfractions\relax +\def\xcolumnfractions{\columnfractions} +\newif\ifsetpercent + +%% 2/1/96, to allow fractions to be given with more than one digit. +\def\pickupwholefraction#1 {\global\advance\colcount by1 % +\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}% +\setuptable} + +\newcount\colcount +\def\setuptable#1{\def\firstarg{#1}% +\ifx\firstarg\xendsetuptable\let\go\relax% +\else + \ifx\firstarg\xcolumnfractions\global\setpercenttrue% + \else + \ifsetpercent + \let\go\pickupwholefraction % In this case arg of setuptable + % is the decimal point before the + % number given in percent of hsize. + % We don't need this so we don't use it. + \else + \global\advance\colcount by1 + \setbox0=\hbox{#1 }% Add a normal word space as a separator; + % typically that is always in the input, anyway. + \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% + \fi% + \fi% +\ifx\go\pickupwholefraction\else\let\go\setuptable\fi% +\fi\go} + +%%%% +% multitable syntax +\def\tab{&\hskip1sp\relax} % 2/2/96 + % tiny skip here makes sure this column space is + % maintained, even if it is never used. + + +%%%% +% @multitable ... @end multitable definitions: + +\def\multitable{\parsearg\dotable} + +\def\dotable#1{\bgroup +\let\item\cr +\tolerance=9500 +\hbadness=9500 +\setmultitablespacing +\parskip=\multitableparskip +\parindent=\multitableparindent +\overfullrule=0pt +\global\colcount=0\relax% +\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}% + % To parse everything between @multitable and @item : +\setuptable#1 \endsetuptable + % Need to reset this to 0 after \setuptable. +\global\colcount=0\relax% + % + % This preamble sets up a generic column definition, which will + % be used as many times as user calls for columns. + % \vtop will set a single line and will also let text wrap and + % continue for many paragraphs if desired. +\halign\bgroup&\global\advance\colcount by 1\relax% +\multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname + % In order to keep entries from bumping into each other + % we will add a \leftskip of \multitablecolspace to all columns after + % the first one. + % If a template has been used, we will add \multitablecolspace + % to the width of each template entry. + % If user has set preamble in terms of percent of \hsize + % we will use that dimension as the width of the column, and + % the \leftskip will keep entries from bumping into each other. + % Table will start at left margin and final column will justify at + % right margin. +\ifnum\colcount=1 +\else + \ifsetpercent + \else + % If user has <not> set preamble in terms of percent of \hsize + % we will advance \hsize by \multitablecolspace + \advance\hsize by \multitablecolspace + \fi + % In either case we will make \leftskip=\multitablecolspace: +\leftskip=\multitablecolspace +\fi + % Ignoring space at the beginning and end avoids an occasional spurious + % blank line, when TeX decides to break the line at the space before the + % box from the multistrut, so the strut ends up on a line by itself. + % For example: + % @multitable @columnfractions .11 .89 + % @item @code{#} + % @tab Legal holiday which is valid in major parts of the whole country. + % Is automatically provided with highlighting sequences respectively marking + % characters. + \noindent\ignorespaces##\unskip\multistrut}\cr + % \everycr will reset column counter, \colcount, at the end of + % each line. Every column entry will cause \colcount to advance by one. + % The table preamble + % looks at the current \colcount to find the correct column width. +\global\everycr{\noalign{% +% \filbreak%% keeps underfull box messages off when table breaks over pages. +% Maybe so, but it also creates really weird page breaks when the table +% breaks over pages Wouldn't \vfil be better? Wait until the problem +% manifests itself, so it can be fixed for real --karl. +\global\colcount=0\relax}} +} + +\def\setmultitablespacing{% test to see if user has set \multitablelinespace. +% If so, do nothing. If not, give it an appropriate dimension based on +% current baselineskip. +\ifdim\multitablelinespace=0pt +%% strut to put in table in case some entry doesn't have descenders, +%% to keep lines equally spaced +\let\multistrut = \strut +%% Test to see if parskip is larger than space between lines of +%% table. If not, do nothing. +%% If so, set to same dimension as multitablelinespace. +\else +\gdef\multistrut{\vrule height\multitablelinespace depth\dp0 +width0pt\relax} \fi +\ifdim\multitableparskip>\multitablelinespace +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi% +\ifdim\multitableparskip=0pt +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi} + + +\message{indexing,} +% Index generation facilities + +% Define \newwrite to be identical to plain tex's \newwrite +% except not \outer, so it can be used within \newindex. +{\catcode`\@=11 +\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}} + +% \newindex {foo} defines an index named foo. +% It automatically defines \fooindex such that +% \fooindex ...rest of line... puts an entry in the index foo. +% It also defines \fooindfile to be the number of the output channel for +% the file that accumulates this index. The file's extension is foo. +% The name of an index should be no more than 2 characters long +% for the sake of vms. + +\def\newindex #1{ +\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file +\openout \csname#1indfile\endcsname \jobname.#1 % Open the file +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\noexpand\doindex {#1}} +} + +% @defindex foo == \newindex{foo} + +\def\defindex{\parsearg\newindex} + +% Define @defcodeindex, like @defindex except put all entries in @code. + +\def\newcodeindex #1{ +\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file +\openout \csname#1indfile\endcsname \jobname.#1 % Open the file +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\noexpand\docodeindex {#1}} +} + +\def\defcodeindex{\parsearg\newcodeindex} + +% @synindex foo bar makes index foo feed into index bar. +% Do this instead of @defindex foo if you don't want it as a separate index. +\def\synindex #1 #2 {% +\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname +\expandafter\let\csname#1indfile\endcsname=\synindexfoo +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\noexpand\doindex {#2}}% +} + +% @syncodeindex foo bar similar, but put all entries made for index foo +% inside @code. +\def\syncodeindex #1 #2 {% +\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname +\expandafter\let\csname#1indfile\endcsname=\synindexfoo +\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex +\noexpand\docodeindex {#2}}% +} + +% Define \doindex, the driver for all \fooindex macros. +% Argument #1 is generated by the calling \fooindex macro, +% and it is "foo", the name of the index. + +% \doindex just uses \parsearg; it calls \doind for the actual work. +% This is because \doind is more useful to call from other macros. + +% There is also \dosubind {index}{topic}{subtopic} +% which makes an entry in a two-level index such as the operation index. + +\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} +\def\singleindexer #1{\doind{\indexname}{#1}} + +% like the previous two, but they put @code around the argument. +\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} +\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} + +\def\indexdummies{% +% Take care of the plain tex accent commands. +\def\"{\realbackslash "}% +\def\`{\realbackslash `}% +\def\'{\realbackslash '}% +\def\^{\realbackslash ^}% +\def\~{\realbackslash ~}% +\def\={\realbackslash =}% +\def\b{\realbackslash b}% +\def\c{\realbackslash c}% +\def\d{\realbackslash d}% +\def\u{\realbackslash u}% +\def\v{\realbackslash v}% +\def\H{\realbackslash H}% +% Take care of the plain tex special European modified letters. +\def\oe{\realbackslash oe}% +\def\ae{\realbackslash ae}% +\def\aa{\realbackslash aa}% +\def\OE{\realbackslash OE}% +\def\AE{\realbackslash AE}% +\def\AA{\realbackslash AA}% +\def\o{\realbackslash o}% +\def\O{\realbackslash O}% +\def\l{\realbackslash l}% +\def\L{\realbackslash L}% +\def\ss{\realbackslash ss}% +% Take care of texinfo commands likely to appear in an index entry. +% (Must be a way to avoid doing expansion at all, and thus not have to +% laboriously list every single command here.) +\def\@{@}% will be @@ when we switch to @ as escape char. +%\let\{ = \lbracecmd +%\let\} = \rbracecmd +\def\_{{\realbackslash _}}% +\def\w{\realbackslash w }% +\def\bf{\realbackslash bf }% +%\def\rm{\realbackslash rm }% +\def\sl{\realbackslash sl }% +\def\sf{\realbackslash sf}% +\def\tt{\realbackslash tt}% +\def\gtr{\realbackslash gtr}% +\def\less{\realbackslash less}% +\def\hat{\realbackslash hat}% +%\def\char{\realbackslash char}% +\def\TeX{\realbackslash TeX}% +\def\dots{\realbackslash dots }% +\def\result{\realbackslash result}% +\def\equiv{\realbackslash equiv}% +\def\expansion{\realbackslash expansion}% +\def\print{\realbackslash print}% +\def\error{\realbackslash error}% +\def\point{\realbackslash point}% +\def\copyright{\realbackslash copyright}% +\def\tclose##1{\realbackslash tclose {##1}}% +\def\code##1{\realbackslash code {##1}}% +\def\dotless##1{\realbackslash dotless {##1}}% +\def\samp##1{\realbackslash samp {##1}}% +\def\,##1{\realbackslash ,{##1}}% +\def\t##1{\realbackslash t {##1}}% +\def\r##1{\realbackslash r {##1}}% +\def\i##1{\realbackslash i {##1}}% +\def\b##1{\realbackslash b {##1}}% +\def\sc##1{\realbackslash sc {##1}}% +\def\cite##1{\realbackslash cite {##1}}% +\def\key##1{\realbackslash key {##1}}% +\def\file##1{\realbackslash file {##1}}% +\def\var##1{\realbackslash var {##1}}% +\def\kbd##1{\realbackslash kbd {##1}}% +\def\dfn##1{\realbackslash dfn {##1}}% +\def\emph##1{\realbackslash emph {##1}}% +\def\value##1{\realbackslash value {##1}}% +\unsepspaces +} + +% If an index command is used in an @example environment, any spaces +% therein should become regular spaces in the raw index file, not the +% expansion of \tie (\\leavevmode \penalty \@M \ ). +{\obeyspaces + \gdef\unsepspaces{\obeyspaces\let =\space}} + +% \indexnofonts no-ops all font-change commands. +% This is used when outputting the strings to sort the index by. +\def\indexdummyfont#1{#1} +\def\indexdummytex{TeX} +\def\indexdummydots{...} + +\def\indexnofonts{% +% Just ignore accents. +\let\,=\indexdummyfont +\let\"=\indexdummyfont +\let\`=\indexdummyfont +\let\'=\indexdummyfont +\let\^=\indexdummyfont +\let\~=\indexdummyfont +\let\==\indexdummyfont +\let\b=\indexdummyfont +\let\c=\indexdummyfont +\let\d=\indexdummyfont +\let\u=\indexdummyfont +\let\v=\indexdummyfont +\let\H=\indexdummyfont +\let\dotless=\indexdummyfont +% Take care of the plain tex special European modified letters. +\def\oe{oe}% +\def\ae{ae}% +\def\aa{aa}% +\def\OE{OE}% +\def\AE{AE}% +\def\AA{AA}% +\def\o{o}% +\def\O{O}% +\def\l{l}% +\def\L{L}% +\def\ss{ss}% +\let\w=\indexdummyfont +\let\t=\indexdummyfont +\let\r=\indexdummyfont +\let\i=\indexdummyfont +\let\b=\indexdummyfont +\let\emph=\indexdummyfont +\let\strong=\indexdummyfont +\let\cite=\indexdummyfont +\let\sc=\indexdummyfont +%Don't no-op \tt, since it isn't a user-level command +% and is used in the definitions of the active chars like <, >, |... +%\let\tt=\indexdummyfont +\let\tclose=\indexdummyfont +\let\code=\indexdummyfont +\let\file=\indexdummyfont +\let\samp=\indexdummyfont +\let\kbd=\indexdummyfont +\let\key=\indexdummyfont +\let\var=\indexdummyfont +\let\TeX=\indexdummytex +\let\dots=\indexdummydots +\def\@{@}% +} + +% To define \realbackslash, we must make \ not be an escape. +% We must first make another character (@) an escape +% so we do not become unable to do a definition. + +{\catcode`\@=0 \catcode`\\=\other +@gdef@realbackslash{\}} + +\let\indexbackslash=0 %overridden during \printindex. + +\let\SETmarginindex=\relax %initialize! +% workhorse for all \fooindexes +% #1 is name of index, #2 is stuff to put there +\def\doind #1#2{% + % Put the index entry in the margin if desired. + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% + \fi + {% + \count255=\lastpenalty + {% + \indexdummies % Must do this here, since \bf, etc expand at this stage + \escapechar=`\\ + {% + \let\folio=0% We will expand all macros now EXCEPT \folio. + \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now + % so it will be output as is; and it will print as backslash. + % + % First process the index-string with all font commands turned off + % to get the string to sort by. + {\indexnofonts \xdef\indexsorttmp{#2}}% + % + % Now produce the complete index entry, with both the sort key and the + % original text, including any font commands. + \toks0 = {#2}% + \edef\temp{% + \write\csname#1indfile\endcsname{% + \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% + }% + \temp + }% + }% + \penalty\count255 + }% +} + +\def\dosubind #1#2#3{% +{\count10=\lastpenalty % +{\indexdummies % Must do this here, since \bf, etc expand at this stage +\escapechar=`\\% +{\let\folio=0% +\def\rawbackslashxx{\indexbackslash}% +% +% Now process the index-string once, with all font commands turned off, +% to get the string to sort the index by. +{\indexnofonts +\xdef\temp1{#2 #3}% +}% +% Now produce the complete index entry. We process the index-string again, +% this time with font commands expanded, to get what to print in the index. +\edef\temp{% +\write \csname#1indfile\endcsname{% +\realbackslash entry {\temp1}{\folio}{#2}{#3}}}% +\temp }% +}\penalty\count10}} + +% The index entry written in the file actually looks like +% \entry {sortstring}{page}{topic} +% or +% \entry {sortstring}{page}{topic}{subtopic} +% The texindex program reads in these files and writes files +% containing these kinds of lines: +% \initial {c} +% before the first topic whose initial is c +% \entry {topic}{pagelist} +% for a topic that is used without subtopics +% \primary {topic} +% for the beginning of a topic that is used with subtopics +% \secondary {subtopic}{pagelist} +% for each subtopic. + +% Define the user-accessible indexing commands +% @findex, @vindex, @kindex, @cindex. + +\def\findex {\fnindex} +\def\kindex {\kyindex} +\def\cindex {\cpindex} +\def\vindex {\vrindex} +\def\tindex {\tpindex} +\def\pindex {\pgindex} + +\def\cindexsub {\begingroup\obeylines\cindexsub} +{\obeylines % +\gdef\cindexsub "#1" #2^^M{\endgroup % +\dosubind{cp}{#2}{#1}}} + +% Define the macros used in formatting output of the sorted index material. + +% @printindex causes a particular index (the ??s file) to get printed. +% It does not print any chapter heading (usually an @unnumbered). +% +\def\printindex{\parsearg\doprintindex} +\def\doprintindex#1{\begingroup + \dobreak \chapheadingskip{10000}% + % + \indexfonts \rm + \tolerance = 9500 + \indexbreaks + % + % See if the index file exists and is nonempty. + \openin 1 \jobname.#1s + \ifeof 1 + % \enddoublecolumns gets confused if there is no text in the index, + % and it loses the chapter title and the aux file entries for the + % index. The easiest way to prevent this problem is to make sure + % there is some text. + (Index is nonexistent) + \else + % + % If the index file exists but is empty, then \openin leaves \ifeof + % false. We have to make TeX try to read something from the file, so + % it can discover if there is anything in it. + \read 1 to \temp + \ifeof 1 + (Index is empty) + \else + % Index files are almost Texinfo source, but we use \ as the escape + % character. It would be better to use @, but that's too big a change + % to make right now. + \def\indexbackslash{\rawbackslashxx}% + \catcode`\\ = 0 + \catcode`\@ = 11 + \escapechar = `\\ + \begindoublecolumns + \input \jobname.#1s + \enddoublecolumns + \fi + \fi + \closein 1 +\endgroup} + +% These macros are used by the sorted index file itself. +% Change them to control the appearance of the index. + +% Same as \bigskipamount except no shrink. +% \balancecolumns gets confused if there is any shrink. +\newskip\initialskipamount \initialskipamount 12pt plus4pt + +\def\initial #1{% +{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt +\ifdim\lastskip<\initialskipamount +\removelastskip \penalty-200 \vskip \initialskipamount\fi +\line{\secbf#1\hfill}\kern 2pt\penalty10000}} + +% This typesets a paragraph consisting of #1, dot leaders, and then #2 +% flush to the right margin. It is used for index and table of contents +% entries. The paragraph is indented by \leftskip. +% +\def\entry #1#2{\begingroup + % + % Start a new paragraph if necessary, so our assignments below can't + % affect previous text. + \par + % + % Do not fill out the last line with white space. + \parfillskip = 0in + % + % No extra space above this paragraph. + \parskip = 0in + % + % Do not prefer a separate line ending with a hyphen to fewer lines. + \finalhyphendemerits = 0 + % + % \hangindent is only relevant when the entry text and page number + % don't both fit on one line. In that case, bob suggests starting the + % dots pretty far over on the line. Unfortunately, a large + % indentation looks wrong when the entry text itself is broken across + % lines. So we use a small indentation and put up with long leaders. + % + % \hangafter is reset to 1 (which is the value we want) at the start + % of each paragraph, so we need not do anything with that. + \hangindent=2em + % + % When the entry text needs to be broken, just fill out the first line + % with blank space. + \rightskip = 0pt plus1fil + % + % Start a ``paragraph'' for the index entry so the line breaking + % parameters we've set above will have an effect. + \noindent + % + % Insert the text of the index entry. TeX will do line-breaking on it. + #1% + % The following is kludged to not output a line of dots in the index if + % there are no page numbers. The next person who breaks this will be + % cursed by a Unix daemon. + \def\tempa{{\rm }}% + \def\tempb{#2}% + \edef\tempc{\tempa}% + \edef\tempd{\tempb}% + \ifx\tempc\tempd\ \else% + % + % If we must, put the page number on a line of its own, and fill out + % this line with blank space. (The \hfil is overwhelmed with the + % fill leaders glue in \indexdotfill if the page number does fit.) + \hfil\penalty50 + \null\nobreak\indexdotfill % Have leaders before the page number. + % + % The `\ ' here is removed by the implicit \unskip that TeX does as + % part of (the primitive) \par. Without it, a spurious underfull + % \hbox ensues. + \ #2% The page number ends the paragraph. + \fi% + \par +\endgroup} + +% Like \dotfill except takes at least 1 em. +\def\indexdotfill{\cleaders + \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} + +\def\primary #1{\line{#1\hfil}} + +\newskip\secondaryindent \secondaryindent=0.5cm + +\def\secondary #1#2{ +{\parfillskip=0in \parskip=0in +\hangindent =1in \hangafter=1 +\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par +}} + +% Define two-column mode, which we use to typeset indexes. +% Adapted from the TeXbook, page 416, which is to say, +% the manmac.tex format used to print the TeXbook itself. +\catcode`\@=11 + +\newbox\partialpage +\newdimen\doublecolumnhsize + +\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns + % Grab any single-column material above us. + \output = {\global\setbox\partialpage = \vbox{% + % + % Here is a possibility not foreseen in manmac: if we accumulate a + % whole lot of material, we might end up calling this \output + % routine twice in a row (see the doublecol-lose test, which is + % essentially a couple of indexes with @setchapternewpage off). In + % that case, we must prevent the second \partialpage from + % simply overwriting the first, causing us to lose the page. + % This will preserve it until a real output routine can ship it + % out. Generally, \partialpage will be empty when this runs and + % this will be a no-op. + \unvbox\partialpage + % + % Unvbox the main output page. + \unvbox255 + \kern-\topskip \kern\baselineskip + }}% + \eject + % + % Use the double-column output routine for subsequent pages. + \output = {\doublecolumnout}% + % + % Change the page size parameters. We could do this once outside this + % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 + % format, but then we repeat the same computation. Repeating a couple + % of assignments once per index is clearly meaningless for the + % execution time, so we may as well do it in one place. + % + % First we halve the line length, less a little for the gutter between + % the columns. We compute the gutter based on the line length, so it + % changes automatically with the paper format. The magic constant + % below is chosen so that the gutter has the same value (well, +-<1pt) + % as it did when we hard-coded it. + % + % We put the result in a separate register, \doublecolumhsize, so we + % can restore it in \pagesofar, after \hsize itself has (potentially) + % been clobbered. + % + \doublecolumnhsize = \hsize + \advance\doublecolumnhsize by -.04154\hsize + \divide\doublecolumnhsize by 2 + \hsize = \doublecolumnhsize + % + % Double the \vsize as well. (We don't need a separate register here, + % since nobody clobbers \vsize.) + \vsize = 2\vsize +} +\def\doublecolumnout{% + \splittopskip=\topskip \splitmaxdepth=\maxdepth + % Get the available space for the double columns -- the normal + % (undoubled) page height minus any material left over from the + % previous page. + \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage + % box0 will be the left-hand column, box2 the right. + \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ + \onepageout\pagesofar + \unvbox255 + \penalty\outputpenalty +} +\def\pagesofar{% + % Re-output the contents of the output page -- any previous material, + % followed by the two boxes we just split. + \unvbox\partialpage + \hsize = \doublecolumnhsize + \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% +} +\def\enddoublecolumns{% + \output = {\balancecolumns}\eject % split what we have + \endgroup % started in \begindoublecolumns + % + % Back to normal single-column typesetting, but take account of the + % fact that we just accumulated some stuff on the output page. + \pagegoal = \vsize +} +\def\balancecolumns{% + % Called at the end of the double column material. + \setbox0 = \vbox{\unvbox255}% + \dimen@ = \ht0 + \advance\dimen@ by \topskip + \advance\dimen@ by-\baselineskip + \divide\dimen@ by 2 + \splittopskip = \topskip + % Loop until we get a decent breakpoint. + {\vbadness=10000 \loop + \global\setbox3=\copy0 + \global\setbox1=\vsplit3 to\dimen@ + \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt + \repeat}% + \setbox0=\vbox to\dimen@{\unvbox1}% + \setbox2=\vbox to\dimen@{\unvbox3}% + \pagesofar +} +\catcode`\@ = \other + + +\message{sectioning,} +% Define chapters, sections, etc. + +\newcount\chapno +\newcount\secno \secno=0 +\newcount\subsecno \subsecno=0 +\newcount\subsubsecno \subsubsecno=0 + +% This counter is funny since it counts through charcodes of letters A, B, ... +\newcount\appendixno \appendixno = `\@ +\def\appendixletter{\char\the\appendixno} + +\newwrite\contentsfile +% This is called from \setfilename. +\def\opencontents{\openout\contentsfile = \jobname.toc } + +% Each @chapter defines this as the name of the chapter. +% page headings and footings can use it. @section does likewise + +\def\thischapter{} \def\thissection{} +\def\seccheck#1{\ifnum \pageno<0 + \errmessage{@#1 not allowed after generating table of contents}% +\fi} + +\def\chapternofonts{% + \let\rawbackslash=\relax + \let\frenchspacing=\relax + \def\result{\realbackslash result}% + \def\equiv{\realbackslash equiv}% + \def\expansion{\realbackslash expansion}% + \def\print{\realbackslash print}% + \def\TeX{\realbackslash TeX}% + \def\dots{\realbackslash dots}% + \def\result{\realbackslash result}% + \def\equiv{\realbackslash equiv}% + \def\expansion{\realbackslash expansion}% + \def\print{\realbackslash print}% + \def\error{\realbackslash error}% + \def\point{\realbackslash point}% + \def\copyright{\realbackslash copyright}% + \def\tt{\realbackslash tt}% + \def\bf{\realbackslash bf}% + \def\w{\realbackslash w}% + \def\less{\realbackslash less}% + \def\gtr{\realbackslash gtr}% + \def\hat{\realbackslash hat}% + \def\char{\realbackslash char}% + \def\tclose##1{\realbackslash tclose{##1}}% + \def\code##1{\realbackslash code{##1}}% + \def\samp##1{\realbackslash samp{##1}}% + \def\r##1{\realbackslash r{##1}}% + \def\b##1{\realbackslash b{##1}}% + \def\key##1{\realbackslash key{##1}}% + \def\file##1{\realbackslash file{##1}}% + \def\kbd##1{\realbackslash kbd{##1}}% + % These are redefined because @smartitalic wouldn't work inside xdef. + \def\i##1{\realbackslash i{##1}}% + \def\cite##1{\realbackslash cite{##1}}% + \def\var##1{\realbackslash var{##1}}% + \def\emph##1{\realbackslash emph{##1}}% + \def\dfn##1{\realbackslash dfn{##1}}% +} + +\newcount\absseclevel % used to calculate proper heading level +\newcount\secbase\secbase=0 % @raise/lowersections modify this count + +% @raisesections: treat @section as chapter, @subsection as section, etc. +\def\raisesections{\global\advance\secbase by -1} +\let\up=\raisesections % original BFox name + +% @lowersections: treat @chapter as section, @section as subsection, etc. +\def\lowersections{\global\advance\secbase by 1} +\let\down=\lowersections % original BFox name + +% Choose a numbered-heading macro +% #1 is heading level if unmodified by @raisesections or @lowersections +% #2 is text for heading +\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 +\ifcase\absseclevel + \chapterzzz{#2} +\or + \seczzz{#2} +\or + \numberedsubseczzz{#2} +\or + \numberedsubsubseczzz{#2} +\else + \ifnum \absseclevel<0 + \chapterzzz{#2} + \else + \numberedsubsubseczzz{#2} + \fi +\fi +} + +% like \numhead, but chooses appendix heading levels +\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 +\ifcase\absseclevel + \appendixzzz{#2} +\or + \appendixsectionzzz{#2} +\or + \appendixsubseczzz{#2} +\or + \appendixsubsubseczzz{#2} +\else + \ifnum \absseclevel<0 + \appendixzzz{#2} + \else + \appendixsubsubseczzz{#2} + \fi +\fi +} + +% like \numhead, but chooses numberless heading levels +\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 +\ifcase\absseclevel + \unnumberedzzz{#2} +\or + \unnumberedseczzz{#2} +\or + \unnumberedsubseczzz{#2} +\or + \unnumberedsubsubseczzz{#2} +\else + \ifnum \absseclevel<0 + \unnumberedzzz{#2} + \else + \unnumberedsubsubseczzz{#2} + \fi +\fi +} + + +\def\thischaptername{No Chapter Title} +\outer\def\chapter{\parsearg\chapteryyy} +\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz +\def\chapterzzz #1{\seccheck{chapter}% +\secno=0 \subsecno=0 \subsubsecno=0 +\global\advance \chapno by 1 \message{\putwordChapter \the\chapno}% +\chapmacro {#1}{\the\chapno}% +\gdef\thissection{#1}% +\gdef\thischaptername{#1}% +% We don't substitute the actual chapter name into \thischapter +% because we don't want its macros evaluated now. +\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash chapentry{\the\toks0}{\the\chapno}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\donoderef % +\global\let\section = \numberedsec +\global\let\subsection = \numberedsubsec +\global\let\subsubsection = \numberedsubsubsec +}} + +\outer\def\appendix{\parsearg\appendixyyy} +\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz +\def\appendixzzz #1{\seccheck{appendix}% +\secno=0 \subsecno=0 \subsubsecno=0 +\global\advance \appendixno by 1 \message{Appendix \appendixletter}% +\chapmacro {#1}{\putwordAppendix{} \appendixletter}% +\gdef\thissection{#1}% +\gdef\thischaptername{#1}% +\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash chapentry{\the\toks0}% + {\putwordAppendix{} \appendixletter}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\appendixnoderef % +\global\let\section = \appendixsec +\global\let\subsection = \appendixsubsec +\global\let\subsubsection = \appendixsubsubsec +}} + +% @centerchap is like @unnumbered, but the heading is centered. +\outer\def\centerchap{\parsearg\centerchapyyy} +\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}} + +\outer\def\top{\parsearg\unnumberedyyy} +\outer\def\unnumbered{\parsearg\unnumberedyyy} +\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz +\def\unnumberedzzz #1{\seccheck{unnumbered}% +\secno=0 \subsecno=0 \subsubsecno=0 +% +% This used to be simply \message{#1}, but TeX fully expands the +% argument to \message. Therefore, if #1 contained @-commands, TeX +% expanded them. For example, in `@unnumbered The @cite{Book}', TeX +% expanded @cite (which turns out to cause errors because \cite is meant +% to be executed, not expanded). +% +% Anyway, we don't want the fully-expanded definition of @cite to appear +% as a result of the \message, we just want `@cite' itself. We use +% \the<toks register> to achieve this: TeX expands \the<toks> only once, +% simply yielding the contents of the <toks register>. +\toks0 = {#1}\message{(\the\toks0)}% +% +\unnumbchapmacro {#1}% +\gdef\thischapter{#1}\gdef\thissection{#1}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash unnumbchapentry{\the\toks0}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\unnumbnoderef % +\global\let\section = \unnumberedsec +\global\let\subsection = \unnumberedsubsec +\global\let\subsubsection = \unnumberedsubsubsec +}} + +\outer\def\numberedsec{\parsearg\secyyy} +\def\secyyy #1{\numhead1{#1}} % normally calls seczzz +\def\seczzz #1{\seccheck{section}% +\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % +\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash secentry % +{\the\toks0}{\the\chapno}{\the\secno}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\donoderef % +\penalty 10000 % +}} + +\outer\def\appendixsection{\parsearg\appendixsecyyy} +\outer\def\appendixsec{\parsearg\appendixsecyyy} +\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz +\def\appendixsectionzzz #1{\seccheck{appendixsection}% +\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % +\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash secentry % +{\the\toks0}{\appendixletter}{\the\secno}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\appendixnoderef % +\penalty 10000 % +}} + +\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy} +\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz +\def\unnumberedseczzz #1{\seccheck{unnumberedsec}% +\plainsecheading {#1}\gdef\thissection{#1}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash unnumbsecentry{\the\toks0}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\unnumbnoderef % +\penalty 10000 % +}} + +\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy} +\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz +\def\numberedsubseczzz #1{\seccheck{subsection}% +\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % +\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash subsecentry % +{\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\donoderef % +\penalty 10000 % +}} + +\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy} +\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz +\def\appendixsubseczzz #1{\seccheck{appendixsubsec}% +\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % +\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash subsecentry % +{\the\toks0}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\appendixnoderef % +\penalty 10000 % +}} + +\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy} +\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz +\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}% +\plainsubsecheading {#1}\gdef\thissection{#1}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash unnumbsubsecentry{\the\toks0}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\unnumbnoderef % +\penalty 10000 % +}} + +\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy} +\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz +\def\numberedsubsubseczzz #1{\seccheck{subsubsection}% +\gdef\thissection{#1}\global\advance \subsubsecno by 1 % +\subsubsecheading {#1} + {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash subsubsecentry{\the\toks0} + {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno} + {\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\donoderef % +\penalty 10000 % +}} + +\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy} +\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz +\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}% +\gdef\thissection{#1}\global\advance \subsubsecno by 1 % +\subsubsecheading {#1} + {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash subsubsecentry{\the\toks0}% + {\appendixletter} + {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\appendixnoderef % +\penalty 10000 % +}} + +\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy} +\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz +\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}% +\plainsubsubsecheading {#1}\gdef\thissection{#1}% +{\chapternofonts% +\toks0 = {#1}% +\edef\temp{{\realbackslash unnumbsubsubsecentry{\the\toks0}{\noexpand\folio}}}% +\escapechar=`\\% +\write \contentsfile \temp % +\unnumbnoderef % +\penalty 10000 % +}} + +% These are variants which are not "outer", so they can appear in @ifinfo. +% Actually, they should now be obsolete; ordinary section commands should work. +\def\infotop{\parsearg\unnumberedzzz} +\def\infounnumbered{\parsearg\unnumberedzzz} +\def\infounnumberedsec{\parsearg\unnumberedseczzz} +\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz} +\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz} + +\def\infoappendix{\parsearg\appendixzzz} +\def\infoappendixsec{\parsearg\appendixseczzz} +\def\infoappendixsubsec{\parsearg\appendixsubseczzz} +\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz} + +\def\infochapter{\parsearg\chapterzzz} +\def\infosection{\parsearg\sectionzzz} +\def\infosubsection{\parsearg\subsectionzzz} +\def\infosubsubsection{\parsearg\subsubsectionzzz} + +% These macros control what the section commands do, according +% to what kind of chapter we are in (ordinary, appendix, or unnumbered). +% Define them by default for a numbered chapter. +\global\let\section = \numberedsec +\global\let\subsection = \numberedsubsec +\global\let\subsubsection = \numberedsubsubsec + +% Define @majorheading, @heading and @subheading + +% NOTE on use of \vbox for chapter headings, section headings, and +% such: +% 1) We use \vbox rather than the earlier \line to permit +% overlong headings to fold. +% 2) \hyphenpenalty is set to 10000 because hyphenation in a +% heading is obnoxious; this forbids it. +% 3) Likewise, headings look best if no \parindent is used, and +% if justification is not attempted. Hence \raggedright. + + +\def\majorheading{\parsearg\majorheadingzzz} +\def\majorheadingzzz #1{% +{\advance\chapheadingskip by 10pt \chapbreak }% +{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rm #1\hfill}}\bigskip \par\penalty 200} + +\def\chapheading{\parsearg\chapheadingzzz} +\def\chapheadingzzz #1{\chapbreak % +{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rm #1\hfill}}\bigskip \par\penalty 200} + +% @heading, @subheading, @subsubheading. +\def\heading{\parsearg\plainsecheading} +\def\subheading{\parsearg\plainsubsecheading} +\def\subsubheading{\parsearg\plainsubsubsecheading} + +% These macros generate a chapter, section, etc. heading only +% (including whitespace, linebreaking, etc. around it), +% given all the information in convenient, parsed form. + +%%% Args are the skip and penalty (usually negative) +\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} + +\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} + +%%% Define plain chapter starts, and page on/off switching for it +% Parameter controlling skip before chapter headings (if needed) + +\newskip\chapheadingskip + +\def\chapbreak{\dobreak \chapheadingskip {-4000}} +\def\chappager{\par\vfill\supereject} +\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} + +\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} + +\def\CHAPPAGoff{ +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chapbreak +\global\let\pagealignmacro=\chappager} + +\def\CHAPPAGon{ +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chappager +\global\let\pagealignmacro=\chappager +\global\def\HEADINGSon{\HEADINGSsingle}} + +\def\CHAPPAGodd{ +\global\let\contentsalignmacro = \chapoddpage +\global\let\pchapsepmacro=\chapoddpage +\global\let\pagealignmacro=\chapoddpage +\global\def\HEADINGSon{\HEADINGSdouble}} + +\CHAPPAGon + +\def\CHAPFplain{ +\global\let\chapmacro=\chfplain +\global\let\unnumbchapmacro=\unnchfplain +\global\let\centerchapmacro=\centerchfplain} + +% Plain chapter opening. +% #1 is the text, #2 the chapter number or empty if unnumbered. +\def\chfplain#1#2{% + \pchapsepmacro + {% + \chapfonts \rm + \def\chapnum{#2}% + \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}% + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent = \wd0 \centerparametersmaybe + \unhbox0 #1\par}% + }% + \nobreak\bigskip % no page break after a chapter title + \nobreak +} + +% Plain opening for unnumbered. +\def\unnchfplain#1{\chfplain{#1}{}} + +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerchfplain#1{{% + \def\centerparametersmaybe{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt + }% + \chfplain{#1}{}% +}} + +\CHAPFplain % The default + +\def\unnchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rm #1\hfill}}\bigskip \par\penalty 10000 % +} + +\def\chfopen #1#2{\chapoddpage {\chapfonts +\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% +\par\penalty 5000 % +} + +\def\centerchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt + \hfill {\rm #1}\hfill}}\bigskip \par\penalty 10000 % +} + +\def\CHAPFopen{ +\global\let\chapmacro=\chfopen +\global\let\unnumbchapmacro=\unnchfopen +\global\let\centerchapmacro=\centerchfopen} + + +% Section titles. +\newskip\secheadingskip +\def\secheadingbreak{\dobreak \secheadingskip {-1000}} +\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}} +\def\plainsecheading#1{\sectionheading{sec}{}{#1}} + +% Subsection titles. +\newskip \subsecheadingskip +\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}} +\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}} +\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}} + +% Subsubsection titles. +\let\subsubsecheadingskip = \subsecheadingskip +\let\subsubsecheadingbreak = \subsecheadingbreak +\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}} +\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}} + + +% Print any size section title. +% +% #1 is the section type (sec/subsec/subsubsec), #2 is the section +% number (maybe empty), #3 the text. +\def\sectionheading#1#2#3{% + {% + \expandafter\advance\csname #1headingskip\endcsname by \parskip + \csname #1headingbreak\endcsname + }% + {% + % Switch to the right set of fonts. + \csname #1fonts\endcsname \rm + % + % Only insert the separating space if we have a section number. + \def\secnum{#2}% + \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}% + % + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent = \wd0 % zero if no section number + \unhbox0 #3}% + }% + \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak +} + + +\message{toc printing,} +% Finish up the main text and prepare to read what we've written +% to \contentsfile. + +\newskip\contentsrightmargin \contentsrightmargin=1in +\def\startcontents#1{% + % If @setchapternewpage on, and @headings double, the contents should + % start on an odd page, unlike chapters. Thus, we maintain + % \contentsalignmacro in parallel with \pagealignmacro. + % From: Torbjorn Granlund <[email protected]> + \contentsalignmacro + \immediate\closeout \contentsfile + \ifnum \pageno>0 + \pageno = -1 % Request roman numbered pages. + \fi + % Don't need to put `Contents' or `Short Contents' in the headline. + % It is abundantly clear what they are. + \unnumbchapmacro{#1}\def\thischapter{}% + \begingroup % Set up to handle contents files properly. + \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 + % We can't do this, because then an actual ^ in a section + % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. + %\catcode`\^=7 % to see ^^e4 as \"a etc. [email protected] + \raggedbottom % Worry more about breakpoints than the bottom. + \advance\hsize by -\contentsrightmargin % Don't use the full line length. +} + + +% Normal (long) toc. +\outer\def\contents{% + \startcontents{\putwordTableofContents}% + \input \jobname.toc + \endgroup + \vfill \eject +} + +% And just the chapters. +\outer\def\summarycontents{% + \startcontents{\putwordShortContents}% + % + \let\chapentry = \shortchapentry + \let\unnumbchapentry = \shortunnumberedentry + % We want a true roman here for the page numbers. + \secfonts + \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl + \rm + \hyphenpenalty = 10000 + \advance\baselineskip by 1pt % Open it up a little. + \def\secentry ##1##2##3##4{} + \def\unnumbsecentry ##1##2{} + \def\subsecentry ##1##2##3##4##5{} + \def\unnumbsubsecentry ##1##2{} + \def\subsubsecentry ##1##2##3##4##5##6{} + \def\unnumbsubsubsecentry ##1##2{} + \input \jobname.toc + \endgroup + \vfill \eject +} +\let\shortcontents = \summarycontents + +% These macros generate individual entries in the table of contents. +% The first argument is the chapter or section name. +% The last argument is the page number. +% The arguments in between are the chapter number, section number, ... + +% Chapter-level things, for both the long and short contents. +\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}} + +% See comments in \dochapentry re vbox and related settings +\def\shortchapentry#1#2#3{% + \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}% +} + +% Typeset the label for a chapter or appendix for the short contents. +% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter. +% We could simplify the code here by writing out an \appendixentry +% command in the toc file for appendices, instead of using \chapentry +% for both, but it doesn't seem worth it. +\setbox0 = \hbox{\shortcontrm \putwordAppendix } +\newdimen\shortappendixwidth \shortappendixwidth = \wd0 + +\def\shortchaplabel#1{% + % We typeset #1 in a box of constant width, regardless of the text of + % #1, so the chapter titles will come out aligned. + \setbox0 = \hbox{#1}% + \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi + % + % This space should be plenty, since a single number is .5em, and the + % widest letter (M) is 1em, at least in the Computer Modern fonts. + % (This space doesn't include the extra space that gets added after + % the label; that gets put in by \shortchapentry above.) + \advance\dimen0 by 1.1em + \hbox to \dimen0{#1\hfil}% +} + +\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} +\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}} + +% Sections. +\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} +\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}} + +% Subsections. +\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}} +\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}} + +% And subsubsections. +\def\subsubsecentry#1#2#3#4#5#6{% + \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}} +\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}} + +% This parameter controls the indentation of the various levels. +\newdimen\tocindent \tocindent = 3pc + +% Now for the actual typesetting. In all these, #1 is the text and #2 is the +% page number. +% +% If the toc has to be broken over pages, we want it to be at chapters +% if at all possible; hence the \penalty. +\def\dochapentry#1#2{% + \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip + \begingroup + \chapentryfonts + \tocentry{#1}{\dopageno{#2}}% + \endgroup + \nobreak\vskip .25\baselineskip plus.1\baselineskip +} + +\def\dosecentry#1#2{\begingroup + \secentryfonts \leftskip=\tocindent + \tocentry{#1}{\dopageno{#2}}% +\endgroup} + +\def\dosubsecentry#1#2{\begingroup + \subsecentryfonts \leftskip=2\tocindent + \tocentry{#1}{\dopageno{#2}}% +\endgroup} + +\def\dosubsubsecentry#1#2{\begingroup + \subsubsecentryfonts \leftskip=3\tocindent + \tocentry{#1}{\dopageno{#2}}% +\endgroup} + +% Final typesetting of a toc entry; we use the same \entry macro as for +% the index entries, but we want to suppress hyphenation here. (We +% can't do that in the \entry macro, since index entries might consist +% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.) +% +% \turnoffactive is for the sake of @" used for umlauts. +\def\tocentry#1#2{\begingroup + \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks + \entry{\turnoffactive #1}{\turnoffactive #2}% +\endgroup} + +% Space between chapter (or whatever) number and the title. +\def\labelspace{\hskip1em \relax} + +\def\dopageno#1{{\rm #1}} +\def\doshortpageno#1{{\rm #1}} + +\def\chapentryfonts{\secfonts \rm} +\def\secentryfonts{\textfonts} +\let\subsecentryfonts = \textfonts +\let\subsubsecentryfonts = \textfonts + + +\message{environments,} + +% Since these characters are used in examples, it should be an even number of +% \tt widths. Each \tt character is 1en, so two makes it 1em. +% Furthermore, these definitions must come after we define our fonts. +\newbox\dblarrowbox \newbox\longdblarrowbox +\newbox\pushcharbox \newbox\bullbox +\newbox\equivbox \newbox\errorbox + +%{\tentt +%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil} +%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil} +%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil} +%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil} +% Adapted from the manmac format (p.420 of TeXbook) +%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex +% depth .1ex\hfil} +%} + +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. +\def\point{$\star$} +\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} +\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} +\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} +\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} + +% Adapted from the TeXbook's \boxit. +{\tentt \global\dimen0 = 3em}% Width of the box. +\dimen2 = .55pt % Thickness of rules +% The text. (`r' is open on the right, `e' somewhat less so on the left.) +\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} + +\global\setbox\errorbox=\hbox to \dimen0{\hfil + \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. + \advance\hsize by -2\dimen2 % Rules. + \vbox{ + \hrule height\dimen2 + \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. + \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. + \kern3pt\vrule width\dimen2}% Space to right. + \hrule height\dimen2} + \hfil} + +% The @error{} command. +\def\error{\leavevmode\lower.7ex\copy\errorbox} + +% @tex ... @end tex escapes into raw Tex temporarily. +% One exception: @ is still an escape character, so that @end tex works. +% But \@ or @@ will get a plain tex @ character. + +\def\tex{\begingroup +\catcode `\\=0 \catcode `\{=1 \catcode `\}=2 +\catcode `\$=3 \catcode `\&=4 \catcode `\#=6 +\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie +\catcode `\%=14 +\catcode 43=12 % plus +\catcode`\"=12 +\catcode`\==12 +\catcode`\|=12 +\catcode`\<=12 +\catcode`\>=12 +\escapechar=`\\ +% +\let\,=\ptexcomma +\let\{=\ptexlbrace +\let\}=\ptexrbrace +\let\.=\ptexdot +\let\*=\ptexstar +\let\dots=\ptexdots +\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% +\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% +\def\@{@}% +\let\bullet=\ptexbullet +\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext +% +\let\Etex=\endgroup} + +% Define @lisp ... @endlisp. +% @lisp does a \begingroup so it can rebind things, +% including the definition of @endlisp (which normally is erroneous). + +% Amount to narrow the margins by for @lisp. +\newskip\lispnarrowing \lispnarrowing=0.4in + +% This is the definition that ^^M gets inside @lisp, @example, and other +% such environments. \null is better than a space, since it doesn't +% have any width. +\def\lisppar{\null\endgraf} + +% Make each space character in the input produce a normal interword +% space in the output. Don't allow a line break at this space, as this +% is used only in environments like @example, where each line of input +% should produce a line of output anyway. +% +{\obeyspaces % +\gdef\sepspaces{\obeyspaces\let =\tie}} + +% Define \obeyedspace to be our active space, whatever it is. This is +% for use in \parsearg. +{\sepspaces% +\global\let\obeyedspace= } + +% This space is always present above and below environments. +\newskip\envskipamount \envskipamount = 0pt + +% Make spacing and below environment symmetrical. We use \parskip here +% to help in doing that, since in @example-like environments \parskip +% is reset to zero; thus the \afterenvbreak inserts no space -- but the +% start of the next paragraph will insert \parskip +% +\def\aboveenvbreak{{\advance\envskipamount by \parskip +\endgraf \ifdim\lastskip<\envskipamount +\removelastskip \penalty-50 \vskip\envskipamount \fi}} + +\let\afterenvbreak = \aboveenvbreak + +% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. +\let\nonarrowing=\relax + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \cartouche: draw rectangle w/rounded corners around argument +\font\circle=lcircle10 +\newdimen\circthick +\newdimen\cartouter\newdimen\cartinner +\newskip\normbskip\newskip\normpskip\newskip\normlskip +\circthick=\fontdimen8\circle +% +\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth +\def\ctr{{\hskip 6pt\circle\char'010}} +\def\cbl{{\circle\char'012\hskip -6pt}} +\def\cbr{{\hskip 6pt\circle\char'011}} +\def\carttop{\hbox to \cartouter{\hskip\lskip + \ctl\leaders\hrule height\circthick\hfil\ctr + \hskip\rskip}} +\def\cartbot{\hbox to \cartouter{\hskip\lskip + \cbl\leaders\hrule height\circthick\hfil\cbr + \hskip\rskip}} +% +\newskip\lskip\newskip\rskip + +\long\def\cartouche{% +\begingroup + \lskip=\leftskip \rskip=\rightskip + \leftskip=0pt\rightskip=0pt %we want these *outside*. + \cartinner=\hsize \advance\cartinner by-\lskip + \advance\cartinner by-\rskip + \cartouter=\hsize + \advance\cartouter by 18pt % allow for 3pt kerns on either +% side, and for 6pt waste from +% each corner char + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % Flag to tell @lisp, etc., not to narrow margin. + \let\nonarrowing=\comment + \vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \hsize=\cartinner + \kern3pt + \begingroup + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip +\def\Ecartouche{% + \endgroup + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup +\endgroup +}} + + +% This macro is called at the beginning of all the @example variants, +% inside a group. +\def\nonfillstart{% + \aboveenvbreak + \inENV % This group ends at the end of the body + \hfuzz = 12pt % Don't be fussy + \sepspaces % Make spaces be word-separators rather than space tokens. + \singlespace + \let\par = \lisppar % don't ignore blank lines + \obeylines % each line of input is a line of output + \parskip = 0pt + \parindent = 0pt + \emergencystretch = 0pt % don't try to avoid overfull boxes + % @cartouche defines \nonarrowing to inhibit narrowing + % at next level down. + \ifx\nonarrowing\relax + \advance \leftskip by \lispnarrowing + \exdentamount=\lispnarrowing + \let\exdent=\nofillexdent + \let\nonarrowing=\relax + \fi +} + +% To ending an @example-like environment, we first end the paragraph +% (via \afterenvbreak's vertical glue), and then the group. That way we +% keep the zero \parskip that the environments set -- \parskip glue +% will be inserted at the beginning of the next paragraph in the +% document, after the environment. +% +\def\nonfillfinish{\afterenvbreak\endgroup}% + +\def\lisp{\begingroup + \nonfillstart + \let\Elisp = \nonfillfinish + \tt + % Make @kbd do something special, if requested. + \let\kbdfont\kbdexamplefont + \rawbackslash % have \ input char produce \ char from current font + \gobble +} + +% Define the \E... control sequence only if we are inside the +% environment, so the error checking in \end will work. +% +% We must call \lisp last in the definition, since it reads the +% return following the @example (or whatever) command. +% +\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp} +\def\smallexample{\begingroup \def\Esmallexample{\nonfillfinish\endgroup}\lisp} +\def\smalllisp{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}\lisp} + +% @smallexample and @smalllisp. This is not used unless the @smallbook +% command is given. Originally contributed by Pavel@xerox. +% +\def\smalllispx{\begingroup + \nonfillstart + \let\Esmalllisp = \nonfillfinish + \let\Esmallexample = \nonfillfinish + % + % Smaller fonts for small examples. + \indexfonts \tt + \rawbackslash % make \ output the \ character from the current font (tt) + \gobble +} + +% This is @display; same as @lisp except use roman font. +% +\def\display{\begingroup + \nonfillstart + \let\Edisplay = \nonfillfinish + \gobble +} + +% This is @format; same as @display except don't narrow margins. +% +\def\format{\begingroup + \let\nonarrowing = t + \nonfillstart + \let\Eformat = \nonfillfinish + \gobble +} + +% @flushleft (same as @format) and @flushright. +% +\def\flushleft{\begingroup + \let\nonarrowing = t + \nonfillstart + \let\Eflushleft = \nonfillfinish + \gobble +} +\def\flushright{\begingroup + \let\nonarrowing = t + \nonfillstart + \let\Eflushright = \nonfillfinish + \advance\leftskip by 0pt plus 1fill + \gobble} + +% @quotation does normal linebreaking (hence we can't use \nonfillstart) +% and narrows the margins. +% +\def\quotation{% + \begingroup\inENV %This group ends at the end of the @quotation body + {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip + \singlespace + \parindent=0pt + % We have retained a nonzero parskip for the environment, since we're + % doing normal filling. So to avoid extra space below the environment... + \def\Equotation{\parskip = 0pt \nonfillfinish}% + % + % @cartouche defines \nonarrowing to inhibit narrowing at next level down. + \ifx\nonarrowing\relax + \advance\leftskip by \lispnarrowing + \advance\rightskip by \lispnarrowing + \exdentamount = \lispnarrowing + \let\nonarrowing = \relax + \fi +} + +\message{defuns,} +% Define formatter for defuns +% First, allow user to change definition object font (\df) internally +\def\setdeffont #1 {\csname DEF#1\endcsname} + +\newskip\defbodyindent \defbodyindent=.4in +\newskip\defargsindent \defargsindent=50pt +\newskip\deftypemargin \deftypemargin=12pt +\newskip\deflastargmargin \deflastargmargin=18pt + +\newcount\parencount +% define \functionparens, which makes ( and ) and & do special things. +% \functionparens affects the group it is contained in. +\def\activeparens{% +\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active +\catcode`\[=\active \catcode`\]=\active} + +% Make control sequences which act like normal parenthesis chars. +\let\lparen = ( \let\rparen = ) + +{\activeparens % Now, smart parens don't turn on until &foo (see \amprm) + +% Be sure that we always have a definition for `(', etc. For example, +% if the fn name has parens in it, \boldbrax will not be in effect yet, +% so TeX would otherwise complain about undefined control sequence. +\global\let(=\lparen \global\let)=\rparen +\global\let[=\lbrack \global\let]=\rbrack + +\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 } +\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} +% This is used to turn on special parens +% but make & act ordinary (given that it's active). +\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr} + +% Definitions of (, ) and & used in args for functions. +% This is the definition of ( outside of all parentheses. +\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested + \global\advance\parencount by 1 +} +% +% This is the definition of ( when already inside a level of parens. +\gdef\opnested{\char`\(\global\advance\parencount by 1 } +% +\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0. + % also in that case restore the outer-level definition of (. + \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi + \global\advance \parencount by -1 } +% If we encounter &foo, then turn on ()-hacking afterwards +\gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ } +% +\gdef\normalparens{\boldbrax\let&=\ampnr} +} % End of definition inside \activeparens +%% These parens (in \boldbrax) actually are a little bolder than the +%% contained text. This is especially needed for [ and ] +\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 } +\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 } +\def\ampnr{\&} +\def\lbrb{{\bf\char`\[}} +\def\rbrb{{\bf\char`\]}} + +% First, defname, which formats the header line itself. +% #1 should be the function name. +% #2 should be the type of definition, such as "Function". + +\def\defname #1#2{% +% Get the values of \leftskip and \rightskip as they were +% outside the @def... +\dimen2=\leftskip +\advance\dimen2 by -\defbodyindent +\dimen3=\rightskip +\advance\dimen3 by -\defbodyindent +\noindent % +\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}% +\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line +\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations +\parshape 2 0in \dimen0 \defargsindent \dimen1 % +% Now output arg 2 ("Function" or some such) +% ending at \deftypemargin from the right margin, +% but stuck inside a box of width 0 so it does not interfere with linebreaking +{% Adjust \hsize to exclude the ambient margins, +% so that \rightline will obey them. +\advance \hsize by -\dimen2 \advance \hsize by -\dimen3 +\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}% +% Make all lines underfull and no complaints: +\tolerance=10000 \hbadness=10000 +\advance\leftskip by -\defbodyindent +\exdentamount=\defbodyindent +{\df #1}\enskip % Generate function name +} + +% Actually process the body of a definition +% #1 should be the terminating control sequence, such as \Edefun. +% #2 should be the "another name" control sequence, such as \defunx. +% #3 should be the control sequence that actually processes the header, +% such as \defunheader. + +\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody +\medbreak % +% Define the end token that this defining construct specifies +% so that it will exit this group. +\def#1{\endgraf\endgroup\medbreak}% +\def#2{\begingroup\obeylines\activeparens\spacesplit#3}% +\parindent=0in +\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent +\exdentamount=\defbodyindent +\begingroup % +\catcode 61=\active % 61 is `=' +\obeylines\activeparens\spacesplit#3} + +\def\defmethparsebody #1#2#3#4 {\begingroup\inENV % +\medbreak % +% Define the end token that this defining construct specifies +% so that it will exit this group. +\def#1{\endgraf\endgroup\medbreak}% +\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}% +\parindent=0in +\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent +\exdentamount=\defbodyindent +\begingroup\obeylines\activeparens\spacesplit{#3{#4}}} + +\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV % +\medbreak % +% Define the end token that this defining construct specifies +% so that it will exit this group. +\def#1{\endgraf\endgroup\medbreak}% +\def#2##1 ##2 {\def#4{##1}% +\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}% +\parindent=0in +\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent +\exdentamount=\defbodyindent +\begingroup\obeylines\activeparens\spacesplit{#3{#5}}} + +% These parsing functions are similar to the preceding ones +% except that they do not make parens into active characters. +% These are used for "variables" since they have no arguments. + +\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody +\medbreak % +% Define the end token that this defining construct specifies +% so that it will exit this group. +\def#1{\endgraf\endgroup\medbreak}% +\def#2{\begingroup\obeylines\spacesplit#3}% +\parindent=0in +\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent +\exdentamount=\defbodyindent +\begingroup % +\catcode 61=\active % +\obeylines\spacesplit#3} + +% This is used for \def{tp,vr}parsebody. It could probably be used for +% some of the others, too, with some judicious conditionals. +% +\def\parsebodycommon#1#2#3{% + \begingroup\inENV % + \medbreak % + % Define the end token that this defining construct specifies + % so that it will exit this group. + \def#1{\endgraf\endgroup\medbreak}% + \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% + \parindent=0in + \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent + \exdentamount=\defbodyindent + \begingroup\obeylines +} + +\def\defvrparsebody#1#2#3#4 {% + \parsebodycommon{#1}{#2}{#3}% + \spacesplit{#3{#4}}% +} + +% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the +% type is just `struct', because we lose the braces in `{struct +% termios}' when \spacesplit reads its undelimited argument. Sigh. +% \let\deftpparsebody=\defvrparsebody +% +% So, to get around this, we put \empty in with the type name. That +% way, TeX won't find exactly `{...}' as an undelimited argument, and +% won't strip off the braces. +% +\def\deftpparsebody #1#2#3#4 {% + \parsebodycommon{#1}{#2}{#3}% + \spacesplit{\parsetpheaderline{#3{#4}}}\empty +} + +% Fine, but then we have to eventually remove the \empty *and* the +% braces (if any). That's what this does. +% +\def\removeemptybraces\empty#1\relax{#1} + +% After \spacesplit has done its work, this is called -- #1 is the final +% thing to call, #2 the type name (which starts with \empty), and #3 +% (which might be empty) the arguments. +% +\def\parsetpheaderline#1#2#3{% + #1{\removeemptybraces#2\relax}{#3}% +}% + +\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV % +\medbreak % +% Define the end token that this defining construct specifies +% so that it will exit this group. +\def#1{\endgraf\endgroup\medbreak}% +\def#2##1 ##2 {\def#4{##1}% +\begingroup\obeylines\spacesplit{#3{##2}}}% +\parindent=0in +\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent +\exdentamount=\defbodyindent +\begingroup\obeylines\spacesplit{#3{#5}}} + +% Split up #2 at the first space token. +% call #1 with two arguments: +% the first is all of #2 before the space token, +% the second is all of #2 after that space token. +% If #2 contains no space token, all of it is passed as the first arg +% and the second is passed as empty. + +{\obeylines +\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}% +\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{% +\ifx\relax #3% +#1{#2}{}\else #1{#2}{#3#4}\fi}} + +% So much for the things common to all kinds of definitions. + +% Define @defun. + +% First, define the processing that is wanted for arguments of \defun +% Use this to expand the args and terminate the paragraph they make up + +\def\defunargs #1{\functionparens \sl +% Expand, preventing hyphenation at `-' chars. +% Note that groups don't affect changes in \hyphenchar. +\hyphenchar\tensl=0 +#1% +\hyphenchar\tensl=45 +\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi% +\interlinepenalty=10000 +\advance\rightskip by 0pt plus 1fil +\endgraf\penalty 10000\vskip -\parskip\penalty 10000% +} + +\def\deftypefunargs #1{% +% Expand, preventing hyphenation at `-' chars. +% Note that groups don't affect changes in \hyphenchar. +% Use \boldbraxnoamp, not \functionparens, so that & is not special. +\boldbraxnoamp +\tclose{#1}% avoid \code because of side effects on active chars +\interlinepenalty=10000 +\advance\rightskip by 0pt plus 1fil +\endgraf\penalty 10000\vskip -\parskip\penalty 10000% +} + +% Do complete processing of one @defun or @defunx line already parsed. + +% @deffn Command forward-char nchars + +\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader} + +\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}% +\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup % +\catcode 61=\other % Turn off change made in \defparsebody +} + +% @defun == @deffn Function + +\def\defun{\defparsebody\Edefun\defunx\defunheader} + +\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index +\begingroup\defname {#1}{Function}% +\defunargs {#2}\endgroup % +\catcode 61=\other % Turn off change made in \defparsebody +} + +% @deftypefun int foobar (int @var{foo}, float @var{bar}) + +\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader} + +% #1 is the data type. #2 is the name and args. +\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax} +% #1 is the data type, #2 the name, #3 the args. +\def\deftypefunheaderx #1#2 #3\relax{% +\doind {fn}{\code{#2}}% Make entry in function index +\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}% +\deftypefunargs {#3}\endgroup % +\catcode 61=\other % Turn off change made in \defparsebody +} + +% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) + +\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader} + +% \defheaderxcond#1\relax$$$ +% puts #1 in @code, followed by a space, but does nothing if #1 is null. +\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi} + +% #1 is the classification. #2 is the data type. #3 is the name and args. +\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax} +% #1 is the classification, #2 the data type, #3 the name, #4 the args. +\def\deftypefnheaderx #1#2#3 #4\relax{% +\doind {fn}{\code{#3}}% Make entry in function index +\begingroup +\normalparens % notably, turn off `&' magic, which prevents +% at least some C++ text from working +\defname {\defheaderxcond#2\relax$$$#3}{#1}% +\deftypefunargs {#4}\endgroup % +\catcode 61=\other % Turn off change made in \defparsebody +} + +% @defmac == @deffn Macro + +\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader} + +\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index +\begingroup\defname {#1}{Macro}% +\defunargs {#2}\endgroup % +\catcode 61=\other % Turn off change made in \defparsebody +} + +% @defspec == @deffn Special Form + +\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader} + +\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index +\begingroup\defname {#1}{Special Form}% +\defunargs {#2}\endgroup % +\catcode 61=\other % Turn off change made in \defparsebody +} + +% This definition is run if you use @defunx +% anywhere other than immediately after a @defun or @defunx. + +\def\deffnx #1 {\errmessage{@deffnx in invalid context}} +\def\defunx #1 {\errmessage{@defunx in invalid context}} +\def\defmacx #1 {\errmessage{@defmacx in invalid context}} +\def\defspecx #1 {\errmessage{@defspecx in invalid context}} +\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}} +\def\deftypemethodx #1 {\errmessage{@deftypemethodx in invalid context}} +\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}} + +% @defmethod, and so on + +% @defop {Funny Method} foo-class frobnicate argument + +\def\defop #1 {\def\defoptype{#1}% +\defopparsebody\Edefop\defopx\defopheader\defoptype} + +\def\defopheader #1#2#3{% +\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index +\begingroup\defname {#2}{\defoptype{} on #1}% +\defunargs {#3}\endgroup % +} + +% @deftypemethod foo-class return-type foo-method args +% +\def\deftypemethod{% + \defmethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader} +% +% #1 is the class name, #2 the data type, #3 the method name, #4 the args. +\def\deftypemethodheader#1#2#3#4{% + \deftypefnheaderx{Method on #1}{#2}#3 #4\relax +} + +% @defmethod == @defop Method + +\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} + +\def\defmethodheader #1#2#3{% +\dosubind {fn}{\code{#2}}{on #1}% entry in function index +\begingroup\defname {#2}{Method on #1}% +\defunargs {#3}\endgroup % +} + +% @defcv {Class Option} foo-class foo-flag + +\def\defcv #1 {\def\defcvtype{#1}% +\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype} + +\def\defcvarheader #1#2#3{% +\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index +\begingroup\defname {#2}{\defcvtype{} of #1}% +\defvarargs {#3}\endgroup % +} + +% @defivar == @defcv {Instance Variable} + +\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader} + +\def\defivarheader #1#2#3{% +\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index +\begingroup\defname {#2}{Instance Variable of #1}% +\defvarargs {#3}\endgroup % +} + +% These definitions are run if you use @defmethodx, etc., +% anywhere other than immediately after a @defmethod, etc. + +\def\defopx #1 {\errmessage{@defopx in invalid context}} +\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}} +\def\defcvx #1 {\errmessage{@defcvx in invalid context}} +\def\defivarx #1 {\errmessage{@defivarx in invalid context}} + +% Now @defvar + +% First, define the processing that is wanted for arguments of @defvar. +% This is actually simple: just print them in roman. +% This must expand the args and terminate the paragraph they make up +\def\defvarargs #1{\normalparens #1% +\interlinepenalty=10000 +\endgraf\penalty 10000\vskip -\parskip\penalty 10000} + +% @defvr Counter foo-count + +\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader} + +\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}% +\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup} + +% @defvar == @defvr Variable + +\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader} + +\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index +\begingroup\defname {#1}{Variable}% +\defvarargs {#2}\endgroup % +} + +% @defopt == @defvr {User Option} + +\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader} + +\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index +\begingroup\defname {#1}{User Option}% +\defvarargs {#2}\endgroup % +} + +% @deftypevar int foobar + +\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader} + +% #1 is the data type. #2 is the name, perhaps followed by text that +% is actually part of the data type, which should not be put into the index. +\def\deftypevarheader #1#2{% +\dovarind#2 \relax% Make entry in variables index +\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}% +\interlinepenalty=10000 +\endgraf\penalty 10000\vskip -\parskip\penalty 10000 +\endgroup} +\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}} + +% @deftypevr {Global Flag} int enable + +\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} + +\def\deftypevrheader #1#2#3{\dovarind#3 \relax% +\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1} +\interlinepenalty=10000 +\endgraf\penalty 10000\vskip -\parskip\penalty 10000 +\endgroup} + +% This definition is run if you use @defvarx +% anywhere other than immediately after a @defvar or @defvarx. + +\def\defvrx #1 {\errmessage{@defvrx in invalid context}} +\def\defvarx #1 {\errmessage{@defvarx in invalid context}} +\def\defoptx #1 {\errmessage{@defoptx in invalid context}} +\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}} +\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}} + +% Now define @deftp +% Args are printed in bold, a slight difference from @defvar. + +\def\deftpargs #1{\bf \defvarargs{#1}} + +% @deftp Class window height width ... + +\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader} + +\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}% +\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup} + +% This definition is run if you use @deftpx, etc +% anywhere other than immediately after a @deftp, etc. + +\def\deftpx #1 {\errmessage{@deftpx in invalid context}} + + +\message{cross reference,} +% Define cross-reference macros +\newwrite \auxfile + +\newif\ifhavexrefs % True if xref values are known. +\newif\ifwarnedxrefs % True if we warned once that they aren't known. + +% @inforef is simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, + node \samp{\ignorespaces#1{}}} + +% \setref{foo} defines a cross-reference point named foo. + +\def\setref#1{% +\dosetq{#1-title}{Ytitle}% +\dosetq{#1-pg}{Ypagenumber}% +\dosetq{#1-snt}{Ysectionnumberandtype}} + +\def\unnumbsetref#1{% +\dosetq{#1-title}{Ytitle}% +\dosetq{#1-pg}{Ypagenumber}% +\dosetq{#1-snt}{Ynothing}} + +\def\appendixsetref#1{% +\dosetq{#1-title}{Ytitle}% +\dosetq{#1-pg}{Ypagenumber}% +\dosetq{#1-snt}{Yappendixletterandtype}} + +% \xref, \pxref, and \ref generate cross-references to specified points. +% For \xrefX, #1 is the node name, #2 the name of the Info +% cross-reference, #3 the printed node name, #4 the name of the Info +% file, #5 the name of the printed manual. All but the node name can be +% omitted. +% +\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} +\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} +\def\ref#1{\xrefX[#1,,,,,,,]} +\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup + \def\printedmanual{\ignorespaces #5}% + \def\printednodename{\ignorespaces #3}% + \setbox1=\hbox{\printedmanual}% + \setbox0=\hbox{\printednodename}% + \ifdim \wd0 = 0pt + % No printed node name was explicitly given. + \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax + % Use the node name inside the square brackets. + \def\printednodename{\ignorespaces #1}% + \else + % Use the actual chapter/section title appear inside + % the square brackets. Use the real section title if we have it. + \ifdim \wd1>0pt% + % It is in another manual, so we don't have it. + \def\printednodename{\ignorespaces #1}% + \else + \ifhavexrefs + % We know the real title if we have the xref values. + \def\printednodename{\refx{#1-title}{}}% + \else + % Otherwise just copy the Info node name. + \def\printednodename{\ignorespaces #1}% + \fi% + \fi + \fi + \fi + % + % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not + % insert empty discretionaries after hyphens, which means that it will + % not find a line break at a hyphen in a node names. Since some manuals + % are best written with fairly long node names, containing hyphens, this + % is a loss. Therefore, we give the text of the node name again, so it + % is as if TeX is seeing it for the first time. + \ifdim \wd1 > 0pt + \putwordsection{} ``\printednodename'' in \cite{\printedmanual}% + \else + % _ (for example) has to be the character _ for the purposes of the + % control sequence corresponding to the node, but it has to expand + % into the usual \leavevmode...\vrule stuff for purposes of + % printing. So we \turnoffactive for the \refx-snt, back on for the + % printing, back off for the \refx-pg. + {\turnoffactive \refx{#1-snt}{}}% + \space [\printednodename],\space + \turnoffactive \putwordpage\tie\refx{#1-pg}{}% + \fi +\endgroup} + +% \dosetq is the interface for calls from other macros + +% Use \turnoffactive so that punctuation chars such as underscore +% work in node names. +\def\dosetq #1#2{{\let\folio=0 \turnoffactive +\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}% +\next}} + +% \internalsetq {foo}{page} expands into +% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...} +% When the aux file is read, ' is the escape character + +\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}} + +% Things to be expanded by \internalsetq + +\def\Ypagenumber{\folio} + +\def\Ytitle{\thissection} + +\def\Ynothing{} + +\def\Ysectionnumberandtype{% +\ifnum\secno=0 \putwordChapter\xreftie\the\chapno % +\else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno % +\else \ifnum \subsubsecno=0 % +\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno % +\else % +\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno % +\fi \fi \fi } + +\def\Yappendixletterandtype{% +\ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}% +\else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno % +\else \ifnum \subsubsecno=0 % +\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno % +\else % +\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno % +\fi \fi \fi } + +\gdef\xreftie{'tie} + +% Use TeX 3.0's \inputlineno to get the line number, for better error +% messages, but if we're using an old version of TeX, don't do anything. +% +\ifx\inputlineno\thisisundefined + \let\linenumber = \empty % Non-3.0. +\else + \def\linenumber{\the\inputlineno:\space} +\fi + +% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. +% If its value is nonempty, SUFFIX is output afterward. + +\def\refx#1#2{% + \expandafter\ifx\csname X#1\endcsname\relax + % If not defined, say something at least. + $\langle$un\-de\-fined$\rangle$% + \ifhavexrefs + \message{\linenumber Undefined cross reference `#1'.}% + \else + \ifwarnedxrefs\else + \global\warnedxrefstrue + \message{Cross reference values unknown; you must run TeX again.}% + \fi + \fi + \else + % It's defined, so just use it. + \csname X#1\endcsname + \fi + #2% Output the suffix in any case. +} + +% This is the macro invoked by entries in the aux file. +\def\xrdef #1#2{{% + \catcode`\'=\other + \expandafter\gdef\csname X#1\endcsname{#2}% +}} + +% Read the last existing aux file, if any. No error if none exists. +\def\readauxfile{\begingroup + \catcode`\^^@=\other + \catcode`\^^A=\other + \catcode`\^^B=\other + \catcode`\^^C=\other + \catcode`\^^D=\other + \catcode`\^^E=\other + \catcode`\^^F=\other + \catcode`\^^G=\other + \catcode`\^^H=\other + \catcode`\^^K=\other + \catcode`\^^L=\other + \catcode`\^^N=\other + \catcode`\^^P=\other + \catcode`\^^Q=\other + \catcode`\^^R=\other + \catcode`\^^S=\other + \catcode`\^^T=\other + \catcode`\^^U=\other + \catcode`\^^V=\other + \catcode`\^^W=\other + \catcode`\^^X=\other + \catcode`\^^Z=\other + \catcode`\^^[=\other + \catcode`\^^\=\other + \catcode`\^^]=\other + \catcode`\^^^=\other + \catcode`\^^_=\other + \catcode`\@=\other + \catcode`\^=\other + % It was suggested to define this as 7, which would allow ^^e4 etc. + % in xref tags, i.e., node names. But since ^^e4 notation isn't + % supported in the main text, it doesn't seem desirable. Furthermore, + % that is not enough: for node names that actually contain a ^ + % character, we would end up writing a line like this: 'xrdef {'hat + % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first + % argument, and \hat is not an expandable control sequence. It could + % all be worked out, but why? Either we support ^^ or we don't. + % + % The other change necessary for this was to define \auxhat: + % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter + % and then to call \auxhat in \setq. + % + \catcode`\~=\other + \catcode`\[=\other + \catcode`\]=\other + \catcode`\"=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\$=\other + \catcode`\#=\other + \catcode`\&=\other + % `\+ does not work, so use 43. + \catcode43=\other + % Make the characters 128-255 be printing characters + {% + \count 1=128 + \def\loop{% + \catcode\count 1=\other + \advance\count 1 by 1 + \ifnum \count 1<256 \loop \fi + }% + }% + % The aux file uses ' as the escape (for now). + % Turn off \ as an escape so we do not lose on + % entries which were dumped with control sequences in their names. + % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^ + % Reference to such entries still does not work the way one would wish, + % but at least they do not bomb out when the aux file is read in. + \catcode`\{=1 + \catcode`\}=2 + \catcode`\%=\other + \catcode`\'=0 + \catcode`\\=\other + % + \openin 1 \jobname.aux + \ifeof 1 \else + \closein 1 + \input \jobname.aux + \global\havexrefstrue + \global\warnedobstrue + \fi + % Open the new aux file. TeX will close it automatically at exit. + \openout\auxfile=\jobname.aux +\endgroup} + + +% Footnotes. + +\newcount \footnoteno + +% The trailing space in the following definition for supereject is +% vital for proper filling; pages come out unaligned when you do a +% pagealignmacro call if that space before the closing brace is +% removed. (Generally, numeric constants should always be followed by a +% space to prevent strange expansion errors.) +\def\supereject{\par\penalty -20000\footnoteno =0 } + +% @footnotestyle is meaningful for info output only. +\let\footnotestyle=\comment + +\let\ptexfootnote=\footnote + +{\catcode `\@=11 +% +% Auto-number footnotes. Otherwise like plain. +\gdef\footnote{% + \global\advance\footnoteno by \@ne + \edef\thisfootno{$^{\the\footnoteno}$}% + % + % In case the footnote comes at the end of a sentence, preserve the + % extra spacing after we do the footnote number. + \let\@sf\empty + \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi + % + % Remove inadvertent blank space before typesetting the footnote number. + \unskip + \thisfootno\@sf + \footnotezzz +}% + +% Don't bother with the trickery in plain.tex to not require the +% footnote text as a parameter. Our footnotes don't need to be so general. +% +% Oh yes, they do; otherwise, @ifset and anything else that uses +% \parseargline fail inside footnotes because the tokens are fixed when +% the footnote is read. --karl, 16nov96. +% +\long\gdef\footnotezzz{\insert\footins\bgroup + % We want to typeset this text as a normal paragraph, even if the + % footnote reference occurs in (for example) a display environment. + % So reset some parameters. + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth\dp\strutbox + \floatingpenalty\@MM + \leftskip\z@skip + \rightskip\z@skip + \spaceskip\z@skip + \xspaceskip\z@skip + \parindent\defaultparindent + % + % Hang the footnote text off the number. + \hang + \textindent{\thisfootno}% + % + % Don't crash into the line above the footnote text. Since this + % expands into a box, it must come within the paragraph, lest it + % provide a place where TeX can split the footnote. + \footstrut + \futurelet\next\fo@t +} +\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t + \else\let\next\f@t\fi \next} +\def\f@@t{\bgroup\aftergroup\@foot\let\next} +\def\f@t#1{#1\@foot} +\def\@foot{\strut\egroup} + +}%end \catcode `\@=11 + +% Set the baselineskip to #1, and the lineskip and strut size +% correspondingly. There is no deep meaning behind these magic numbers +% used as factors; they just match (closely enough) what Knuth defined. +% +\def\lineskipfactor{.08333} +\def\strutheightpercent{.70833} +\def\strutdepthpercent {.29167} +% +\def\setleading#1{% + \normalbaselineskip = #1\relax + \normallineskip = \lineskipfactor\normalbaselineskip + \normalbaselines + \setbox\strutbox =\hbox{% + \vrule width0pt height\strutheightpercent\baselineskip + depth \strutdepthpercent \baselineskip + }% +} + +% @| inserts a changebar to the left of the current line. It should +% surround any changed text. This approach does *not* work if the +% change spans more than two lines of output. To handle that, we would +% have adopt a much more difficult approach (putting marks into the main +% vertical list for the beginning and end of each change). +% +\def\|{% + % \vadjust can only be used in horizontal mode. + \leavevmode + % + % Append this vertical mode material after the current line in the output. + \vadjust{% + % We want to insert a rule with the height and depth of the current + % leading; that is exactly what \strutbox is supposed to record. + \vskip-\baselineskip + % + % \vadjust-items are inserted at the left edge of the type. So + % the \llap here moves out into the left-hand margin. + \llap{% + % + % For a thicker or thinner bar, change the `1pt'. + \vrule height\baselineskip width1pt + % + % This is the space between the bar and the text. + \hskip 12pt + }% + }% +} + +% For a final copy, take out the rectangles +% that mark overfull boxes (in case you have decided +% that the text looks ok even though it passes the margin). +% +\def\finalout{\overfullrule=0pt} + +% @image. We use the macros from epsf.tex to support this. +% If epsf.tex is not installed and @image is used, we complain. +% +% Check for and read epsf.tex up front. If we read it only at @image +% time, we might be inside a group, and then its definitions would get +% undone and the next image would fail. +\openin 1 = xepsf.tex +\ifeof 1 \else + \closein 1 + \def\epsfannounce{\toks0 = }% do not bother showing banner + \input epsf.tex +\fi +% +\newif\ifwarnednoepsf +\newhelp\noepsfhelp{epsf.tex must be installed for images to + work. It is also included in the Texinfo distribution, or you can get + it from ftp://ftp.tug.org/tex/epsf.tex.} +% +% Only complain once about lack of epsf.tex. +\def\image#1{% + \ifx\epsfbox\undefined + \ifwarnednoepsf \else + \errhelp = \noepsfhelp + \errmessage{epsf.tex not found, images will be ignored}% + \global\warnednoepsftrue + \fi + \else + \imagexxx #1,,,\finish + \fi +} +% +% Arguments to @image: +% #1 is (mandatory) image filename; we tack on .eps extension. +% #2 is (optional) width, #3 is (optional) height. +% #4 is just the usual extra ignored arg for parsing this stuff. +\def\imagexxx#1,#2,#3,#4\finish{% + % \epsfbox itself resets \epsf?size at each figure. + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi + \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi + \epsfbox{#1.eps}% +} + +% End of control word definitions. + + +\message{and turning on texinfo input format.} + +\def\openindices{% + \newindex{cp}% + \newcodeindex{fn}% + \newcodeindex{vr}% + \newcodeindex{tp}% + \newcodeindex{ky}% + \newcodeindex{pg}% +} + +% Set some numeric style parameters, for 8.5 x 11 format. + +\hsize = 6in +\hoffset = .25in +\newdimen\defaultparindent \defaultparindent = 15pt +\parindent = \defaultparindent +\parskip 3pt plus 2pt minus 1pt +\setleading{13.2pt} +\advance\topskip by 1.2cm + +\chapheadingskip = 15pt plus 4pt minus 2pt +\secheadingskip = 12pt plus 3pt minus 2pt +\subsecheadingskip = 9pt plus 2pt minus 2pt + +% Prevent underfull vbox error messages. +\vbadness=10000 + +% Following George Bush, just get rid of widows and orphans. +\widowpenalty=10000 +\clubpenalty=10000 + +% Use TeX 3.0's \emergencystretch to help line breaking, but if we're +% using an old version of TeX, don't do anything. We want the amount of +% stretch added to depend on the line length, hence the dependence on +% \hsize. This makes it come to about 9pt for the 8.5x11 format. +% +\ifx\emergencystretch\thisisundefined + % Allow us to assign to \emergencystretch anyway. + \def\emergencystretch{\dimen0}% +\else + \emergencystretch = \hsize + \divide\emergencystretch by 45 +\fi + +% Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25) +\def\smallbook{ + \global\chapheadingskip = 15pt plus 4pt minus 2pt + \global\secheadingskip = 12pt plus 3pt minus 2pt + \global\subsecheadingskip = 9pt plus 2pt minus 2pt + % + \global\lispnarrowing = 0.3in + \setleading{12pt} + \advance\topskip by -1cm + \global\parskip 2pt plus 1pt + \global\hsize = 5in + \global\vsize=7.5in + \global\tolerance=700 + \global\hfuzz=1pt + \global\contentsrightmargin=0pt + \global\deftypemargin=0pt + \global\defbodyindent=.5cm + % + \global\pagewidth=\hsize + \global\pageheight=\vsize + % + \global\let\smalllisp=\smalllispx + \global\let\smallexample=\smalllispx + \global\def\Esmallexample{\Esmalllisp} +} + +% Use @afourpaper to print on European A4 paper. +\def\afourpaper{ +\global\tolerance=700 +\global\hfuzz=1pt +\setleading{12pt} +\global\parskip 15pt plus 1pt + +\global\vsize= 53\baselineskip +\advance\vsize by \topskip +%\global\hsize= 5.85in % A4 wide 10pt +\global\hsize= 6.5in +\global\outerhsize=\hsize +\global\advance\outerhsize by 0.5in +\global\outervsize=\vsize +\global\advance\outervsize by 0.6in + +\global\pagewidth=\hsize +\global\pageheight=\vsize +} + +\bindingoffset=0pt +\normaloffset=\hoffset +\pagewidth=\hsize +\pageheight=\vsize + +% Allow control of the text dimensions. Parameters in order: textheight; +% textwidth; voffset; hoffset; binding offset; topskip. +% All require a dimension; +% header is additional; added length extends the bottom of the page. + +\def\changepagesizes#1#2#3#4#5#6{ + \global\vsize= #1 + \global\topskip= #6 + \advance\vsize by \topskip + \global\voffset= #3 + \global\hsize= #2 + \global\outerhsize=\hsize + \global\advance\outerhsize by 0.5in + \global\outervsize=\vsize + \global\advance\outervsize by 0.6in + \global\pagewidth=\hsize + \global\pageheight=\vsize + \global\normaloffset= #4 + \global\bindingoffset= #5} + +% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin +% 29mm, hence bottom margin 28mm, nominal side margin 3cm. +\def\afourlatex + {\global\tolerance=700 + \global\hfuzz=1pt + \setleading{12pt} + \global\parskip 15pt plus 1pt + \advance\baselineskip by 1.6pt + \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm} + } + +% Use @afourwide to print on European A4 paper in wide format. +\def\afourwide{\afourpaper +\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}} + +% Define macros to output various characters with catcode for normal text. +\catcode`\"=\other +\catcode`\~=\other +\catcode`\^=\other +\catcode`\_=\other +\catcode`\|=\other +\catcode`\<=\other +\catcode`\>=\other +\catcode`\+=\other +\def\normaldoublequote{"} +\def\normaltilde{~} +\def\normalcaret{^} +\def\normalunderscore{_} +\def\normalverticalbar{|} +\def\normalless{<} +\def\normalgreater{>} +\def\normalplus{+} + +% This macro is used to make a character print one way in ttfont +% where it can probably just be output, and another way in other fonts, +% where something hairier probably needs to be done. +% +% #1 is what to print if we are indeed using \tt; #2 is what to print +% otherwise. Since all the Computer Modern typewriter fonts have zero +% interword stretch (and shrink), and it is reasonable to expect all +% typewriter fonts to have this, we can check that font parameter. +% +\def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi} + +% Turn off all special characters except @ +% (and those which the user can use as if they were ordinary). +% Most of these we simply print from the \tt font, but for some, we can +% use math or other variants that look better in normal text. + +\catcode`\"=\active +\def\activedoublequote{{\tt \char '042}} +\let"=\activedoublequote +\catcode`\~=\active +\def~{{\tt \char '176}} +\chardef\hat=`\^ +\catcode`\^=\active +\def^{{\tt \hat}} + +\catcode`\_=\active +\def_{\ifusingtt\normalunderscore\_} +% Subroutine for the previous macro. +\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}} + +\catcode`\|=\active +\def|{{\tt \char '174}} +\chardef \less=`\< +\catcode`\<=\active +\def<{{\tt \less}} +\chardef \gtr=`\> +\catcode`\>=\active +\def>{{\tt \gtr}} +\catcode`\+=\active +\def+{{\tt \char 43}} +%\catcode 27=\active +%\def^^[{$\diamondsuit$} + +% Set up an active definition for =, but don't enable it most of the time. +{\catcode`\==\active +\global\def={{\tt \char 61}}} + +\catcode`+=\active +\catcode`\_=\active + +% If a .fmt file is being used, characters that might appear in a file +% name cannot be active until we have parsed the command line. +% So turn them off again, and have \everyjob (or @setfilename) turn them on. +% \otherifyactive is called near the end of this file. +\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} + +\catcode`\@=0 + +% \rawbackslashxx output one backslash character in current font +\global\chardef\rawbackslashxx=`\\ +%{\catcode`\\=\other +%@gdef@rawbackslashxx{\}} + +% \rawbackslash redefines \ as input to do \rawbackslashxx. +{\catcode`\\=\active +@gdef@rawbackslash{@let\=@rawbackslashxx }} + +% \normalbackslash outputs one backslash in fixed width font. +\def\normalbackslash{{\tt\rawbackslashxx}} + +% Say @foo, not \foo, in error messages. +\escapechar=`\@ + +% \catcode 17=0 % Define control-q +\catcode`\\=\active + +% Used sometimes to turn off (effectively) the active characters +% even after parsing them. +@def@turnoffactive{@let"=@normaldoublequote +@let\=@realbackslash +@let~=@normaltilde +@let^=@normalcaret +@let_=@normalunderscore +@let|=@normalverticalbar +@let<=@normalless +@let>=@normalgreater +@let+=@normalplus} + +@def@normalturnoffactive{@let"=@normaldoublequote +@let\=@normalbackslash +@let~=@normaltilde +@let^=@normalcaret +@let_=@normalunderscore +@let|=@normalverticalbar +@let<=@normalless +@let>=@normalgreater +@let+=@normalplus} + +% Make _ and + \other characters, temporarily. +% This is canceled by @fixbackslash. +@otherifyactive + +% If a .fmt file is being used, we don't want the `\input texinfo' to show up. +% That is what \eatinput is for; after that, the `\' should revert to printing +% a backslash. +% +@gdef@eatinput input texinfo{@fixbackslash} +@global@let\ = @eatinput + +% On the other hand, perhaps the file did not have a `\input texinfo'. Then +% the first `\{ in the file would cause an error. This macro tries to fix +% that, assuming it is called before the first `\' could plausibly occur. +% Also back turn on active characters that might appear in the input +% file name, in case not using a pre-dumped format. +% +@gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi + @catcode`+=@active @catcode`@_=@active} + +%% These look ok in all fonts, so just make them not special. The @rm below +%% makes sure that the current font starts out as the newly loaded cmr10 +@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other + +@textfonts +@rm + +@c Local variables: +@c page-delimiter: "^\\\\message" +@c End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/doc/version.texi b/debian/gettext-kde/gettext-kde-0.10.35/doc/version.texi new file mode 100644 index 00000000..b4f13794 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/doc/version.texi @@ -0,0 +1,3 @@ +@set UPDATED 30 April 1998 +@set EDITION 0.10.35 +@set VERSION 0.10.35 diff --git a/debian/gettext-kde/gettext-kde-0.10.35/install-sh b/debian/gettext-kde/gettext-kde-0.10.35/install-sh new file mode 100755 index 00000000..e8436696 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/install-sh @@ -0,0 +1,250 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/ChangeLog b/debian/gettext-kde/gettext-kde-0.10.35/intl/ChangeLog new file mode 100644 index 00000000..19895015 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/ChangeLog @@ -0,0 +1,1086 @@ +1998-04-29 Ulrich Drepper <[email protected]> + + * intl/localealias.c (read_alias_file): Use unsigned char for + local variables. Remove unused variable tp. + * intl/l10nflist.c (_nl_normalize_codeset): Use unsigned char * + for type of codeset. For loosing Solaris systems. + * intl/loadinfo.h: Adapt prototype of _nl_normalize_codeset. + * intl/bindtextdom.c (BINDTEXTDOMAIN): Don't define local variable + len if not needed. + Patches by Jim Meyering. + +1998-04-28 Ulrich Drepper <[email protected]> + + * loadmsgcat.c (_nl_load_domain): Don't assign the element use_mmap if + mmap is not supported. + + * hash-string.h: Don't include <values.h>. + +1998-04-27 Ulrich Drepper <[email protected]> + + * textdomain.c: Use strdup is available. + + * localealias.c: Define HAVE_MEMPCPY so that we can use this + function. Define and use semapahores to protect modfication of + global objects when compiling for glibc. Add code to allow + freeing alias table. + + * l10nflist.c: Don't assume stpcpy not being a macro. + + * gettextP.h: Define internal_function macri if not already done. + Use glibc byte-swap macros instead of defining SWAP when compiled + for glibc. + (struct loaded_domain): Add elements to allow unloading. + + * Makefile.in (distclean): Don't remove libintl.h here. + + * bindtextdomain.c: Carry over changes from glibc. Use strdup if + available. + + * dcgettext.c: Don't assume stpcpy not being a macro. Mark internal + functions. Add memory freeing code for glibc. + + * dgettext.c: Update copyright. + + * explodename.c: Include stdlib.h and string.h only if they exist. + Use strings.h eventually. + + * finddomain.c: Mark internal functions. Use strdup if available. + Add memory freeing code for glibc. + +1997-10-10 20:00 Ulrich Drepper <[email protected]> + + * libgettext.h: Fix dummy textdomain and bindtextdomain macros. + They should return reasonable values. + Reported by Tom Tromey <[email protected]>. + +1997-09-16 03:33 Ulrich Drepper <[email protected]> + + * libgettext.h: Define PARAMS also to `args' if __cplusplus is defined. + * intlh.inst.in: Likewise. + Reported by Jean-Marc Lasgouttes <[email protected]>. + + * libintl.glibc: Update from current glibc version. + +1997-09-06 02:10 Ulrich Drepper <[email protected]> + + * intlh.inst.in: Reformat copyright. + +1997-08-19 15:22 Ulrich Drepper <[email protected]> + + * dcgettext.c (DCGETTEXT): Remove wrong comment. + +1997-08-16 00:13 Ulrich Drepper <[email protected]> + + * Makefile.in (install-data): Don't change directory to install. + +1997-08-01 14:30 Ulrich Drepper <[email protected]> + + * cat-compat.c: Fix copyright. + + * localealias.c: Don't define strchr unless !HAVE_STRCHR. + + * loadmsgcat.c: Update copyright. Fix typos. + + * l10nflist.c: Don't define strchr unless !HAVE_STRCHR. + (_nl_make_l10nflist): Handle sponsor and revision correctly. + + * gettext.c: Update copyright. + * gettext.h: Likewise. + * hash-string.h: Likewise. + + * finddomain.c: Remoave dead code. Define strchr only if + !HAVE_STRCHR. + + * explodename.c: Include <sys/types.h>. + + * explodename.c: Reformat copyright text. + (_nl_explode_name): Fix typo. + + * dcgettext.c: Define and use __set_errno. + (guess_category_value): Don't use setlocale if HAVE_LC_MESSAGES is + not defined. + + * bindtextdom.c: Pretty printing. + +1997-05-01 02:25 Ulrich Drepper <[email protected]> + + * dcgettext.c (guess_category_value): Don't depend on + HAVE_LC_MESSAGES. We don't need the macro here. + Patch by Bruno Haible <[email protected]>. + + * cat-compat.c (textdomain): DoN't refer to HAVE_SETLOCALE_NULL + macro. Instead use HAVE_LOCALE_NULL and define it when using + glibc, as in dcgettext.c. + Patch by Bruno Haible <[email protected]>. + + * Makefile.in (CPPFLAGS): New variable. Reported by Franc,ois + Pinard. + +Mon Mar 10 06:51:17 1997 Ulrich Drepper <[email protected]> + + * Makefile.in: Implement handling of libtool. + + * gettextP.h: Change data structures for use of generic lowlevel + i18n file handling. + +Wed Dec 4 20:21:18 1996 Ulrich Drepper <[email protected]> + + * textdomain.c: Put parentheses around arguments of memcpy macro + definition. + * localealias.c: Likewise. + * l10nflist.c: Likewise. + * finddomain.c: Likewise. + * bindtextdom.c: Likewise. + Reported by Thomas Esken. + +Mon Nov 25 22:57:51 1996 Ulrich Drepper <[email protected]> + + * textdomain.c: Move definition of `memcpy` macro to right + position. + +Fri Nov 22 04:01:58 1996 Ulrich Drepper <[email protected]> + + * finddomain.c [!HAVE_STRING_H && !_LIBC]: Define memcpy using + bcopy if not already defined. Reported by Thomas Esken. + * bindtextdom.c: Likewise. + * l10nflist.c: Likewise. + * localealias.c: Likewise. + * textdomain.c: Likewise. + +Tue Oct 29 11:10:27 1996 Ulrich Drepper <[email protected]> + + * Makefile.in (libdir): Change to use exec_prefix instead of + prefix. Reported by Knut-H�vardAksnes <[email protected]>. + +Sat Aug 31 03:07:09 1996 Ulrich Drepper <[email protected]> + + * l10nflist.c (_nl_normalize_codeset): We convert to lower case, + so don't prepend uppercase `ISO' for only numeric arg. + +Fri Jul 19 00:15:46 1996 Ulrich Drepper <[email protected]> + + * l10nflist.c: Move inclusion of argz.h, ctype.h, stdlib.h after + definition of _GNU_SOURCE. Patch by Roland McGrath. + + * Makefile.in (uninstall): Fix another bug with `for' loop and + empty arguments. Patch by Jim Meyering. Correct name os + uninstalled files: no intl- prefix anymore. + + * Makefile.in (install-data): Again work around shells which + cannot handle mpty for list. Reported by Jim Meyering. + +Sat Jul 13 18:11:35 1996 Ulrich Drepper <[email protected]> + + * Makefile.in (install): Split goal. Now depend on install-exec + and install-data. + (install-exec, install-data): New goals. Created from former + install goal. + Reported by Karl Berry. + +Sat Jun 22 04:58:14 1996 Ulrich Drepper <[email protected]> + + * Makefile.in (MKINSTALLDIRS): New variable. Path to + mkinstalldirs script. + (install): use MKINSTALLDIRS variable or if the script is not present + try to find it in the $top_scrdir). + +Wed Jun 19 02:56:56 1996 Ulrich Drepper <[email protected]> + + * l10nflist.c: Linux libc *partly* includes the argz_* functions. + Grr. Work around by renaming the static version and use macros + for renaming. + +Tue Jun 18 20:11:17 1996 Ulrich Drepper <[email protected]> + + * l10nflist.c: Correct presence test macros of __argz_* functions. + + * l10nflist.c: Include <argz.h> based on test of it instead when + __argz_* functions are available. + Reported by Andreas Schwab. + +Thu Jun 13 15:17:44 1996 Ulrich Drepper <[email protected]> + + * explodename.c, l10nflist.c: Define NULL for dumb systems. + +Tue Jun 11 17:05:13 1996 Ulrich Drepper <[email protected]> + + * intlh.inst.in, libgettext.h (dcgettext): Rename local variable + result to __result to prevent name clash. + + * l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to + get prototype for stpcpy and strcasecmp. + + * intlh.inst.in, libgettext.h: Move declaration of + `_nl_msg_cat_cntr' outside __extension__ block to prevent warning + from gcc's -Wnested-extern option. + +Fri Jun 7 01:58:00 1996 Ulrich Drepper <[email protected]> + + * Makefile.in (install): Remove comment. + +Thu Jun 6 17:28:17 1996 Ulrich Drepper <[email protected]> + + * Makefile.in (install): Work around for another Buglix stupidity. + Always use an `else' close for `if's. Reported by Nelson Beebe. + + * Makefile.in (intlh.inst): Correct typo in phony rule. + Reported by Nelson Beebe. + +Thu Jun 6 01:49:52 1996 Ulrich Drepper <[email protected]> + + * dcgettext.c (read_alias_file): Rename variable alloca_list to + block_list as the macro calls assume. + Patch by Eric Backus. + + * localealias.c [!HAVE_ALLOCA]: Define alloca as macro using + malloc. + (read_alias_file): Rename varriabe alloca_list to block_list as the + macro calls assume. + Patch by Eric Backus. + + * l10nflist.c: Correct conditional for <argz.h> inclusion. + Reported by Roland McGrath. + + * Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not + all-@USE_NLS@. + + * Makefile.in (install): intlh.inst comes from local dir, not + $(srcdir). + + * Makefile.in (intlh.inst): Special handling of this goal. If + used in gettext, this is really a rul to construct this file. If + used in any other package it is defined as a .PHONY rule with + empty body. + + * finddomain.c: Extract locale file information handling into + l10nfile.c. Rename local stpcpy__ function to stpcpy. + + * dcgettext.c (stpcpy): Add local definition. + + * l10nflist.c: Solve some portability problems. Patches partly by + Thomas Esken. Add local definition of stpcpy. + +Tue Jun 4 02:47:49 1996 Ulrich Drepper <[email protected]> + + * intlh.inst.in: Don't depend including <locale.h> on + HAVE_LOCALE_H. Instead configure must rewrite this fiile + depending on the result of the configure run. + + * Makefile.in (install): libintl.inst is now called intlh.inst. + Add rules for updating intlh.inst from intlh.inst.in. + + * libintl.inst: Renamed to intlh.inst.in. + + * localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1 + because gcc has __buitlin_alloca. + Reported by Roland McGrath. + +Mon Jun 3 00:32:16 1996 Ulrich Drepper <[email protected]> + + * Makefile.in (installcheck): New goal to fulfill needs of + automake's distcheck. + + * Makefile.in (install): Reorder commands so that VERSION is + found. + + * Makefile.in (gettextsrcdir): Now use subdirectory intl/ in + @datadir@/gettext. + (COMSRCS): Add l10nfile.c. + (OBJECTS): Add l10nfile.o. + (DISTFILES): Rename to DISTFILE.normal. Remove $(DISTFILES.common). + (DISTFILE.gettext): Remove $(DISTFILES.common). + (all-gettext): Remove goal. + (install): If $(PACKAGE) = gettext install, otherwose do nothing. No + package but gettext itself should install libintl.h + headers. + (dist): Extend goal to work for gettext, too. + (dist-gettext): Remove goal. + + * dcgettext.c [!HAVE_ALLOCA]: Define macro alloca by using malloc. + +Sun Jun 2 17:33:06 1996 Ulrich Drepper <[email protected]> + + * loadmsgcat.c (_nl_load_domain): Parameter is now comes from + find_l10nfile. + +Sat Jun 1 02:23:03 1996 Ulrich Drepper <[email protected]> + + * l10nflist.c (__argz_next): Add definition. + + * dcgettext.c [!HAVE_ALLOCA]: Add code for handling missing alloca + code. Use new l10nfile handling. + + * localealias.c [!HAVE_ALLOCA]: Add code for handling missing + alloca code. + + * l10nflist.c: Initial revision. + +Tue Apr 2 18:51:18 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (all-gettext): New goal. Same as all-yes. + +Thu Mar 28 23:01:22 1996 Karl Eichwalder <[email protected]> + + * Makefile.in (gettextsrcdir): Define using @datadir@. + +Tue Mar 26 12:39:14 1996 Ulrich Drepper <drepper@myware> + + * finddomain.c: Include <ctype.h>. Reported by Roland McGrath. + +Sat Mar 23 02:00:35 1996 Ulrich Drepper <drepper@myware> + + * finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing + with external declaration. + +Sat Mar 2 00:47:09 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (all-no): Rename from all_no. + +Sat Feb 17 00:25:59 1996 Ulrich Drepper <drepper@myware> + + * gettextP.h [loaded_domain]: Array `successor' must now contain up + to 63 elements (because of codeset name normalization). + + * finddomain.c: Implement codeset name normalization. + +Thu Feb 15 04:39:09 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (all): Define to `all-@USE_NLS@'. + (all-yes, all_no): New goals. `all-no' is noop, `all-yes' + is former all. + +Mon Jan 15 21:46:01 1996 Howard Gayle <[email protected]> + + * localealias.c (alias_compare): Increment string pointers in loop + of strcasecmp replacement. + +Fri Dec 29 21:16:34 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (install-src): Who commented this goal out ? :-) + +Fri Dec 29 15:08:16 1995 Ulrich Drepper <drepper@myware> + + * dcgettext.c (DCGETTEXT): Save `errno'. Failing system calls + should not effect it because a missing catalog is no error. + Reported by Harald K<o:>nig <[email protected]>. + +Tue Dec 19 22:09:13 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (Makefile): Explicitly use $(SHELL) for running + shell scripts. + +Fri Dec 15 17:34:59 1995 Andreas Schwab <[email protected]> + + * Makefile.in (install-src): Only install library and header when + we use the own implementation. Don't do it when using the + system's gettext or catgets functions. + + * dcgettext.c (find_msg): Must not swap domain->hash_size here. + +Sat Dec 9 16:24:37 1995 Ulrich Drepper <drepper@myware> + + * localealias.c, libintl.inst, libgettext.h, hash-string.h, + gettextP.h, finddomain.c, dcgettext.c, cat-compat.c: + Use PARAMS instead of __P. Suggested by Roland McGrath. + +Tue Dec 5 11:39:14 1995 Larry Schwimmer <[email protected]> + + * libgettext.h: Use `#if !defined (_LIBINTL_H)' instead of `#if + !_LIBINTL_H' because Solaris defines _LIBINTL_H as empty. + +Mon Dec 4 15:42:07 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (install-src): + Install libintl.inst instead of libintl.h.install. + +Sat Dec 2 22:51:38 1995 Marcus Daniels <[email protected]> + + * cat-compat.c (textdomain): + Reverse order in which files are tried you load. First + try local file, when this failed absolute path. + +Wed Nov 29 02:03:53 1995 Nelson H. F. Beebe <[email protected]> + + * cat-compat.c (bindtextdomain): Add missing { }. + +Sun Nov 26 18:21:41 1995 Ulrich Drepper <drepper@myware> + + * libintl.inst: Add missing __P definition. Reported by Nelson Beebe. + + * Makefile.in: + Add dummy `all' and `dvi' goals. Reported by Tom Tromey. + +Sat Nov 25 16:12:01 1995 Franc,ois Pinard <[email protected]> + + * hash-string.h: Capitalize arguments of macros. + +Sat Nov 25 12:01:36 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Prevent files names longer than 13 + characters. libintl.h.glibc->libintl.glibc, + libintl.h.install->libintl.inst. Reported by Joshua R. Poulson. + +Sat Nov 25 11:31:12 1995 Eric Backus <[email protected]> + + * dcgettext.c: Fix bug in preprocessor conditionals. + +Sat Nov 25 02:35:27 1995 Nelson H. F. Beebe <[email protected]> + + * libgettext.h: Solaris cc does not understand + #if !SYMBOL1 && !SYMBOL2. Sad but true. + +Thu Nov 23 16:22:14 1995 Ulrich Drepper <drepper@myware> + + * hash-string.h (hash_string): + Fix for machine with >32 bit `unsigned long's. + + * dcgettext.c (DCGETTEXT): + Fix horrible bug in loop for alternative translation. + +Thu Nov 23 01:45:29 1995 Ulrich Drepper <drepper@myware> + + * po2tbl.sed.in, linux-msg.sed, xopen-msg.sed: + Some further simplifications in message number generation. + +Mon Nov 20 21:08:43 1995 Ulrich Drepper <drepper@myware> + + * libintl.h.glibc: Use __const instead of const in prototypes. + + * Makefile.in (install-src): + Install libintl.h.install instead of libintl.h. This + is a stripped-down version. Suggested by Peter Miller. + + * libintl.h.install, libintl.h.glibc: Initial revision. + + * localealias.c (_nl_expand_alias, read_alias_file): + Protect prototypes in type casts by __P. + +Tue Nov 14 16:43:58 1995 Ulrich Drepper <drepper@myware> + + * hash-string.h: Correct prototype for hash_string. + +Sun Nov 12 12:42:30 1995 Ulrich Drepper <drepper@myware> + + * hash-string.h (hash_string): Add prototype. + + * gettextP.h: Fix copyright. + (SWAP): Add prototype. + +Wed Nov 8 22:56:33 1995 Ulrich Drepper <drepper@myware> + + * localealias.c (read_alias_file): Forgot sizeof. + Avoid calling *printf function. This introduces a big overhead. + Patch by Roland McGrath. + +Tue Nov 7 14:21:08 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c, cat-compat.c: Wrong indentation in #if for stpcpy. + + * finddomain.c (stpcpy): + Define substitution function local. The macro was to flaky. + + * cat-compat.c: Fix typo. + + * xopen-msg.sed, linux-msg.sed: + While bringing message number to right place only accept digits. + + * linux-msg.sed, xopen-msg.sed: Now that the counter does not have + leading 0s we don't need to remove them. Reported by Marcus + Daniels. + + * Makefile.in (../po/cat-id-tbl.o): Use $(top_srdir) in + dependency. Reported by Marcus Daniels. + + * cat-compat.c: (stpcpy) [!_LIBC && !HAVE_STPCPY]: Define replacement. + Generally cleanup using #if instead of #ifndef. + + * Makefile.in: Correct typos in comment. By Franc,ois Pinard. + +Mon Nov 6 00:27:02 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (install-src): Don't install libintl.h and libintl.a + if we use an available gettext implementation. + +Sun Nov 5 22:02:08 1995 Ulrich Drepper <drepper@myware> + + * libgettext.h: Fix typo: HAVE_CATGETTS -> HAVE_CATGETS. Reported + by Franc,ois Pinard. + + * libgettext.h: Use #if instead of #ifdef/#ifndef. + + * finddomain.c: + Comments describing what has to be done should start with FIXME. + +Sun Nov 5 19:38:01 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Split. Use DISTFILES with normal meaning. + DISTFILES.common names the files common to both dist goals. + DISTFILES.gettext are the files only distributed in GNU gettext. + +Sun Nov 5 17:32:54 1995 Ulrich Drepper <drepper@myware> + + * dcgettext.c (DCGETTEXT): Correct searching in derived locales. + This was necessary since a change in _nl_find_msg several weeks + ago. I really don't know this is still not fixed. + +Sun Nov 5 12:43:12 1995 Ulrich Drepper <drepper@myware> + + * loadmsgcat.c (_nl_load_domain): Test for FILENAME == NULL. This + might mark a special condition. + + * finddomain.c (make_entry_rec): Don't make illegal entry as decided. + + * Makefile.in (dist): Suppress error message when ln failed. + Get files from $(srcdir) explicitly. + + * libgettext.h (gettext_const): Rename to gettext_noop. + +Fri Nov 3 07:36:50 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c (make_entry_rec): + Protect against wrong locale names by testing mask. + + * libgettext.h (gettext_const): Add macro definition. + Capitalize macro arguments. + +Thu Nov 2 23:15:51 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c (_nl_find_domain): + Test for pointer != NULL before accessing value. + Reported by Tom Tromey. + + * gettext.c (NULL): + Define as (void*)0 instad of 0. Reported by Franc,ois Pinard. + +Mon Oct 30 21:28:52 1995 Ulrich Drepper <drepper@myware> + + * po2tbl.sed.in: Serious typo bug fixed by Jim Meyering. + +Sat Oct 28 23:20:47 1995 Ulrich Drepper <drepper@myware> + + * libgettext.h: Disable dcgettext optimization for Solaris 2.3. + + * localealias.c (alias_compare): + Peter Miller reported that tolower in some systems is + even dumber than I thought. Protect call by `isupper'. + +Fri Oct 27 22:22:51 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (libdir, includedir): New variables. + (install-src): Install libintl.a and libintl.h in correct dirs. + +Fri Oct 27 22:07:29 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (SOURCES): Fix typo: intrl.compat.c -> intl-compat.c. + + * po2tbl.sed.in: Patch for buggy SEDs by Christian von Roques. + + * localealias.c: + Fix typo and superflous test. Reported by Christian von Roques. + +Fri Oct 6 11:52:05 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c (_nl_find_domain): + Correct some remainder from the pre-CEN syntax. Now + we don't have a constant number of successors anymore. + +Wed Sep 27 21:41:13 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Add libintl.h.glibc. + + * Makefile.in (dist-libc): Add goal for packing sources for glibc. + (COMSRCS, COMHDRS): Splitted to separate sources shared with glibc. + + * loadmsgcat.c: Forget to continue #if line. + + * localealias.c: + [_LIBC]: Rename strcasecmp to __strcasecmp to keep ANSI C name + space clean. + + * dcgettext.c, finddomain.c: Better comment to last change. + + * loadmsgcat.c: + [_LIBC]: Rename fstat, open, close, read, mmap, and munmap to + __fstat, __open, __close, __read, __mmap, and __munmap resp + to keep ANSI C name space clean. + + * finddomain.c: + [_LIBC]: Rename stpcpy to __stpcpy to keep ANSI C name space clean. + + * dcgettext.c: + [_LIBC]: Rename getced and stpcpy to __getcwd and __stpcpy resp to + keep ANSI C name space clean. + + * libgettext.h: + Include sys/types.h for those old SysV systems out there. + Reported by Francesco Potorti`. + + * loadmsgcat.c (use_mmap): Define if compiled for glibc. + + * bindtextdom.c: Include all those standard headers + unconditionally if _LIBC is defined. + + * finddomain.c: Fix 2 times defiend -> defined. + + * textdomain.c: Include libintl.h instead of libgettext.h when + compiling for glibc. Include all those standard headers + unconditionally if _LIBC is defined. + + * localealias.c, loadmsgcat.c: Prepare to be compiled in glibc. + + * gettext.c: + Include libintl.h instead of libgettext.h when compiling for glibc. + Get NULL from stddef.h if we compile for glibc. + + * finddomain.c: Include libintl.h instead of libgettext.h when + compiling for glibc. Include all those standard headers + unconditionally if _LIBC is defined. + + * dcgettext.c: Include all those standard headers unconditionally + if _LIBC is defined. + + * dgettext.c: If compiled in glibc include libintl.h instead of + libgettext.h. + (locale.h): Don't rely on HAVE_LOCALE_H when compiling for glibc. + + * dcgettext.c: If compiled in glibc include libintl.h instead of + libgettext.h. + (getcwd): Don't rely on HAVE_GETCWD when compiling for glibc. + + * bindtextdom.c: + If compiled in glibc include libintl.h instead of libgettext.h. + +Mon Sep 25 22:23:06 1995 Ulrich Drepper <drepper@myware> + + * localealias.c (_nl_expand_alias): Don't call bsearch if NMAP <= 0. + Reported by Marcus Daniels. + + * cat-compat.c (bindtextdomain): + String used in putenv must not be recycled. + Reported by Marcus Daniels. + + * libgettext.h (__USE_GNU_GETTEXT): + Additional symbol to signal that we use GNU gettext + library. + + * cat-compat.c (bindtextdomain): + Fix bug with the strange stpcpy replacement. + Reported by Nelson Beebe. + +Sat Sep 23 08:23:51 1995 Ulrich Drepper <drepper@myware> + + * cat-compat.c: Include <string.h> for stpcpy prototype. + + * localealias.c (read_alias_file): + While expand strdup code temporary variable `cp' hided + higher level variable with same name. Rename to `tp'. + + * textdomain.c (textdomain): + Avoid warning by using temporary variable in strdup code. + + * finddomain.c (_nl_find_domain): Remove unused variable `application'. + +Thu Sep 21 15:51:44 1995 Ulrich Drepper <drepper@myware> + + * localealias.c (alias_compare): + Use strcasecmp() only if available. Else use + implementation in place. + + * intl-compat.c: + Wrapper functions now call *__ functions instead of __*. + + * libgettext.h: Declare prototypes for *__ functions instead for __*. + + * cat-compat.c, loadmsgcat.c: + Don't use xmalloc, xstrdup, and stpcpy. These functions are not part + of the standard libc and so prevent libintl.a from being used + standalone. + + * bindtextdom.c: + Don't use xmalloc, xstrdup, and stpcpy. These functions are not part + of the standard libc and so prevent libintl.a from being used + standalone. + Rename to bindtextdomain__ if not used in GNU C Library. + + * dgettext.c: + Rename function to dgettext__ if not used in GNU C Library. + + * gettext.c: + Don't use xmalloc, xstrdup, and stpcpy. These functions are not part + of the standard libc and so prevent libintl.a from being used + standalone. + Functions now called gettext__ if not used in GNU C Library. + + * dcgettext.c, localealias.c, textdomain.c, finddomain.c: + Don't use xmalloc, xstrdup, and stpcpy. These functions are not part + of the standard libc and so prevent libintl.a from being used + standalone. + +Sun Sep 17 23:14:49 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c: Correct some bugs in handling of CEN standard + locale definitions. + +Thu Sep 7 01:49:28 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c: Implement CEN syntax. + + * gettextP.h (loaded_domain): Extend number of successors to 31. + +Sat Aug 19 19:25:29 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (aliaspath): Remove path to X11 locale dir. + + * Makefile.in: Make install-src depend on install. This helps + gettext to install the sources and other packages can use the + install goal. + +Sat Aug 19 15:19:33 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (uninstall): Remove stuff installed by install-src. + +Tue Aug 15 13:13:53 1995 Ulrich Drepper <drepper@myware> + + * VERSION.in: Initial revision. + + * Makefile.in (DISTFILES): + Add VERSION file. This is not necessary for gettext, but + for other packages using this library. + +Tue Aug 15 06:16:44 1995 Ulrich Drepper <drepper@myware> + + * gettextP.h (_nl_find_domain): + New prototype after changing search strategy. + + * finddomain.c (_nl_find_domain): + We now try only to find a specified catalog. Fall back to other + catalogs listed in the locale list is now done in __dcgettext. + + * dcgettext.c (__dcgettext): + Now we provide message fall back even to different languages. + I.e. if a message is not available in one language all the other + in the locale list a tried. Formerly fall back was only possible + within one language. Implemented by moving one loop from + _nl_find_domain to here. + +Mon Aug 14 23:45:50 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (gettextsrcdir): + Directory where source of GNU gettext library are made + available. + (INSTALL, INSTALL_DATA): Programs used for installing sources. + (gettext-src): New. Rule to install GNU gettext sources for use in + gettextize shell script. + +Sun Aug 13 14:40:48 1995 Ulrich Drepper <drepper@myware> + + * loadmsgcat.c (_nl_load_domain): + Use mmap for loading only when munmap function is + also available. + + * Makefile.in (install): Depend on `all' goal. + +Wed Aug 9 11:04:33 1995 Ulrich Drepper <drepper@myware> + + * localealias.c (read_alias_file): + Do not overwrite '\n' when terminating alias value string. + + * localealias.c (read_alias_file): + Handle long lines. Ignore the rest not fitting in + the buffer after the initial `fgets' call. + +Wed Aug 9 00:54:29 1995 Ulrich Drepper <drepper@myware> + + * gettextP.h (_nl_load_domain): + Add prototype, replacing prototype for _nl_load_msg_cat. + + * finddomain.c (_nl_find_domain): + Remove unneeded variable filename and filename_len. + (expand_alias): Remove prototype because functions does not + exist anymore. + + * localealias.c (read_alias_file): + Change type of fname_len parameter to int. + (xmalloc): Add prototype. + + * loadmsgcat.c: Better prototypes for xmalloc. + +Tue Aug 8 22:30:39 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c (_nl_find_domain): + Allow alias name to be constructed from the four components. + + * Makefile.in (aliaspath): New variable. Set to preliminary value. + (SOURCES): Add localealias.c. + (OBJECTS): Add localealias.o. + + * gettextP.h: Add prototype for _nl_expand_alias. + + * finddomain.c: Aliasing handled in intl/localealias.c. + + * localealias.c: Aliasing for locale names. + + * bindtextdom.c: Better prototypes for xmalloc and xstrdup. + +Mon Aug 7 23:47:42 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): gettext.perl is now found in misc/. + + * cat-compat.c (bindtextdomain): + Correct implementation. dirname parameter was not used. + Reported by Marcus Daniels. + + * gettextP.h (loaded_domain): + New fields `successor' and `decided' for oo, lazy + message handling implementation. + + * dcgettext.c: + Adopt for oo, lazy message handliing. + Now we can inherit translations from less specific locales. + (find_msg): New function. + + * loadmsgcat.c, finddomain.c: + Complete rewrite. Implement oo, lazy message handling :-). + We now have an additional environment variable `LANGUAGE' with + a higher priority than LC_ALL for the LC_MESSAGE locale. + Here we can set a colon separated list of specifications each + of the form `language[_territory[.codeset]][@modifier]'. + +Sat Aug 5 09:55:42 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c (unistd.h): + Include to get _PC_PATH_MAX defined on system having it. + +Fri Aug 4 22:42:00 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c (stpcpy): Include prototype. + + * Makefile.in (dist): Remove `copying instead' message. + +Wed Aug 2 18:52:03 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (ID, TAGS): Do not use $^. + +Tue Aug 1 20:07:11 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (TAGS, ID): Use $^ as command argument. + (TAGS): Give etags -o option t write to current directory, + not $(srcdir). + (ID): Use $(srcdir) instead os $(top_srcdir)/src. + (distclean): Remove ID. + +Sun Jul 30 11:51:46 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (gnulocaledir): + New variable, always using share/ for data directory. + (DEFS): Add GNULOCALEDIR, used in finddomain.c. + + * finddomain.c (_nl_default_dirname): + Set to GNULOCALEDIR, because it always has to point + to the directory where GNU gettext Library writes it to. + + * intl-compat.c (textdomain, bindtextdomain): + Undefine macros before function definition. + +Sat Jul 22 01:10:02 1995 Ulrich Drepper <drepper@myware> + + * libgettext.h (_LIBINTL_H): + Protect definition in case where this file is included as + libgettext.h on Solaris machines. Add comment about this. + +Wed Jul 19 02:36:42 1995 Ulrich Drepper <drepper@myware> + + * intl-compat.c (textdomain): Correct typo. + +Wed Jul 19 01:51:35 1995 Ulrich Drepper <drepper@myware> + + * dcgettext.c (dcgettext): Function now called __dcgettext. + + * dgettext.c (dgettext): Now called __dgettext and calls + __dcgettext. + + * gettext.c (gettext): + Function now called __gettext and calls __dgettext. + + * textdomain.c (textdomain): Function now called __textdomain. + + * bindtextdom.c (bindtextdomain): Function now called + __bindtextdomain. + + * intl-compat.c: Initial revision. + + * Makefile.in (SOURCES): Add intl-compat.c. + (OBJECTS): We always compile the GNU gettext library functions. + OBJECTS contains all objects but cat-compat.o, ../po/cat-if-tbl.o, + and intl-compat.o. + (GETTOBJS): Contains now only intl-compat.o. + + * libgettext.h: + Re-include protection matches dualistic character of libgettext.h. + For all functions in GNU gettext library define __ counter part. + + * finddomain.c (strchr): Define as index if not found in C library. + (_nl_find_domain): For relative paths paste / in between. + +Tue Jul 18 16:37:45 1995 Ulrich Drepper <drepper@myware> + + * loadmsgcat.c, finddomain.c: Add inclusion of sys/types.h. + + * xopen-msg.sed: Fix bug with `msgstr ""' lines. + A little bit better comments. + +Tue Jul 18 01:18:27 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: + po-mode.el, makelinks, combine-sh are now found in ../misc. + + * po-mode.el, makelinks, combine-sh, elisp-comp: + Moved to ../misc/. + + * libgettext.h, gettextP.h, gettext.h: Uniform test for __STDC__. + +Sun Jul 16 22:33:02 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (INSTALL, INSTALL_DATA): New variables. + (install-data, uninstall): Install/uninstall .elc file. + + * po-mode.el (Installation comment): + Add .pox as possible extension of .po files. + +Sun Jul 16 13:23:27 1995 Ulrich Drepper <drepper@myware> + + * elisp-comp: Complete new version by Franc,ois: This does not + fail when not compiling in the source directory. + +Sun Jul 16 00:12:17 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (../po/cat-id-tbl.o): + Use $(MAKE) instead of make for recursive make. + + * Makefile.in (.el.elc): Use $(SHELL) instead of /bin/sh. + (install-exec): Add missing dummy goal. + (install-data, uninstall): @ in multi-line shell command at + beginning, not in front of echo. Reported by Eric Backus. + +Sat Jul 15 00:21:28 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): + Rename libgettext.perl to gettext.perl to fit in 14 chars + file systems. + + * gettext.perl: + Rename to gettext.perl to fit in 14 chars file systems. + +Thu Jul 13 23:17:20 1995 Ulrich Drepper <drepper@myware> + + * cat-compat.c: If !STDC_HEADERS try to include malloc.h. + +Thu Jul 13 20:55:02 1995 Ulrich Drepper <drepper@myware> + + * po2tbl.sed.in: Pretty printing. + + * linux-msg.sed, xopen-msg.sed: + Correct bugs with handling substitute flags in branches. + + * hash-string.h (hash_string): + Old K&R compilers don't under stand `unsigned char'. + + * gettext.h (nls_uint32): + Some old K&R compilers (eg HP) don't understand `unsigned int'. + + * cat-compat.c (msg_to_cat_id): De-ANSI-fy prototypes. + +Thu Jul 13 01:34:33 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (ELCFILES): New variable. + (DISTFILES): Add elisp-comp. + Add implicit rule for .el -> .elc compilation. + (install-data): install $ELCFILES + (clean): renamed po-to-tbl and po-to-msg to po2tbl and po2msg resp. + + * elisp-comp: Initial revision + +Wed Jul 12 16:14:52 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: + cat-id-tbl.c is now found in po/. This enables us to use an identical + intl/ directory in all packages. + + * dcgettext.c (dcgettext): hashing does not work for table size <= 2. + + * textdomain.c: fix typo (#if def -> #if defined) + +Tue Jul 11 18:44:43 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (stamp-cat-id): use top_srcdir to address source files + (DISTFILES,distclean): move tupdate.perl to src/ + + * po-to-tbl.sed.in: + add additional jump to clear change flag to recognize multiline strings + +Tue Jul 11 01:32:50 1995 Ulrich Drepper <drepper@myware> + + * textdomain.c: Protect inclusion of stdlib.h and string.h. + + * loadmsgcat.c: Protect inclusion of stdlib.h. + + * libgettext.h: Protect inclusion of locale.h. + Allow use in C++ programs. + Define NULL is not happened already. + + * Makefile.in (DISTFILES): ship po-to-tbl.sed.in instead of + po-to-tbl.sed. + (distclean): remove po-to-tbl.sed and tupdate.perl. + + * tupdate.perl.in: Substitute Perl path even in exec line. + Don't include entries without translation from old .po file. + +Tue Jul 4 00:41:51 1995 Ulrich Drepper <drepper@myware> + + * tupdate.perl.in: use "Updated: " in msgid "". + + * cat-compat.c: Fix typo (LOCALDIR -> LOCALEDIR). + Define getenv if !__STDC__. + + * bindtextdom.c: Protect stdlib.h and string.h inclusion. + Define free if !__STDC__. + + * finddomain.c: Change DEF_MSG_DOM_DIR to LOCALEDIR. + Define free if !__STDC__. + + * cat-compat.c: Change DEF_MSG_DOM_DIR to LOCALEDIR. + +Mon Jul 3 23:56:30 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: Use LOCALEDIR instead of DEF_MSG_DOM_DIR. + Remove unneeded $(srcdir) from Makefile.in dependency. + + * makelinks: Add copyright and short description. + + * po-mode.el: Last version for 0.7. + + * tupdate.perl.in: Fix die message. + + * dcgettext.c: Protect include of string.h. + + * gettext.c: Protect include of stdlib.h and further tries to get NULL. + + * finddomain.c: Some corrections in includes. + + * Makefile.in (INCLUDES): Prune list correct path to Makefile.in. + + * po-to-tbl.sed: Adopt for new .po file format. + + * linux-msg.sed, xopen-msg.sed: Adopt for new .po file format. + +Sun Jul 2 23:55:03 1995 Ulrich Drepper <drepper@myware> + + * tupdate.perl.in: Complete rewrite for new .po file format. + +Sun Jul 2 02:06:50 1995 Ulrich Drepper <drepper@myware> + + * First official release. This directory contains all the code + needed to internationalize own packages. It provides functions + which allow to use the X/Open catgets function with an interface + like the Uniforum gettext function. For system which does not + have neither of those a complete implementation is provided. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/Makefile.in b/debian/gettext-kde/gettext-kde-0.10.35/intl/Makefile.in new file mode 100644 index 00000000..4bdb186d --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/Makefile.in @@ -0,0 +1,214 @@ +# Makefile for directory with message catalog handling in GNU NLS Utilities. +# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, 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. + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +top_builddir = .. +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +transform = @program_transform_name@ +libdir = $(exec_prefix)/lib +includedir = $(prefix)/include +datadir = $(prefix)/@DATADIRNAME@ +localedir = $(datadir)/locale +gnulocaledir = $(prefix)/share/locale +gettextsrcdir = @datadir@/gettext/intl +aliaspath = $(localedir):. +subdir = intl + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +MKINSTALLDIRS = @MKINSTALLDIRS@ + +l = @l@ + +AR = ar +CC = @CC@ +LIBTOOL = @LIBTOOL@ +RANLIB = @RANLIB@ + +DEFS = -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \ +-DLOCALE_ALIAS_PATH=\"$(aliaspath)\" @DEFS@ +CPPFLAGS = @CPPFLAGS@ +CFLAGS = @CFLAGS@ +LDFLAGS = @LDFLAGS@ + +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) + +HEADERS = $(COMHDRS) libgettext.h loadinfo.h +COMHDRS = gettext.h gettextP.h hash-string.h +SOURCES = $(COMSRCS) intl-compat.c cat-compat.c +COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \ +finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \ +explodename.c +OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \ +finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \ +explodename.$lo +CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo +GETTOBJS = intl-compat.$lo +DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \ +xopen-msg.sed $(HEADERS) $(SOURCES) +DISTFILES.normal = VERSION +DISTFILES.gettext = libintl.glibc intlh.inst.in + +.SUFFIXES: +.SUFFIXES: .c .o .lo +.c.o: + $(COMPILE) $< +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) $< + +INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib + +all: all-@USE_INCLUDED_LIBINTL@ + +all-yes: libintl.$la intlh.inst +all-no: + +libintl.a: $(OBJECTS) + rm -f $@ + $(AR) cru $@ $(OBJECTS) + $(RANLIB) $@ + +libintl.la: $(OBJECTS) + $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \ + -version-info 1:0 -rpath $(libdir) + +../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot + cd ../po && $(MAKE) cat-id-tbl.$lo + +check: all + +# This installation goal is only used in GNU gettext. Packages which +# only use the library should use install instead. + +# We must not install the libintl.h/libintl.a files if we are on a +# system which has the gettext() function in its C library or in a +# separate library or use the catgets interface. A special case is +# where configure found a previously installed GNU gettext library. +# If you want to use the one which comes with this version of the +# package, you have to use `configure --with-included-gettext'. +install: install-exec install-data +install-exec: all + if test "$(PACKAGE)" = "gettext" \ + && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ + if test -r $(MKINSTALLDIRS); then \ + $(MKINSTALLDIRS) $(libdir) $(includedir); \ + else \ + $(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \ + fi; \ + $(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \ + $(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \ + else \ + : ; \ + fi +install-data: all + if test "$(PACKAGE)" = "gettext"; then \ + if test -r $(MKINSTALLDIRS); then \ + $(MKINSTALLDIRS) $(gettextsrcdir); \ + else \ + $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ + fi; \ + $(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \ + dists="$(DISTFILES.common)"; \ + for file in $$dists; do \ + $(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: + dists="$(DISTFILES.common)"; \ + for file in $$dists; do \ + rm -f $(gettextsrcdir)/$$file; \ + done + +info dvi: + +$(OBJECTS): ../config.h libgettext.h +bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h +dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h + +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) + here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES) + +id: ID + +ID: $(HEADERS) $(SOURCES) + here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES) + + +mostlyclean: + rm -f *.a *.o *.lo core core.* + +clean: mostlyclean + +distclean: clean + rm -f Makefile ID TAGS po2msg.sed po2tbl.sed + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + + +# GNU gettext needs not contain the file `VERSION' but contains some +# other files which should not be distributed in other packages. +distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: Makefile $(DISTFILES) + if test "$(PACKAGE)" = gettext; then \ + additional="$(DISTFILES.gettext)"; \ + else \ + additional="$(DISTFILES.normal)"; \ + fi; \ + for file in $(DISTFILES.common) $$additional; do \ + ln $(srcdir)/$$file $(distdir) 2> /dev/null \ + || cp -p $(srcdir)/$$file $(distdir); \ + done + +dist-libc: + tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc + +Makefile: Makefile.in ../config.status + cd .. \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +# The dependency for intlh.inst is different in gettext and all other +# packages. Because we cannot you GNU make features we have to solve +# the problem while rewriting Makefile.in. +@[email protected]: intlh.inst.in ../config.status +@GT_YES@ cd .. \ +@GT_YES@ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \ +@GT_YES@ $(SHELL) ./config.status +@[email protected]: intlh.inst + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/bindtextdom.c b/debian/gettext-kde/gettext-kde-0.10.35/intl/bindtextdom.c new file mode 100644 index 00000000..d9c3f349 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/bindtextdom.c @@ -0,0 +1,203 @@ +/* Implementation of the bindtextdomain(3) function + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#else +# ifdef HAVE_MALLOC_H +# include <malloc.h> +# else +void free (); +# endif +#endif + +#if defined HAVE_STRING_H || defined _LIBC +# include <string.h> +#else +# include <strings.h> +# ifndef memcpy +# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) +# endif +#endif + +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgettext.h" +#endif +#include "gettext.h" +#include "gettextP.h" + +/* @@ end of prolog @@ */ + +/* Contains the default location of the message catalogs. */ +extern const char _nl_default_dirname[]; + +/* List with bindings of specific domains. */ +extern struct binding *_nl_domain_bindings; + + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define BINDTEXTDOMAIN __bindtextdomain +# ifndef strdup +# define strdup(str) __strdup (str) +# endif +#else +# define BINDTEXTDOMAIN bindtextdomain__ +#endif + +/* Specify that the DOMAINNAME message catalog will be found + in DIRNAME rather than in the system locale data base. */ +char * +BINDTEXTDOMAIN (domainname, dirname) + const char *domainname; + const char *dirname; +{ + struct binding *binding; + + /* Some sanity checks. */ + if (domainname == NULL || domainname[0] == '\0') + return NULL; + + for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) + { + int compare = strcmp (domainname, binding->domainname); + if (compare == 0) + /* We found it! */ + break; + if (compare < 0) + { + /* It is not in the list. */ + binding = NULL; + break; + } + } + + if (dirname == NULL) + /* The current binding has be to returned. */ + return binding == NULL ? (char *) _nl_default_dirname : binding->dirname; + + if (binding != NULL) + { + /* The domain is already bound. If the new value and the old + one are equal we simply do nothing. Otherwise replace the + old binding. */ + if (strcmp (dirname, binding->dirname) != 0) + { + char *new_dirname; + + if (strcmp (dirname, _nl_default_dirname) == 0) + new_dirname = (char *) _nl_default_dirname; + else + { +#if defined _LIBC || defined HAVE_STRDUP + new_dirname = strdup (dirname); + if (new_dirname == NULL) + return NULL; +#else + size_t len = strlen (dirname) + 1; + new_dirname = (char *) malloc (len); + if (new_dirname == NULL) + return NULL; + + memcpy (new_dirname, dirname, len); +#endif + } + + if (binding->dirname != _nl_default_dirname) + free (binding->dirname); + + binding->dirname = new_dirname; + } + } + else + { + /* We have to create a new binding. */ +#if !defined _LIBC && !defined HAVE_STRDUP + size_t len; +#endif + struct binding *new_binding = + (struct binding *) malloc (sizeof (*new_binding)); + + if (new_binding == NULL) + return NULL; + +#if defined _LIBC || defined HAVE_STRDUP + new_binding->domainname = strdup (domainname); + if (new_binding->domainname == NULL) + return NULL; +#else + len = strlen (domainname) + 1; + new_binding->domainname = (char *) malloc (len); + if (new_binding->domainname == NULL) + return NULL; + memcpy (new_binding->domainname, domainname, len); +#endif + + if (strcmp (dirname, _nl_default_dirname) == 0) + new_binding->dirname = (char *) _nl_default_dirname; + else + { +#if defined _LIBC || defined HAVE_STRDUP + new_binding->dirname = strdup (dirname); + if (new_binding->dirname == NULL) + return NULL; +#else + len = strlen (dirname) + 1; + new_binding->dirname = (char *) malloc (len); + if (new_binding->dirname == NULL) + return NULL; + memcpy (new_binding->dirname, dirname, len); +#endif + } + + /* Now enqueue it. */ + if (_nl_domain_bindings == NULL + || strcmp (domainname, _nl_domain_bindings->domainname) < 0) + { + new_binding->next = _nl_domain_bindings; + _nl_domain_bindings = new_binding; + } + else + { + binding = _nl_domain_bindings; + while (binding->next != NULL + && strcmp (domainname, binding->next->domainname) > 0) + binding = binding->next; + + new_binding->next = binding->next; + binding->next = new_binding; + } + + binding = new_binding; + } + + return binding->dirname; +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__bindtextdomain, bindtextdomain); +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/cat-compat.c b/debian/gettext-kde/gettext-kde-0.10.35/intl/cat-compat.c new file mode 100644 index 00000000..867d901b --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/cat-compat.c @@ -0,0 +1,262 @@ +/* Compatibility code for gettext-using-catgets interface. + Copyright (C) 1995, 1997 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdio.h> + +#ifdef STDC_HEADERS +# include <stdlib.h> +# include <string.h> +#else +char *getenv (); +# ifdef HAVE_MALLOC_H +# include <malloc.h> +# endif +#endif + +#ifdef HAVE_NL_TYPES_H +# include <nl_types.h> +#endif + +#include "libgettext.h" + +/* @@ end of prolog @@ */ + +/* XPG3 defines the result of `setlocale (category, NULL)' as: + ``Directs `setlocale()' to query `category' and return the current + setting of `local'.'' + However it does not specify the exact format. And even worse: POSIX + defines this not at all. So we can use this feature only on selected + system (e.g. those using GNU C Library). */ +#ifdef _LIBC +# define HAVE_LOCALE_NULL +#endif + +/* The catalog descriptor. */ +static nl_catd catalog = (nl_catd) -1; + +/* Name of the default catalog. */ +static const char default_catalog_name[] = "messages"; + +/* Name of currently used catalog. */ +static const char *catalog_name = default_catalog_name; + +/* Get ID for given string. If not found return -1. */ +static int msg_to_cat_id PARAMS ((const char *msg)); + +/* Substitution for systems lacking this function in their C library. */ +#if !_LIBC && !HAVE_STPCPY +static char *stpcpy PARAMS ((char *dest, const char *src)); +#endif + + +/* Set currently used domain/catalog. */ +char * +textdomain (domainname) + const char *domainname; +{ + nl_catd new_catalog; + char *new_name; + size_t new_name_len; + char *lang; + +#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES \ + && defined HAVE_LOCALE_NULL + lang = setlocale (LC_MESSAGES, NULL); +#else + lang = getenv ("LC_ALL"); + if (lang == NULL || lang[0] == '\0') + { + lang = getenv ("LC_MESSAGES"); + if (lang == NULL || lang[0] == '\0') + lang = getenv ("LANG"); + } +#endif + if (lang == NULL || lang[0] == '\0') + lang = "C"; + + /* See whether name of currently used domain is asked. */ + if (domainname == NULL) + return (char *) catalog_name; + + if (domainname[0] == '\0') + domainname = default_catalog_name; + + /* Compute length of added path element. */ + new_name_len = sizeof (LOCALEDIR) - 1 + 1 + strlen (lang) + + sizeof ("/LC_MESSAGES/") - 1 + sizeof (PACKAGE) - 1 + + sizeof (".cat"); + + new_name = (char *) malloc (new_name_len); + if (new_name == NULL) + return NULL; + + strcpy (new_name, PACKAGE); + new_catalog = catopen (new_name, 0); + + if (new_catalog == (nl_catd) -1) + { + /* NLSPATH search didn't work, try absolute path */ + sprintf (new_name, "%s/%s/LC_MESSAGES/%s.cat", LOCALEDIR, lang, + PACKAGE); + new_catalog = catopen (new_name, 0); + + if (new_catalog == (nl_catd) -1) + { + free (new_name); + return (char *) catalog_name; + } + } + + /* Close old catalog. */ + if (catalog != (nl_catd) -1) + catclose (catalog); + if (catalog_name != default_catalog_name) + free ((char *) catalog_name); + + catalog = new_catalog; + catalog_name = new_name; + + return (char *) catalog_name; +} + +char * +bindtextdomain (domainname, dirname) + const char *domainname; + const char *dirname; +{ +#if HAVE_SETENV || HAVE_PUTENV + char *old_val, *new_val, *cp; + size_t new_val_len; + + /* This does not make much sense here but to be compatible do it. */ + if (domainname == NULL) + return NULL; + + /* Compute length of added path element. If we use setenv we don't need + the first byts for NLSPATH=, but why complicate the code for this + peanuts. */ + new_val_len = sizeof ("NLSPATH=") - 1 + strlen (dirname) + + sizeof ("/%L/LC_MESSAGES/%N.cat"); + + old_val = getenv ("NLSPATH"); + if (old_val == NULL || old_val[0] == '\0') + { + old_val = NULL; + new_val_len += 1 + sizeof (LOCALEDIR) - 1 + + sizeof ("/%L/LC_MESSAGES/%N.cat"); + } + else + new_val_len += strlen (old_val); + + new_val = (char *) malloc (new_val_len); + if (new_val == NULL) + return NULL; + +# if HAVE_SETENV + cp = new_val; +# else + cp = stpcpy (new_val, "NLSPATH="); +# endif + + cp = stpcpy (cp, dirname); + cp = stpcpy (cp, "/%L/LC_MESSAGES/%N.cat:"); + + if (old_val == NULL) + { +# if __STDC__ + stpcpy (cp, LOCALEDIR "/%L/LC_MESSAGES/%N.cat"); +# else + + cp = stpcpy (cp, LOCALEDIR); + stpcpy (cp, "/%L/LC_MESSAGES/%N.cat"); +# endif + } + else + stpcpy (cp, old_val); + +# if HAVE_SETENV + setenv ("NLSPATH", new_val, 1); + free (new_val); +# else + putenv (new_val); + /* Do *not* free the environment entry we just entered. It is used + from now on. */ +# endif + +#endif + + return (char *) domainname; +} + +#undef gettext +char * +gettext (msg) + const char *msg; +{ + int msgid; + + if (msg == NULL || catalog == (nl_catd) -1) + return (char *) msg; + + /* Get the message from the catalog. We always use set number 1. + The message ID is computed by the function `msg_to_cat_id' + which works on the table generated by `po-to-tbl'. */ + msgid = msg_to_cat_id (msg); + if (msgid == -1) + return (char *) msg; + + return catgets (catalog, 1, msgid, (char *) msg); +} + +/* Look through the table `_msg_tbl' which has `_msg_tbl_length' entries + for the one equal to msg. If it is found return the ID. In case when + the string is not found return -1. */ +static int +msg_to_cat_id (msg) + const char *msg; +{ + int cnt; + + for (cnt = 0; cnt < _msg_tbl_length; ++cnt) + if (strcmp (msg, _msg_tbl[cnt]._msg) == 0) + return _msg_tbl[cnt]._msg_number; + + return -1; +} + + +/* @@ begin of epilog @@ */ + +/* We don't want libintl.a to depend on any other library. So we + avoid the non-standard function stpcpy. In GNU C Library this + function is available, though. Also allow the symbol HAVE_STPCPY + to be defined. */ +#if !_LIBC && !HAVE_STPCPY +static char * +stpcpy (dest, src) + char *dest; + const char *src; +{ + while ((*dest++ = *src++) != '\0') + /* Do nothing. */ ; + return dest - 1; +} +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/dcgettext.c b/debian/gettext-kde/gettext-kde-0.10.35/intl/dcgettext.c new file mode 100644 index 00000000..c4c7a2c7 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/dcgettext.c @@ -0,0 +1,624 @@ +/* Implementation of the dcgettext(3) function. + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <sys/types.h> + +#ifdef __GNUC__ +# define alloca __builtin_alloca +# define HAVE_ALLOCA 1 +#else +# if defined HAVE_ALLOCA_H || defined _LIBC +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca +char *alloca (); +# endif +# endif +# endif +#endif + +#include <errno.h> +#ifndef errno +extern int errno; +#endif +#ifndef __set_errno +# define __set_errno(val) errno = (val) +#endif + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#else +char *getenv (); +# ifdef HAVE_MALLOC_H +# include <malloc.h> +# else +void free (); +# endif +#endif + +#if defined HAVE_STRING_H || defined _LIBC +# ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +# endif +# include <string.h> +#else +# include <strings.h> +#endif +#if !HAVE_STRCHR && !defined _LIBC +# ifndef strchr +# define strchr index +# endif +#endif + +#if defined HAVE_UNISTD_H || defined _LIBC +# include <unistd.h> +#endif + +#include "gettext.h" +#include "gettextP.h" +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgettext.h" +#endif +#include "hash-string.h" + +/* @@ end of prolog @@ */ + +#ifdef _LIBC +/* Rename the non ANSI C functions. This is required by the standard + because some ANSI C functions will require linking with this object + file and the name space must not be polluted. */ +# define getcwd __getcwd +# ifndef stpcpy +# define stpcpy __stpcpy +# endif +#else +# if !defined HAVE_GETCWD +char *getwd (); +# define getcwd(buf, max) getwd (buf) +# else +char *getcwd (); +# endif +# ifndef HAVE_STPCPY +static char *stpcpy PARAMS ((char *dest, const char *src)); +# endif +#endif + +/* Amount to increase buffer size by in each try. */ +#define PATH_INCR 32 + +/* The following is from pathmax.h. */ +/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define + PATH_MAX but might cause redefinition warnings when sys/param.h is + later included (as on MORE/BSD 4.3). */ +#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__)) +# include <limits.h> +#endif + +#ifndef _POSIX_PATH_MAX +# define _POSIX_PATH_MAX 255 +#endif + +#if !defined(PATH_MAX) && defined(_PC_PATH_MAX) +# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX)) +#endif + +/* Don't include sys/param.h if it already has been. */ +#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN) +# include <sys/param.h> +#endif + +#if !defined(PATH_MAX) && defined(MAXPATHLEN) +# define PATH_MAX MAXPATHLEN +#endif + +#ifndef PATH_MAX +# define PATH_MAX _POSIX_PATH_MAX +#endif + +/* XPG3 defines the result of `setlocale (category, NULL)' as: + ``Directs `setlocale()' to query `category' and return the current + setting of `local'.'' + However it does not specify the exact format. And even worse: POSIX + defines this not at all. So we can use this feature only on selected + system (e.g. those using GNU C Library). */ +#ifdef _LIBC +# define HAVE_LOCALE_NULL +#endif + +/* Name of the default domain used for gettext(3) prior any call to + textdomain(3). The default value for this is "messages". */ +const char _nl_default_default_domain[] = "messages"; + +/* Value used as the default domain for gettext(3). */ +const char *_nl_current_default_domain = _nl_default_default_domain; + +/* Contains the default location of the message catalogs. */ +const char _nl_default_dirname[] = GNULOCALEDIR; + +/* List with bindings of specific domains created by bindtextdomain() + calls. */ +struct binding *_nl_domain_bindings; + +/* Prototypes for local functions. */ +static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file, + const char *msgid)) internal_function; +static const char *category_to_name PARAMS ((int category)) internal_function; +static const char *guess_category_value PARAMS ((int category, + const char *categoryname)) + internal_function; + + +/* For those loosing systems which don't have `alloca' we have to add + some additional code emulating it. */ +#ifdef HAVE_ALLOCA +/* Nothing has to be done. */ +# define ADD_BLOCK(list, address) /* nothing */ +# define FREE_BLOCKS(list) /* nothing */ +#else +struct block_list +{ + void *address; + struct block_list *next; +}; +# define ADD_BLOCK(list, addr) \ + do { \ + struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ + /* If we cannot get a free block we cannot add the new element to \ + the list. */ \ + if (newp != NULL) { \ + newp->address = (addr); \ + newp->next = (list); \ + (list) = newp; \ + } \ + } while (0) +# define FREE_BLOCKS(list) \ + do { \ + while (list != NULL) { \ + struct block_list *old = list; \ + list = list->next; \ + free (old); \ + } \ + } while (0) +# undef alloca +# define alloca(size) (malloc (size)) +#endif /* have alloca */ + + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define DCGETTEXT __dcgettext +#else +# define DCGETTEXT dcgettext__ +#endif + +/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY + locale. */ +char * +DCGETTEXT (domainname, msgid, category) + const char *domainname; + const char *msgid; + int category; +{ +#ifndef HAVE_ALLOCA + struct block_list *block_list = NULL; +#endif + struct loaded_l10nfile *domain; + struct binding *binding; + const char *categoryname; + const char *categoryvalue; + char *dirname, *xdomainname; + char *single_locale; + char *retval; + int saved_errno = errno; + + /* If no real MSGID is given return NULL. */ + if (msgid == NULL) + return NULL; + + /* If DOMAINNAME is NULL, we are interested in the default domain. If + CATEGORY is not LC_MESSAGES this might not make much sense but the + defintion left this undefined. */ + if (domainname == NULL) + domainname = _nl_current_default_domain; + + /* First find matching binding. */ + for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) + { + int compare = strcmp (domainname, binding->domainname); + if (compare == 0) + /* We found it! */ + break; + if (compare < 0) + { + /* It is not in the list. */ + binding = NULL; + break; + } + } + + if (binding == NULL) + dirname = (char *) _nl_default_dirname; + else if (binding->dirname[0] == '/') + dirname = binding->dirname; + else + { + /* We have a relative path. Make it absolute now. */ + size_t dirname_len = strlen (binding->dirname) + 1; + size_t path_max; + char *ret; + + path_max = (unsigned) PATH_MAX; + path_max += 2; /* The getcwd docs say to do this. */ + + dirname = (char *) alloca (path_max + dirname_len); + ADD_BLOCK (block_list, dirname); + + __set_errno (0); + while ((ret = getcwd (dirname, path_max)) == NULL && errno == ERANGE) + { + path_max += PATH_INCR; + dirname = (char *) alloca (path_max + dirname_len); + ADD_BLOCK (block_list, dirname); + __set_errno (0); + } + + if (ret == NULL) + { + /* We cannot get the current working directory. Don't signal an + error but simply return the default string. */ + FREE_BLOCKS (block_list); + __set_errno (saved_errno); + return (char *) msgid; + } + + stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname); + } + + /* Now determine the symbolic name of CATEGORY and its value. */ + categoryname = category_to_name (category); + categoryvalue = guess_category_value (category, categoryname); + + xdomainname = (char *) alloca (strlen (categoryname) + + strlen (domainname) + 5); + ADD_BLOCK (block_list, xdomainname); + + stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), + domainname), + ".mo"); + + /* Creating working area. */ + single_locale = (char *) alloca (strlen (categoryvalue) + 1); + ADD_BLOCK (block_list, single_locale); + + + /* Search for the given string. This is a loop because we perhaps + got an ordered list of languages to consider for th translation. */ + while (1) + { + /* Make CATEGORYVALUE point to the next element of the list. */ + while (categoryvalue[0] != '\0' && categoryvalue[0] == ':') + ++categoryvalue; + if (categoryvalue[0] == '\0') + { + /* The whole contents of CATEGORYVALUE has been searched but + no valid entry has been found. We solve this situation + by implicitly appending a "C" entry, i.e. no translation + will take place. */ + single_locale[0] = 'C'; + single_locale[1] = '\0'; + } + else + { + char *cp = single_locale; + while (categoryvalue[0] != '\0' && categoryvalue[0] != ':') + *cp++ = *categoryvalue++; + *cp = '\0'; + } + + /* If the current locale value is C (or POSIX) we don't load a + domain. Return the MSGID. */ + if (strcmp (single_locale, "C") == 0 + || strcmp (single_locale, "POSIX") == 0) + { + FREE_BLOCKS (block_list); + __set_errno (saved_errno); + return (char *) msgid; + } + + + /* Find structure describing the message catalog matching the + DOMAINNAME and CATEGORY. */ + domain = _nl_find_domain (dirname, single_locale, xdomainname); + + if (domain != NULL) + { + retval = find_msg (domain, msgid); + + if (retval == NULL) + { + int cnt; + + for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) + { + retval = find_msg (domain->successor[cnt], msgid); + + if (retval != NULL) + break; + } + } + + if (retval != NULL) + { + FREE_BLOCKS (block_list); + __set_errno (saved_errno); + return retval; + } + } + } + /* NOTREACHED */ +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__dcgettext, dcgettext); +#endif + + +static char * +internal_function +find_msg (domain_file, msgid) + struct loaded_l10nfile *domain_file; + const char *msgid; +{ + size_t top, act, bottom; + struct loaded_domain *domain; + + if (domain_file->decided == 0) + _nl_load_domain (domain_file); + + if (domain_file->data == NULL) + return NULL; + + domain = (struct loaded_domain *) domain_file->data; + + /* Locate the MSGID and its translation. */ + if (domain->hash_size > 2 && domain->hash_tab != NULL) + { + /* Use the hashing table. */ + nls_uint32 len = strlen (msgid); + nls_uint32 hash_val = hash_string (msgid); + nls_uint32 idx = hash_val % domain->hash_size; + nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); + nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]); + + if (nstr == 0) + /* Hash table entry is empty. */ + return NULL; + + if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len + && strcmp (msgid, + domain->data + W (domain->must_swap, + domain->orig_tab[nstr - 1].offset)) == 0) + return (char *) domain->data + W (domain->must_swap, + domain->trans_tab[nstr - 1].offset); + + while (1) + { + if (idx >= domain->hash_size - incr) + idx -= domain->hash_size - incr; + else + idx += incr; + + nstr = W (domain->must_swap, domain->hash_tab[idx]); + if (nstr == 0) + /* Hash table entry is empty. */ + return NULL; + + if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len + && strcmp (msgid, + domain->data + W (domain->must_swap, + domain->orig_tab[nstr - 1].offset)) + == 0) + return (char *) domain->data + + W (domain->must_swap, domain->trans_tab[nstr - 1].offset); + } + /* NOTREACHED */ + } + + /* Now we try the default method: binary search in the sorted + array of messages. */ + bottom = 0; + top = domain->nstrings; + while (bottom < top) + { + int cmp_val; + + act = (bottom + top) / 2; + cmp_val = strcmp (msgid, domain->data + + W (domain->must_swap, + domain->orig_tab[act].offset)); + if (cmp_val < 0) + top = act; + else if (cmp_val > 0) + bottom = act + 1; + else + break; + } + + /* If an translation is found return this. */ + return bottom >= top ? NULL : (char *) domain->data + + W (domain->must_swap, + domain->trans_tab[act].offset); +} + + +/* Return string representation of locale CATEGORY. */ +static const char * +internal_function +category_to_name (category) + int category; +{ + const char *retval; + + switch (category) + { +#ifdef LC_COLLATE + case LC_COLLATE: + retval = "LC_COLLATE"; + break; +#endif +#ifdef LC_CTYPE + case LC_CTYPE: + retval = "LC_CTYPE"; + break; +#endif +#ifdef LC_MONETARY + case LC_MONETARY: + retval = "LC_MONETARY"; + break; +#endif +#ifdef LC_NUMERIC + case LC_NUMERIC: + retval = "LC_NUMERIC"; + break; +#endif +#ifdef LC_TIME + case LC_TIME: + retval = "LC_TIME"; + break; +#endif +#ifdef LC_MESSAGES + case LC_MESSAGES: + retval = "LC_MESSAGES"; + break; +#endif +#ifdef LC_RESPONSE + case LC_RESPONSE: + retval = "LC_RESPONSE"; + break; +#endif +#ifdef LC_ALL + case LC_ALL: + /* This might not make sense but is perhaps better than any other + value. */ + retval = "LC_ALL"; + break; +#endif + default: + /* If you have a better idea for a default value let me know. */ + retval = "LC_XXX"; + } + + return retval; +} + +/* Guess value of current locale from value of the environment variables. */ +static const char * +internal_function +guess_category_value (category, categoryname) + int category; + const char *categoryname; +{ + const char *retval; + + /* The highest priority value is the `LANGUAGE' environment + variable. This is a GNU extension. */ + retval = getenv ("LANGUAGE"); + if (retval != NULL && retval[0] != '\0') + return retval; + + /* `LANGUAGE' is not set. So we have to proceed with the POSIX + methods of looking to `LC_ALL', `LC_xxx', and `LANG'. On some + systems this can be done by the `setlocale' function itself. */ +#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL + return setlocale (category, NULL); +#else + /* Setting of LC_ALL overwrites all other. */ + retval = getenv ("LC_ALL"); + if (retval != NULL && retval[0] != '\0') + return retval; + + /* Next comes the name of the desired category. */ + retval = getenv (categoryname); + if (retval != NULL && retval[0] != '\0') + return retval; + + /* Last possibility is the LANG environment variable. */ + retval = getenv ("LANG"); + if (retval != NULL && retval[0] != '\0') + return retval; + + /* We use C as the default domain. POSIX says this is implementation + defined. */ + return "C"; +#endif +} + +/* @@ begin of epilog @@ */ + +/* We don't want libintl.a to depend on any other library. So we + avoid the non-standard function stpcpy. In GNU C Library this + function is available, though. Also allow the symbol HAVE_STPCPY + to be defined. */ +#if !_LIBC && !HAVE_STPCPY +static char * +stpcpy (dest, src) + char *dest; + const char *src; +{ + while ((*dest++ = *src++) != '\0') + /* Do nothing. */ ; + return dest - 1; +} +#endif + + +#ifdef _LIBC +/* If we want to free all resources we have to do some work at + program's end. */ +static void __attribute__ ((unused)) +free_mem (void) +{ + struct binding *runp; + + for (runp = _nl_domain_bindings; runp != NULL; runp = runp->next) + { + free (runp->domainname); + if (runp->dirname != _nl_default_dirname) + /* Yes, this is a pointer comparison. */ + free (runp->dirname); + } + + if (_nl_current_default_domain != _nl_default_default_domain) + /* Yes, again a pointer comparison. */ + free ((char *) _nl_current_default_domain); +} + +text_set_element (__libc_subfreeres, free_mem); +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/dgettext.c b/debian/gettext-kde/gettext-kde-0.10.35/intl/dgettext.c new file mode 100644 index 00000000..0510c2b0 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/dgettext.c @@ -0,0 +1,59 @@ +/* Implementation of the dgettext(3) function + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#if defined HAVE_LOCALE_H || defined _LIBC +# include <locale.h> +#endif + +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgettext.h" +#endif + +/* @@ end of prolog @@ */ + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define DGETTEXT __dgettext +# define DCGETTEXT __dcgettext +#else +# define DGETTEXT dgettext__ +# define DCGETTEXT dcgettext__ +#endif + +/* Look up MSGID in the DOMAINNAME message catalog of the current + LC_MESSAGES locale. */ +char * +DGETTEXT (domainname, msgid) + const char *domainname; + const char *msgid; +{ + return DCGETTEXT (domainname, msgid, LC_MESSAGES); +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__dgettext, dgettext); +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/explodename.c b/debian/gettext-kde/gettext-kde-0.10.35/intl/explodename.c new file mode 100644 index 00000000..8066dc29 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/explodename.c @@ -0,0 +1,188 @@ +/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Contributed by Ulrich Drepper <[email protected]>, 1995. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#endif + +#if defined HAVE_STRING_H || defined _LIBC +# include <string.h> +#else +# include <strings.h> +#endif +#include <sys/types.h> + +#include "loadinfo.h" + +/* On some strange systems still no definition of NULL is found. Sigh! */ +#ifndef NULL +# if defined __STDC__ && __STDC__ +# define NULL ((void *) 0) +# else +# define NULL 0 +# endif +#endif + +/* @@ end of prolog @@ */ + +int +_nl_explode_name (name, language, modifier, territory, codeset, + normalized_codeset, special, sponsor, revision) + char *name; + const char **language; + const char **modifier; + const char **territory; + const char **codeset; + const char **normalized_codeset; + const char **special; + const char **sponsor; + const char **revision; +{ + enum { undecided, xpg, cen } syntax; + char *cp; + int mask; + + *modifier = NULL; + *territory = NULL; + *codeset = NULL; + *normalized_codeset = NULL; + *special = NULL; + *sponsor = NULL; + *revision = NULL; + + /* Now we determine the single parts of the locale name. First + look for the language. Termination symbols are `_' and `@' if + we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ + mask = 0; + syntax = undecided; + *language = cp = name; + while (cp[0] != '\0' && cp[0] != '_' && cp[0] != '@' + && cp[0] != '+' && cp[0] != ',') + ++cp; + + if (*language == cp) + /* This does not make sense: language has to be specified. Use + this entry as it is without exploding. Perhaps it is an alias. */ + cp = strchr (*language, '\0'); + else if (cp[0] == '_') + { + /* Next is the territory. */ + cp[0] = '\0'; + *territory = ++cp; + + while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@' + && cp[0] != '+' && cp[0] != ',' && cp[0] != '_') + ++cp; + + mask |= TERRITORY; + + if (cp[0] == '.') + { + /* Next is the codeset. */ + syntax = xpg; + cp[0] = '\0'; + *codeset = ++cp; + + while (cp[0] != '\0' && cp[0] != '@') + ++cp; + + mask |= XPG_CODESET; + + if (*codeset != cp && (*codeset)[0] != '\0') + { + *normalized_codeset = _nl_normalize_codeset (*codeset, + cp - *codeset); + if (strcmp (*codeset, *normalized_codeset) == 0) + free ((char *) *normalized_codeset); + else + mask |= XPG_NORM_CODESET; + } + } + } + + if (cp[0] == '@' || (syntax != xpg && cp[0] == '+')) + { + /* Next is the modifier. */ + syntax = cp[0] == '@' ? xpg : cen; + cp[0] = '\0'; + *modifier = ++cp; + + while (syntax == cen && cp[0] != '\0' && cp[0] != '+' + && cp[0] != ',' && cp[0] != '_') + ++cp; + + mask |= XPG_MODIFIER | CEN_AUDIENCE; + } + + if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_')) + { + syntax = cen; + + if (cp[0] == '+') + { + /* Next is special application (CEN syntax). */ + cp[0] = '\0'; + *special = ++cp; + + while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_') + ++cp; + + mask |= CEN_SPECIAL; + } + + if (cp[0] == ',') + { + /* Next is sponsor (CEN syntax). */ + cp[0] = '\0'; + *sponsor = ++cp; + + while (cp[0] != '\0' && cp[0] != '_') + ++cp; + + mask |= CEN_SPONSOR; + } + + if (cp[0] == '_') + { + /* Next is revision (CEN syntax). */ + cp[0] = '\0'; + *revision = ++cp; + + mask |= CEN_REVISION; + } + } + + /* For CEN syntax values it might be important to have the + separator character in the file name, not for XPG syntax. */ + if (syntax == xpg) + { + if (*territory != NULL && (*territory)[0] == '\0') + mask &= ~TERRITORY; + + if (*codeset != NULL && (*codeset)[0] == '\0') + mask &= ~XPG_CODESET; + + if (*modifier != NULL && (*modifier)[0] == '\0') + mask &= ~XPG_MODIFIER; + } + + return mask; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/finddomain.c b/debian/gettext-kde/gettext-kde-0.10.35/intl/finddomain.c new file mode 100644 index 00000000..81ea29bf --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/finddomain.c @@ -0,0 +1,216 @@ +/* Handle list of needed message catalogs + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Written by Ulrich Drepper <[email protected]>, 1995. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <ctype.h> +#include <errno.h> +#include <stdio.h> +#include <sys/types.h> + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#else +# ifdef HAVE_MALLOC_H +# include <malloc.h> +# else +void free (); +# endif +#endif + +#if defined HAVE_STRING_H || defined _LIBC +# include <string.h> +#else +# include <strings.h> +# ifndef memcpy +# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) +# endif +#endif +#if !HAVE_STRCHR && !defined _LIBC +# ifndef strchr +# define strchr index +# endif +#endif + +#if defined HAVE_UNISTD_H || defined _LIBC +# include <unistd.h> +#endif + +#include "gettext.h" +#include "gettextP.h" +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgettext.h" +#endif + +/* @@ end of prolog @@ */ +/* List of already loaded domains. */ +static struct loaded_l10nfile *_nl_loaded_domains; + + +/* Return a data structure describing the message catalog described by + the DOMAINNAME and CATEGORY parameters with respect to the currently + established bindings. */ +struct loaded_l10nfile * +internal_function +_nl_find_domain (dirname, locale, domainname) + const char *dirname; + char *locale; + const char *domainname; +{ + struct loaded_l10nfile *retval; + const char *language; + const char *modifier; + const char *territory; + const char *codeset; + const char *normalized_codeset; + const char *special; + const char *sponsor; + const char *revision; + const char *alias_value; + int mask; + + /* LOCALE can consist of up to four recognized parts for the XPG syntax: + + language[_territory[.codeset]][@modifier] + + and six parts for the CEN syntax: + + language[_territory][+audience][+special][,[sponsor][_revision]] + + Beside the first part all of them are allowed to be missing. If + the full specified locale is not found, the less specific one are + looked for. The various parts will be stripped off according to + the following order: + (1) revision + (2) sponsor + (3) special + (4) codeset + (5) normalized codeset + (6) territory + (7) audience/modifier + */ + + /* If we have already tested for this locale entry there has to + be one data set in the list of loaded domains. */ + retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, + strlen (dirname) + 1, 0, locale, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, domainname, 0); + if (retval != NULL) + { + /* We know something about this locale. */ + int cnt; + + if (retval->decided == 0) + _nl_load_domain (retval); + + if (retval->data != NULL) + return retval; + + for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) + { + if (retval->successor[cnt]->decided == 0) + _nl_load_domain (retval->successor[cnt]); + + if (retval->successor[cnt]->data != NULL) + break; + } + return cnt >= 0 ? retval : NULL; + /* NOTREACHED */ + } + + /* See whether the locale value is an alias. If yes its value + *overwrites* the alias name. No test for the original value is + done. */ + alias_value = _nl_expand_alias (locale); + if (alias_value != NULL) + { +#if defined _LIBC || defined HAVE_STRDUP + locale = strdup (alias_value); + if (locale == NULL) + return NULL; +#else + size_t len = strlen (alias_value) + 1; + locale = (char *) malloc (len); + if (locale == NULL) + return NULL; + + memcpy (locale, alias_value, len); +#endif + } + + /* Now we determine the single parts of the locale name. First + look for the language. Termination symbols are `_' and `@' if + we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ + mask = _nl_explode_name (locale, &language, &modifier, &territory, + &codeset, &normalized_codeset, &special, + &sponsor, &revision); + + /* Create all possible locale entries which might be interested in + generalization. */ + retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, + strlen (dirname) + 1, mask, language, territory, + codeset, normalized_codeset, modifier, special, + sponsor, revision, domainname, 1); + if (retval == NULL) + /* This means we are out of core. */ + return NULL; + + if (retval->decided == 0) + _nl_load_domain (retval); + if (retval->data == NULL) + { + int cnt; + for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) + { + if (retval->successor[cnt]->decided == 0) + _nl_load_domain (retval->successor[cnt]); + if (retval->successor[cnt]->data != NULL) + break; + } + } + + /* The room for an alias was dynamically allocated. Free it now. */ + if (alias_value != NULL) + free (locale); + + return retval; +} + + +#ifdef _LIBC +static void __attribute__ ((unused)) +free_mem (void) +{ + struct loaded_l10nfile *runp = _nl_loaded_domains; + + while (runp != NULL) + { + struct loaded_l10nfile *here = runp; + if (runp->data != NULL) + _nl_unload_domain ((struct loaded_domain *) runp->data); + runp = runp->next; + free (here); + } +} + +text_set_element (__libc_subfreeres, free_mem); +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/gettext.c b/debian/gettext-kde/gettext-kde-0.10.35/intl/gettext.c new file mode 100644 index 00000000..d929f98d --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/gettext.c @@ -0,0 +1,70 @@ +/* Implementation of gettext(3) function. + Copyright (C) 1995, 1997 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#ifdef _LIBC +# define __need_NULL +# include <stddef.h> +#else +# ifdef STDC_HEADERS +# include <stdlib.h> /* Just for NULL. */ +# else +# ifdef HAVE_STRING_H +# include <string.h> +# else +# define NULL ((void *) 0) +# endif +# endif +#endif + +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgettext.h" +#endif + +/* @@ end of prolog @@ */ + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define GETTEXT __gettext +# define DGETTEXT __dgettext +#else +# define GETTEXT gettext__ +# define DGETTEXT dgettext__ +#endif + +/* Look up MSGID in the current default message catalog for the current + LC_MESSAGES locale. If not found, returns MSGID itself (the default + text). */ +char * +GETTEXT (msgid) + const char *msgid; +{ + return DGETTEXT (NULL, msgid); +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__gettext, gettext); +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/gettext.h b/debian/gettext-kde/gettext-kde-0.10.35/intl/gettext.h new file mode 100644 index 00000000..3cd23d7d --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/gettext.h @@ -0,0 +1,105 @@ +/* Internal header for GNU gettext internationalization functions. + Copyright (C) 1995, 1997 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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 Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _GETTEXT_H +#define _GETTEXT_H 1 + +#include <stdio.h> + +#if HAVE_LIMITS_H || _LIBC +# include <limits.h> +#endif + +/* @@ end of prolog @@ */ + +/* The magic number of the GNU message catalog format. */ +#define _MAGIC 0x950412de +#define _MAGIC_SWAPPED 0xde120495 + +/* Revision number of the currently used .mo (binary) file format. */ +#define MO_REVISION_NUMBER 0 + +/* The following contortions are an attempt to use the C preprocessor + to determine an unsigned integral type that is 32 bits wide. An + alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but + doing that would require that the configure script compile and *run* + the resulting executable. Locally running cross-compiled executables + is usually not possible. */ + +#if __STDC__ +# define UINT_MAX_32_BITS 4294967295U +#else +# define UINT_MAX_32_BITS 0xFFFFFFFF +#endif + +/* If UINT_MAX isn't defined, assume it's a 32-bit type. + This should be valid for all systems GNU cares about because + that doesn't include 16-bit systems, and only modern systems + (that certainly have <limits.h>) have 64+-bit integral types. */ + +#ifndef UINT_MAX +# define UINT_MAX UINT_MAX_32_BITS +#endif + +#if UINT_MAX == UINT_MAX_32_BITS +typedef unsigned nls_uint32; +#else +# if USHRT_MAX == UINT_MAX_32_BITS +typedef unsigned short nls_uint32; +# else +# if ULONG_MAX == UINT_MAX_32_BITS +typedef unsigned long nls_uint32; +# else + /* The following line is intended to throw an error. Using #error is + not portable enough. */ + "Cannot determine unsigned 32-bit data type." +# endif +# endif +#endif + + +/* Header for binary .mo file format. */ +struct mo_file_header +{ + /* The magic number. */ + nls_uint32 magic; + /* The revision number of the file format. */ + nls_uint32 revision; + /* The number of strings pairs. */ + nls_uint32 nstrings; + /* Offset of table with start offsets of original strings. */ + nls_uint32 orig_tab_offset; + /* Offset of table with start offsets of translation strings. */ + nls_uint32 trans_tab_offset; + /* Size of hashing table. */ + nls_uint32 hash_tab_size; + /* Offset of first hashing entry. */ + nls_uint32 hash_tab_offset; +}; + +struct string_desc +{ + /* Length of addressed string. */ + nls_uint32 length; + /* Offset of string in file. */ + nls_uint32 offset; +}; + +/* @@ begin of epilog @@ */ + +#endif /* gettext.h */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/gettextP.h b/debian/gettext-kde/gettext-kde-0.10.35/intl/gettextP.h new file mode 100644 index 00000000..00c52031 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/gettextP.h @@ -0,0 +1,89 @@ +/* Header describing internals of gettext library + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Written by Ulrich Drepper <[email protected]>, 1995. + + 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, 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. */ + +#ifndef _GETTEXTP_H +#define _GETTEXTP_H + +#include "loadinfo.h" + +/* @@ end of prolog @@ */ + +#ifndef PARAMS +# if __STDC__ +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif +#endif + +#ifndef internal_function +# define internal_function +#endif + +#ifndef W +# define W(flag, data) ((flag) ? SWAP (data) : (data)) +#endif + + +#ifdef _LIBC +# include <byteswap.h> +# define SWAP(i) bswap_32 (i) +#else +static nls_uint32 SWAP PARAMS ((nls_uint32 i)); + +static inline nls_uint32 +SWAP (i) + nls_uint32 i; +{ + return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24); +} +#endif + + +struct loaded_domain +{ + const char *data; + int use_mmap; + size_t mmap_size; + int must_swap; + nls_uint32 nstrings; + struct string_desc *orig_tab; + struct string_desc *trans_tab; + nls_uint32 hash_size; + nls_uint32 *hash_tab; +}; + +struct binding +{ + struct binding *next; + char *domainname; + char *dirname; +}; + +struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname, + char *__locale, + const char *__domainname)) + internal_function; +void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain)) + internal_function; +void _nl_unload_domain PARAMS ((struct loaded_domain *__domain)) + internal_function; + +/* @@ begin of epilog @@ */ + +#endif /* gettextP.h */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/hash-string.h b/debian/gettext-kde/gettext-kde-0.10.35/intl/hash-string.h new file mode 100644 index 00000000..cacb38e4 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/hash-string.h @@ -0,0 +1,59 @@ +/* Implements a string hashing function. + Copyright (C) 1995, 1997 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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 Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* @@ end of prolog @@ */ + +#ifndef PARAMS +# if __STDC__ +# define PARAMS(Args) Args +# else +# define PARAMS(Args) () +# endif +#endif + +/* We assume to have `unsigned long int' value with at least 32 bits. */ +#define HASHWORDBITS 32 + + +/* Defines the so called `hashpjw' function by P.J. Weinberger + [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, + 1986, 1987 Bell Telephone Laboratories, Inc.] */ +static unsigned long hash_string PARAMS ((const char *__str_param)); + +static inline unsigned long +hash_string (str_param) + const char *str_param; +{ + unsigned long int hval, g; + const char *str = str_param; + + /* Compute the hash value for the given string. */ + hval = 0; + while (*str != '\0') + { + hval <<= 4; + hval += (unsigned long) *str++; + g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4)); + if (g != 0) + { + hval ^= g >> (HASHWORDBITS - 8); + hval ^= g; + } + } + return hval; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/intl-compat.c b/debian/gettext-kde/gettext-kde-0.10.35/intl/intl-compat.c new file mode 100644 index 00000000..503efa0f --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/intl-compat.c @@ -0,0 +1,76 @@ +/* intl-compat.c - Stub functions to call gettext functions from GNU gettext + Library. + Copyright (C) 1995 Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "libgettext.h" + +/* @@ end of prolog @@ */ + + +#undef gettext +#undef dgettext +#undef dcgettext +#undef textdomain +#undef bindtextdomain + + +char * +bindtextdomain (domainname, dirname) + const char *domainname; + const char *dirname; +{ + return bindtextdomain__ (domainname, dirname); +} + + +char * +dcgettext (domainname, msgid, category) + const char *domainname; + const char *msgid; + int category; +{ + return dcgettext__ (domainname, msgid, category); +} + + +char * +dgettext (domainname, msgid) + const char *domainname; + const char *msgid; +{ + return dgettext__ (domainname, msgid); +} + + +char * +gettext (msgid) + const char *msgid; +{ + return gettext__ (msgid); +} + + +char * +textdomain (domainname) + const char *domainname; +{ + return textdomain__ (domainname); +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/intlh.inst.in b/debian/gettext-kde/gettext-kde-0.10.35/intl/intlh.inst.in new file mode 100644 index 00000000..27cf6c74 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/intlh.inst.in @@ -0,0 +1,111 @@ +/* Message catalogs for internationalization. + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +#ifndef _LIBINTL_H +#define _LIBINTL_H 1 + +@INCLUDE_LOCALE_H@ + +/* We define an additional symbol to signal that we use the GNU + implementation of gettext. */ +#define __USE_GNU_GETTEXT 1 + +#ifndef PARAMS +# if __STDC__ || defined __cplusplus +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Look up MSGID in the current default message catalog for the current + LC_MESSAGES locale. If not found, returns MSGID itself (the default + text). */ +extern char *gettext PARAMS ((const char *__msgid)); + +/* Look up MSGID in the DOMAINNAME message catalog for the current + LC_MESSAGES locale. */ +extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid)); + +/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY + locale. */ +extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid, + int __category)); + + +/* Set the current default message catalog to DOMAINNAME. + If DOMAINNAME is null, return the current default. + If DOMAINNAME is "", reset to the default of "messages". */ +extern char *textdomain PARAMS ((const char *__domainname)); + +/* Specify that the DOMAINNAME message catalog will be found + in DIRNAME rather than in the system locale data base. */ +extern char *bindtextdomain PARAMS ((const char *__domainname, + const char *__dirname)); + + +/* Optimized version of the functions above. */ +#if defined __OPTIMIZED +/* These must be a macro. Inlined functions are useless because the + `__builtin_constant_p' predicate in dcgettext would always return + false. */ + +# define gettext(msgid) dgettext ((char *) 0, msgid) + +# define dgettext(domainname, msgid) \ + dcgettext (domainname, msgid, LC_MESSAGES) + +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +/* This global variable is defined in loadmsgcat.c. We need a sign, + whether a new catalog was loaded, which can be associated with all + translations. */ +extern int _nl_msg_cat_cntr; + +# define dcgettext(domainname, msgid, category) \ + (__extension__ \ + ({ \ + char *__result; \ + if (__builtin_constant_p (msgid)) \ + { \ + static char *__translation__; \ + static int __catalog_counter__; \ + if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \ + { \ + __translation__ = \ + (dcgettext) ((domainname), (msgid), (category)); \ + __catalog_counter__ = _nl_msg_cat_cntr; \ + } \ + __result = __translation__; \ + } \ + else \ + __result = (dcgettext) ((domainname), (msgid), (category)); \ + __result; \ + })) +# endif +#endif /* Optimizing. */ + + +#ifdef __cplusplus +} +#endif + +#endif /* libintl.h */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/l10nflist.c b/debian/gettext-kde/gettext-kde-0.10.35/intl/l10nflist.c new file mode 100644 index 00000000..9c7dc183 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/l10nflist.c @@ -0,0 +1,411 @@ +/* Handle list of needed message catalogs + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + Contributed by Ulrich Drepper <[email protected]>, 1995. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + + +#if defined HAVE_STRING_H || defined _LIBC +# ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +# endif +# include <string.h> +#else +# include <strings.h> +# ifndef memcpy +# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) +# endif +#endif +#if !HAVE_STRCHR && !defined _LIBC +# ifndef strchr +# define strchr index +# endif +#endif + +#if defined _LIBC || defined HAVE_ARGZ_H +# include <argz.h> +#endif +#include <ctype.h> +#include <sys/types.h> + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#endif + +#include "loadinfo.h" + +/* On some strange systems still no definition of NULL is found. Sigh! */ +#ifndef NULL +# if defined __STDC__ && __STDC__ +# define NULL ((void *) 0) +# else +# define NULL 0 +# endif +#endif + +/* @@ end of prolog @@ */ + +#ifdef _LIBC +/* Rename the non ANSI C functions. This is required by the standard + because some ANSI C functions will require linking with this object + file and the name space must not be polluted. */ +# ifndef stpcpy +# define stpcpy(dest, src) __stpcpy(dest, src) +# endif +#else +# ifndef HAVE_STPCPY +static char *stpcpy PARAMS ((char *dest, const char *src)); +# endif +#endif + +/* Define function which are usually not available. */ + +#if !defined _LIBC && !defined HAVE___ARGZ_COUNT +/* Returns the number of strings in ARGZ. */ +static size_t argz_count__ PARAMS ((const char *argz, size_t len)); + +static size_t +argz_count__ (argz, len) + const char *argz; + size_t len; +{ + size_t count = 0; + while (len > 0) + { + size_t part_len = strlen (argz); + argz += part_len + 1; + len -= part_len + 1; + count++; + } + return count; +} +# undef __argz_count +# define __argz_count(argz, len) argz_count__ (argz, len) +#endif /* !_LIBC && !HAVE___ARGZ_COUNT */ + +#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY +/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's + except the last into the character SEP. */ +static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep)); + +static void +argz_stringify__ (argz, len, sep) + char *argz; + size_t len; + int sep; +{ + while (len > 0) + { + size_t part_len = strlen (argz); + argz += part_len; + len -= part_len + 1; + if (len > 0) + *argz++ = sep; + } +} +# undef __argz_stringify +# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep) +#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */ + +#if !defined _LIBC && !defined HAVE___ARGZ_NEXT +static char *argz_next__ PARAMS ((char *argz, size_t argz_len, + const char *entry)); + +static char * +argz_next__ (argz, argz_len, entry) + char *argz; + size_t argz_len; + const char *entry; +{ + if (entry) + { + if (entry < argz + argz_len) + entry = strchr (entry, '\0') + 1; + + return entry >= argz + argz_len ? NULL : (char *) entry; + } + else + if (argz_len > 0) + return argz; + else + return 0; +} +# undef __argz_next +# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry) +#endif /* !_LIBC && !HAVE___ARGZ_NEXT */ + + +/* Return number of bits set in X. */ +static int pop PARAMS ((int x)); + +static inline int +pop (x) + int x; +{ + /* We assume that no more than 16 bits are used. */ + x = ((x & ~0x5555) >> 1) + (x & 0x5555); + x = ((x & ~0x3333) >> 2) + (x & 0x3333); + x = ((x >> 4) + x) & 0x0f0f; + x = ((x >> 8) + x) & 0xff; + + return x; +} + + +struct loaded_l10nfile * +_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, + territory, codeset, normalized_codeset, modifier, special, + sponsor, revision, filename, do_allocate) + struct loaded_l10nfile **l10nfile_list; + const char *dirlist; + size_t dirlist_len; + int mask; + const char *language; + const char *territory; + const char *codeset; + const char *normalized_codeset; + const char *modifier; + const char *special; + const char *sponsor; + const char *revision; + const char *filename; + int do_allocate; +{ + char *abs_filename; + struct loaded_l10nfile *last = NULL; + struct loaded_l10nfile *retval; + char *cp; + size_t entries; + int cnt; + + /* Allocate room for the full file name. */ + abs_filename = (char *) malloc (dirlist_len + + strlen (language) + + ((mask & TERRITORY) != 0 + ? strlen (territory) + 1 : 0) + + ((mask & XPG_CODESET) != 0 + ? strlen (codeset) + 1 : 0) + + ((mask & XPG_NORM_CODESET) != 0 + ? strlen (normalized_codeset) + 1 : 0) + + (((mask & XPG_MODIFIER) != 0 + || (mask & CEN_AUDIENCE) != 0) + ? strlen (modifier) + 1 : 0) + + ((mask & CEN_SPECIAL) != 0 + ? strlen (special) + 1 : 0) + + (((mask & CEN_SPONSOR) != 0 + || (mask & CEN_REVISION) != 0) + ? (1 + ((mask & CEN_SPONSOR) != 0 + ? strlen (sponsor) + 1 : 0) + + ((mask & CEN_REVISION) != 0 + ? strlen (revision) + 1 : 0)) : 0) + + 1 + strlen (filename) + 1); + + if (abs_filename == NULL) + return NULL; + + retval = NULL; + last = NULL; + + /* Construct file name. */ + memcpy (abs_filename, dirlist, dirlist_len); + __argz_stringify (abs_filename, dirlist_len, ':'); + cp = abs_filename + (dirlist_len - 1); + *cp++ = '/'; + cp = stpcpy (cp, language); + + if ((mask & TERRITORY) != 0) + { + *cp++ = '_'; + cp = stpcpy (cp, territory); + } + if ((mask & XPG_CODESET) != 0) + { + *cp++ = '.'; + cp = stpcpy (cp, codeset); + } + if ((mask & XPG_NORM_CODESET) != 0) + { + *cp++ = '.'; + cp = stpcpy (cp, normalized_codeset); + } + if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0) + { + /* This component can be part of both syntaces but has different + leading characters. For CEN we use `+', else `@'. */ + *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@'; + cp = stpcpy (cp, modifier); + } + if ((mask & CEN_SPECIAL) != 0) + { + *cp++ = '+'; + cp = stpcpy (cp, special); + } + if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0) + { + *cp++ = ','; + if ((mask & CEN_SPONSOR) != 0) + cp = stpcpy (cp, sponsor); + if ((mask & CEN_REVISION) != 0) + { + *cp++ = '_'; + cp = stpcpy (cp, revision); + } + } + + *cp++ = '/'; + stpcpy (cp, filename); + + /* Look in list of already loaded domains whether it is already + available. */ + last = NULL; + for (retval = *l10nfile_list; retval != NULL; retval = retval->next) + if (retval->filename != NULL) + { + int compare = strcmp (retval->filename, abs_filename); + if (compare == 0) + /* We found it! */ + break; + if (compare < 0) + { + /* It's not in the list. */ + retval = NULL; + break; + } + + last = retval; + } + + if (retval != NULL || do_allocate == 0) + { + free (abs_filename); + return retval; + } + + retval = (struct loaded_l10nfile *) + malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len) + * (1 << pop (mask)) + * sizeof (struct loaded_l10nfile *))); + if (retval == NULL) + return NULL; + + retval->filename = abs_filename; + retval->decided = (__argz_count (dirlist, dirlist_len) != 1 + || ((mask & XPG_CODESET) != 0 + && (mask & XPG_NORM_CODESET) != 0)); + retval->data = NULL; + + if (last == NULL) + { + retval->next = *l10nfile_list; + *l10nfile_list = retval; + } + else + { + retval->next = last->next; + last->next = retval; + } + + entries = 0; + /* If the DIRLIST is a real list the RETVAL entry corresponds not to + a real file. So we have to use the DIRLIST separation mechanism + of the inner loop. */ + cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask; + for (; cnt >= 0; --cnt) + if ((cnt & ~mask) == 0 + && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0) + && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0)) + { + /* Iterate over all elements of the DIRLIST. */ + char *dir = NULL; + + while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir)) + != NULL) + retval->successor[entries++] + = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt, + language, territory, codeset, + normalized_codeset, modifier, special, + sponsor, revision, filename, 1); + } + retval->successor[entries] = NULL; + + return retval; +} + +/* Normalize codeset name. There is no standard for the codeset + names. Normalization allows the user to use any of the common + names. */ +const char * +_nl_normalize_codeset (codeset, name_len) + const unsigned char *codeset; + size_t name_len; +{ + int len = 0; + int only_digit = 1; + char *retval; + char *wp; + size_t cnt; + + for (cnt = 0; cnt < name_len; ++cnt) + if (isalnum (codeset[cnt])) + { + ++len; + + if (isalpha (codeset[cnt])) + only_digit = 0; + } + + retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1); + + if (retval != NULL) + { + if (only_digit) + wp = stpcpy (retval, "iso"); + else + wp = retval; + + for (cnt = 0; cnt < name_len; ++cnt) + if (isalpha (codeset[cnt])) + *wp++ = tolower (codeset[cnt]); + else if (isdigit (codeset[cnt])) + *wp++ = codeset[cnt]; + + *wp = '\0'; + } + + return (const char *) retval; +} + + +/* @@ begin of epilog @@ */ + +/* We don't want libintl.a to depend on any other library. So we + avoid the non-standard function stpcpy. In GNU C Library this + function is available, though. Also allow the symbol HAVE_STPCPY + to be defined. */ +#if !_LIBC && !HAVE_STPCPY +static char * +stpcpy (dest, src) + char *dest; + const char *src; +{ + while ((*dest++ = *src++) != '\0') + /* Do nothing. */ ; + return dest - 1; +} +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/libgettext.h b/debian/gettext-kde/gettext-kde-0.10.35/intl/libgettext.h new file mode 100644 index 00000000..3a92960a --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/libgettext.h @@ -0,0 +1,182 @@ +/* Message catalogs for internationalization. + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +/* Because on some systems (e.g. Solaris) we sometimes have to include + the systems libintl.h as well as this file we have more complex + include protection above. But the systems header might perhaps also + define _LIBINTL_H and therefore we have to protect the definition here. */ + +#if !defined _LIBINTL_H || !defined _LIBGETTEXT_H +#ifndef _LIBINTL_H +# define _LIBINTL_H 1 +#endif +#define _LIBGETTEXT_H 1 + +/* We define an additional symbol to signal that we use the GNU + implementation of gettext. */ +#define __USE_GNU_GETTEXT 1 + +#include <sys/types.h> + +#if HAVE_LOCALE_H +# include <locale.h> +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + +/* @@ end of prolog @@ */ + +#ifndef PARAMS +# if __STDC__ || defined __cplusplus +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif +#endif + +#ifndef NULL +# if !defined __cplusplus || defined __GNUC__ +# define NULL ((void *) 0) +# else +# define NULL (0) +# endif +#endif + +#if !HAVE_LC_MESSAGES +/* This value determines the behaviour of the gettext() and dgettext() + function. But some system does not have this defined. Define it + to a default value. */ +# define LC_MESSAGES (-1) +#endif + + +/* Declarations for gettext-using-catgets interface. Derived from + Jim Meyering's libintl.h. */ +struct _msg_ent +{ + const char *_msg; + int _msg_number; +}; + + +#if HAVE_CATGETS +/* These two variables are defined in the automatically by po-to-tbl.sed + generated file `cat-id-tbl.c'. */ +extern const struct _msg_ent _msg_tbl[]; +extern int _msg_tbl_length; +#endif + + +/* For automatical extraction of messages sometimes no real + translation is needed. Instead the string itself is the result. */ +#define gettext_noop(Str) (Str) + +/* Look up MSGID in the current default message catalog for the current + LC_MESSAGES locale. If not found, returns MSGID itself (the default + text). */ +extern char *gettext PARAMS ((const char *__msgid)); +extern char *gettext__ PARAMS ((const char *__msgid)); + +/* Look up MSGID in the DOMAINNAME message catalog for the current + LC_MESSAGES locale. */ +extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid)); +extern char *dgettext__ PARAMS ((const char *__domainname, + const char *__msgid)); + +/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY + locale. */ +extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid, + int __category)); +extern char *dcgettext__ PARAMS ((const char *__domainname, + const char *__msgid, int __category)); + + +/* Set the current default message catalog to DOMAINNAME. + If DOMAINNAME is null, return the current default. + If DOMAINNAME is "", reset to the default of "messages". */ +extern char *textdomain PARAMS ((const char *__domainname)); +extern char *textdomain__ PARAMS ((const char *__domainname)); + +/* Specify that the DOMAINNAME message catalog will be found + in DIRNAME rather than in the system locale data base. */ +extern char *bindtextdomain PARAMS ((const char *__domainname, + const char *__dirname)); +extern char *bindtextdomain__ PARAMS ((const char *__domainname, + const char *__dirname)); + +#if ENABLE_NLS + +/* Solaris 2.3 has the gettext function but dcgettext is missing. + So we omit this optimization for Solaris 2.3. BTW, Solaris 2.4 + has dcgettext. */ +# if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT) + +# define gettext(Msgid) \ + dgettext (NULL, Msgid) + +# define dgettext(Domainname, Msgid) \ + dcgettext (Domainname, Msgid, LC_MESSAGES) + +# if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7 +/* This global variable is defined in loadmsgcat.c. We need a sign, + whether a new catalog was loaded, which can be associated with all + translations. */ +extern int _nl_msg_cat_cntr; + +# define dcgettext(Domainname, Msgid, Category) \ + (__extension__ \ + ({ \ + char *__result; \ + if (__builtin_constant_p (Msgid)) \ + { \ + static char *__translation__; \ + static int __catalog_counter__; \ + if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \ + { \ + __translation__ = \ + dcgettext__ (Domainname, Msgid, Category); \ + __catalog_counter__ = _nl_msg_cat_cntr; \ + } \ + __result = __translation__; \ + } \ + else \ + __result = dcgettext__ (Domainname, Msgid, Category); \ + __result; \ + })) +# endif +# endif + +#else + +# define gettext(Msgid) (Msgid) +# define dgettext(Domainname, Msgid) (Msgid) +# define dcgettext(Domainname, Msgid, Category) (Msgid) +# define textdomain(Domainname) ((char *) Domainname) +# define bindtextdomain(Domainname, Dirname) ((char *) Dirname) + +#endif + +/* @@ begin of epilog @@ */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/libintl.glibc b/debian/gettext-kde/gettext-kde-0.10.35/intl/libintl.glibc new file mode 100644 index 00000000..2c8e8a49 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/libintl.glibc @@ -0,0 +1,120 @@ +/* Message catalogs for internationalization. + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + Contributed by Ulrich Drepper <[email protected]>, 1995. + This file is derived from the file libgettext.h in the GNU gettext package. + + This file is part of the GNU C Library. Its master source is NOT part of + the C library, however. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _LIBINTL_H +#define _LIBINTL_H 1 + +#include <features.h> + +/* We define an additional symbol to signal that we use the GNU + implementation of gettext. */ +#define __USE_GNU_GETTEXT 1 + +__BEGIN_DECLS + +/* Look up MSGID in the current default message catalog for the current + LC_MESSAGES locale. If not found, returns MSGID itself (the default + text). */ +extern char *gettext __P ((__const char *__msgid)); +extern char *__gettext __P ((__const char *__msgid)); + +/* Look up MSGID in the DOMAINNAME message catalog for the current + LC_MESSAGES locale. */ +extern char *dgettext __P ((__const char *__domainname, + __const char *__msgid)); +extern char *__dgettext __P ((__const char *__domainname, + __const char *__msgid)); + +/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY + locale. */ +extern char *dcgettext __P ((__const char *__domainname, + __const char *__msgid, int __category)); +extern char *__dcgettext __P ((__const char *__domainname, + __const char *__msgid, int __category)); + + +/* Set the current default message catalog to DOMAINNAME. + If DOMAINNAME is null, return the current default. + If DOMAINNAME is "", reset to the default of "messages". */ +extern char *textdomain __P ((__const char *__domainname)); +extern char *__textdomain __P ((__const char *__domainname)); + +/* Specify that the DOMAINNAME message catalog will be found + in DIRNAME rather than in the system locale data base. */ +extern char *bindtextdomain __P ((__const char *__domainname, + __const char *__dirname)); +extern char *__bindtextdomain __P ((__const char *__domainname, + __const char *__dirname)); + + +/* Optimized version of the function above. */ +#if defined __OPTIMIZE__ + +/* We need NULL for `gettext'. */ +# define __need_NULL +# include <stddef.h> + +/* We need LC_MESSAGES for `dgettext'. */ +# include <locale.h> + +/* These must be macros. Inlined functions are useless because the + `__builtin_constant_p' predicate in dcgettext would always return + false. */ + +# define gettext(msgid) dgettext (NULL, msgid) + +# define dgettext(domainname, msgid) \ + dcgettext (domainname, msgid, LC_MESSAGES) + +# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +/* Variable defined in loadmsgcat.c which gets incremented every time a + new catalog is loaded. */ +extern int _nl_msg_cat_cntr; + +# define dcgettext(domainname, msgid, category) \ + (__extension__ \ + ({ \ + char *__result; \ + if (__builtin_constant_p (msgid)) \ + { \ + static char *__translation__; \ + static int __catalog_counter__; \ + if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \ + { \ + __translation__ = \ + __dcgettext ((domainname), (msgid), (category)); \ + __catalog_counter__ = _nl_msg_cat_cntr; \ + } \ + __result = __translation__; \ + } \ + else \ + __result = __dcgettext ((domainname), (msgid), (category)); \ + __result; \ + })) +# endif +#endif /* Optimizing. */ + + +__END_DECLS + +#endif /* libintl.h */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/linux-msg.sed b/debian/gettext-kde/gettext-kde-0.10.35/intl/linux-msg.sed new file mode 100755 index 00000000..5918e720 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/linux-msg.sed @@ -0,0 +1,100 @@ +# po2msg.sed - Convert Uniforum style .po file to Linux style .msg file +# Copyright (C) 1995 Free Software Foundation, Inc. +# Ulrich Drepper <[email protected]>, 1995. +# +# 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, 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. +# +# +# The first directive in the .msg should be the definition of the +# message set number. We use always set number 1. +# +1 { + i\ +$set 1 # Automatically created by po2msg.sed + h + s/.*/0/ + x +} +# +# Mitch's old catalog format does not allow comments. +# +# We copy the original message as a comment into the .msg file. +# +/^msgid/ { + s/msgid[ ]*"// +# +# This does not work now with the new format. +# /"$/! { +# s/\\$// +# s/$/ ... (more lines following)"/ +# } + x +# The following nice solution is by +# Bruno <[email protected]> + td +# Increment a decimal number in pattern space. +# First hide trailing `9' digits. + :d + s/9\(_*\)$/_\1/ + td +# Assure at least one digit is available. + s/^\(_*\)$/0\1/ +# Increment the last digit. + s/8\(_*\)$/9\1/ + s/7\(_*\)$/8\1/ + s/6\(_*\)$/7\1/ + s/5\(_*\)$/6\1/ + s/4\(_*\)$/5\1/ + s/3\(_*\)$/4\1/ + s/2\(_*\)$/3\1/ + s/1\(_*\)$/2\1/ + s/0\(_*\)$/1\1/ +# Convert the hidden `9' digits to `0's. + s/_/0/g + x + G + s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p +} +# +# The .msg file contains, other then the .po file, only the translations +# but each given a unique ID. Starting from 1 and incrementing by 1 for +# each message we assign them to the messages. +# It is important that the .po file used to generate the cat-id-tbl.c file +# (with po-to-tbl) is the same as the one used here. (At least the order +# of declarations must not be changed.) +# +/^msgstr/ { + s/msgstr[ ]*"\(.*\)"/# \1/ +# Clear substitution flag. + tb +# Append the next line. + :b + N +# Look whether second part is continuation line. + s/\(.*\n\)"\(.*\)"/\1\2/ +# Yes, then branch. + ta + P + D +# Note that D includes a jump to the start!! +# We found a continuation line. But before printing insert '\'. + :a + s/\(.*\)\(\n.*\)/\1\\\2/ + P +# We cannot use D here. + s/.*\n\(.*\)/\1/ + tb +} +d diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/loadinfo.h b/debian/gettext-kde/gettext-kde-0.10.35/intl/loadinfo.h new file mode 100644 index 00000000..f4ebf6d8 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/loadinfo.h @@ -0,0 +1,76 @@ +/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <[email protected]>, 1996. + + 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, 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. */ + +#ifndef PARAMS +# if __STDC__ +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif +#endif + +/* Encoding of locale name parts. */ +#define CEN_REVISION 1 +#define CEN_SPONSOR 2 +#define CEN_SPECIAL 4 +#define XPG_NORM_CODESET 8 +#define XPG_CODESET 16 +#define TERRITORY 32 +#define CEN_AUDIENCE 64 +#define XPG_MODIFIER 128 + +#define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE) +#define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER) + + +struct loaded_l10nfile +{ + const char *filename; + int decided; + + const void *data; + + struct loaded_l10nfile *next; + struct loaded_l10nfile *successor[1]; +}; + + +extern const char *_nl_normalize_codeset PARAMS ((const unsigned char *codeset, + size_t name_len)); + +extern struct loaded_l10nfile * +_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list, + const char *dirlist, size_t dirlist_len, int mask, + const char *language, const char *territory, + const char *codeset, + const char *normalized_codeset, + const char *modifier, const char *special, + const char *sponsor, const char *revision, + const char *filename, int do_allocate)); + + +extern const char *_nl_expand_alias PARAMS ((const char *name)); + +extern int _nl_explode_name PARAMS ((char *name, const char **language, + const char **modifier, + const char **territory, + const char **codeset, + const char **normalized_codeset, + const char **special, + const char **sponsor, + const char **revision)); diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/loadmsgcat.c b/debian/gettext-kde/gettext-kde-0.10.35/intl/loadmsgcat.c new file mode 100644 index 00000000..515892df --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/loadmsgcat.c @@ -0,0 +1,222 @@ +/* Load needed message catalogs. + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <fcntl.h> +#include <sys/types.h> +#include <sys/stat.h> + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#endif + +#if defined HAVE_UNISTD_H || defined _LIBC +# include <unistd.h> +#endif + +#if (defined HAVE_MMAP && defined HAVE_MUNMAP) || defined _LIBC +# include <sys/mman.h> +#endif + +#include "gettext.h" +#include "gettextP.h" + +/* @@ end of prolog @@ */ + +#ifdef _LIBC +/* Rename the non ISO C functions. This is required by the standard + because some ISO C functions will require linking with this object + file and the name space must not be polluted. */ +# define open __open +# define close __close +# define read __read +# define mmap __mmap +# define munmap __munmap +#endif + +/* We need a sign, whether a new catalog was loaded, which can be associated + with all translations. This is important if the translations are + cached by one of GCC's features. */ +int _nl_msg_cat_cntr = 0; + + +/* Load the message catalogs specified by FILENAME. If it is no valid + message catalog do nothing. */ +void +internal_function +_nl_load_domain (domain_file) + struct loaded_l10nfile *domain_file; +{ + int fd; + size_t size; + struct stat st; + struct mo_file_header *data = (struct mo_file_header *) -1; +#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ + || defined _LIBC + int use_mmap = 0; +#endif + struct loaded_domain *domain; + + domain_file->decided = 1; + domain_file->data = NULL; + + /* If the record does not represent a valid locale the FILENAME + might be NULL. This can happen when according to the given + specification the locale file name is different for XPG and CEN + syntax. */ + if (domain_file->filename == NULL) + return; + + /* Try to open the addressed file. */ + fd = open (domain_file->filename, O_RDONLY); + if (fd == -1) + return; + + /* We must know about the size of the file. */ + if (fstat (fd, &st) != 0 + || (size = (size_t) st.st_size) != st.st_size + || size < sizeof (struct mo_file_header)) + { + /* Something went wrong. */ + close (fd); + return; + } + +#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ + || defined _LIBC + /* Now we are ready to load the file. If mmap() is available we try + this first. If not available or it failed we try to load it. */ + data = (struct mo_file_header *) mmap (NULL, size, PROT_READ, + MAP_PRIVATE, fd, 0); + + if (data != (struct mo_file_header *) -1) + { + /* mmap() call was successful. */ + close (fd); + use_mmap = 1; + } +#endif + + /* If the data is not yet available (i.e. mmap'ed) we try to load + it manually. */ + if (data == (struct mo_file_header *) -1) + { + size_t to_read; + char *read_ptr; + + data = (struct mo_file_header *) malloc (size); + if (data == NULL) + return; + + to_read = size; + read_ptr = (char *) data; + do + { + long int nb = (long int) read (fd, read_ptr, to_read); + if (nb == -1) + { + close (fd); + return; + } + + read_ptr += nb; + to_read -= nb; + } + while (to_read > 0); + + close (fd); + } + + /* Using the magic number we can test whether it really is a message + catalog file. */ + if (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED) + { + /* The magic number is wrong: not a message catalog file. */ +#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ + || defined _LIBC + if (use_mmap) + munmap ((caddr_t) data, size); + else +#endif + free (data); + return; + } + + domain_file->data + = (struct loaded_domain *) malloc (sizeof (struct loaded_domain)); + if (domain_file->data == NULL) + return; + + domain = (struct loaded_domain *) domain_file->data; + domain->data = (char *) data; +#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ + || defined _LIBC + domain->use_mmap = use_mmap; +#endif + domain->mmap_size = size; + domain->must_swap = data->magic != _MAGIC; + + /* Fill in the information about the available tables. */ + switch (W (domain->must_swap, data->revision)) + { + case 0: + domain->nstrings = W (domain->must_swap, data->nstrings); + domain->orig_tab = (struct string_desc *) + ((char *) data + W (domain->must_swap, data->orig_tab_offset)); + domain->trans_tab = (struct string_desc *) + ((char *) data + W (domain->must_swap, data->trans_tab_offset)); + domain->hash_size = W (domain->must_swap, data->hash_tab_size); + domain->hash_tab = (nls_uint32 *) + ((char *) data + W (domain->must_swap, data->hash_tab_offset)); + break; + default: + /* This is an illegal revision. */ +#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ + || defined _LIBC + if (use_mmap) + munmap ((caddr_t) data, size); + else +#endif + free (data); + free (domain); + domain_file->data = NULL; + return; + } + + /* Show that one domain is changed. This might make some cached + translations invalid. */ + ++_nl_msg_cat_cntr; +} + + +#ifdef _LIBC +void +internal_function +_nl_unload_domain (domain) + struct loaded_domain *domain; +{ + if (domain->use_mmap) + munmap ((caddr_t) domain->data, domain->mmap_size); + else + free ((void *) domain->data); + + free (domain); +} +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/localealias.c b/debian/gettext-kde/gettext-kde-0.10.35/intl/localealias.c new file mode 100644 index 00000000..bca555a6 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/localealias.c @@ -0,0 +1,424 @@ +/* Handle aliases for locale names. + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Written by Ulrich Drepper <[email protected]>, 1995. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <ctype.h> +#include <stdio.h> +#include <sys/types.h> + +#ifdef __GNUC__ +# define alloca __builtin_alloca +# define HAVE_ALLOCA 1 +#else +# if defined HAVE_ALLOCA_H || defined _LIBC +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca +char *alloca (); +# endif +# endif +# endif +#endif + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#else +char *getenv (); +# ifdef HAVE_MALLOC_H +# include <malloc.h> +# else +void free (); +# endif +#endif + +#if defined HAVE_STRING_H || defined _LIBC +# ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +# endif +# include <string.h> +#else +# include <strings.h> +# ifndef memcpy +# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) +# endif +#endif +#if !HAVE_STRCHR && !defined _LIBC +# ifndef strchr +# define strchr index +# endif +#endif + +#include "gettext.h" +#include "gettextP.h" + +/* @@ end of prolog @@ */ + +#ifdef _LIBC +/* Rename the non ANSI C functions. This is required by the standard + because some ANSI C functions will require linking with this object + file and the name space must not be polluted. */ +# define strcasecmp __strcasecmp + +# define mempcpy __mempcpy +# define HAVE_MEMPCPY 1 + +/* We need locking here since we can be called from different places. */ +# include <bits/libc-lock.h> + +__libc_lock_define_initialized (static, lock); +#endif + + +/* For those loosing systems which don't have `alloca' we have to add + some additional code emulating it. */ +#ifdef HAVE_ALLOCA +/* Nothing has to be done. */ +# define ADD_BLOCK(list, address) /* nothing */ +# define FREE_BLOCKS(list) /* nothing */ +#else +struct block_list +{ + void *address; + struct block_list *next; +}; +# define ADD_BLOCK(list, addr) \ + do { \ + struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ + /* If we cannot get a free block we cannot add the new element to \ + the list. */ \ + if (newp != NULL) { \ + newp->address = (addr); \ + newp->next = (list); \ + (list) = newp; \ + } \ + } while (0) +# define FREE_BLOCKS(list) \ + do { \ + while (list != NULL) { \ + struct block_list *old = list; \ + list = list->next; \ + free (old); \ + } \ + } while (0) +# undef alloca +# define alloca(size) (malloc (size)) +#endif /* have alloca */ + + +struct alias_map +{ + const char *alias; + const char *value; +}; + + +static char *string_space = NULL; +static size_t string_space_act = 0; +static size_t string_space_max = 0; +static struct alias_map *map; +static size_t nmap = 0; +static size_t maxmap = 0; + + +/* Prototypes for local functions. */ +static size_t read_alias_file PARAMS ((const char *fname, int fname_len)) + internal_function; +static void extend_alias_table PARAMS ((void)); +static int alias_compare PARAMS ((const struct alias_map *map1, + const struct alias_map *map2)); + + +const char * +_nl_expand_alias (name) + const char *name; +{ + static const char *locale_alias_path = LOCALE_ALIAS_PATH; + struct alias_map *retval; + const char *result = NULL; + size_t added; + +#ifdef _LIBC + __libc_lock_lock (lock); +#endif + + do + { + struct alias_map item; + + item.alias = name; + + if (nmap > 0) + retval = (struct alias_map *) bsearch (&item, map, nmap, + sizeof (struct alias_map), + (int (*) PARAMS ((const void *, + const void *)) + ) alias_compare); + else + retval = NULL; + + /* We really found an alias. Return the value. */ + if (retval != NULL) + { + result = retval->value; + break; + } + + /* Perhaps we can find another alias file. */ + added = 0; + while (added == 0 && locale_alias_path[0] != '\0') + { + const char *start; + + while (locale_alias_path[0] == ':') + ++locale_alias_path; + start = locale_alias_path; + + while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':') + ++locale_alias_path; + + if (start < locale_alias_path) + added = read_alias_file (start, locale_alias_path - start); + } + } + while (added != 0); + +#ifdef _LIBC + __libc_lock_unlock (lock); +#endif + + return result; +} + + +static size_t +internal_function +read_alias_file (fname, fname_len) + const char *fname; + int fname_len; +{ +#ifndef HAVE_ALLOCA + struct block_list *block_list = NULL; +#endif + FILE *fp; + char *full_fname; + size_t added; + static const char aliasfile[] = "/locale.alias"; + + full_fname = (char *) alloca (fname_len + sizeof aliasfile); + ADD_BLOCK (block_list, full_fname); +#ifdef HAVE_MEMPCPY + mempcpy (mempcpy (full_fname, fname, fname_len), + aliasfile, sizeof aliasfile); +#else + memcpy (full_fname, fname, fname_len); + memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile); +#endif + + fp = fopen (full_fname, "r"); + if (fp == NULL) + { + FREE_BLOCKS (block_list); + return 0; + } + + added = 0; + while (!feof (fp)) + { + /* It is a reasonable approach to use a fix buffer here because + a) we are only interested in the first two fields + b) these fields must be usable as file names and so must not + be that long + */ + unsigned char buf[BUFSIZ]; + unsigned char *alias; + unsigned char *value; + unsigned char *cp; + + if (fgets (buf, sizeof buf, fp) == NULL) + /* EOF reached. */ + break; + + /* Possibly not the whole line fits into the buffer. Ignore + the rest of the line. */ + if (strchr (buf, '\n') == NULL) + { + char altbuf[BUFSIZ]; + do + if (fgets (altbuf, sizeof altbuf, fp) == NULL) + /* Make sure the inner loop will be left. The outer loop + will exit at the `feof' test. */ + break; + while (strchr (altbuf, '\n') == NULL); + } + + cp = buf; + /* Ignore leading white space. */ + while (isspace (cp[0])) + ++cp; + + /* A leading '#' signals a comment line. */ + if (cp[0] != '\0' && cp[0] != '#') + { + alias = cp++; + while (cp[0] != '\0' && !isspace (cp[0])) + ++cp; + /* Terminate alias name. */ + if (cp[0] != '\0') + *cp++ = '\0'; + + /* Now look for the beginning of the value. */ + while (isspace (cp[0])) + ++cp; + + if (cp[0] != '\0') + { + size_t alias_len; + size_t value_len; + + value = cp++; + while (cp[0] != '\0' && !isspace (cp[0])) + ++cp; + /* Terminate value. */ + if (cp[0] == '\n') + { + /* This has to be done to make the following test + for the end of line possible. We are looking for + the terminating '\n' which do not overwrite here. */ + *cp++ = '\0'; + *cp = '\n'; + } + else if (cp[0] != '\0') + *cp++ = '\0'; + + if (nmap >= maxmap) + extend_alias_table (); + + alias_len = strlen (alias) + 1; + value_len = strlen (value) + 1; + + if (string_space_act + alias_len + value_len > string_space_max) + { + /* Increase size of memory pool. */ + size_t new_size = (string_space_max + + (alias_len + value_len > 1024 + ? alias_len + value_len : 1024)); + char *new_pool = (char *) realloc (string_space, new_size); + if (new_pool == NULL) + { + FREE_BLOCKS (block_list); + return added; + } + string_space = new_pool; + string_space_max = new_size; + } + + map[nmap].alias = memcpy (&string_space[string_space_act], + alias, alias_len); + string_space_act += alias_len; + + map[nmap].value = memcpy (&string_space[string_space_act], + value, value_len); + string_space_act += value_len; + + ++nmap; + ++added; + } + } + } + + /* Should we test for ferror()? I think we have to silently ignore + errors. --drepper */ + fclose (fp); + + if (added > 0) + qsort (map, nmap, sizeof (struct alias_map), + (int (*) PARAMS ((const void *, const void *))) alias_compare); + + FREE_BLOCKS (block_list); + return added; +} + + +static void +extend_alias_table () +{ + size_t new_size; + struct alias_map *new_map; + + new_size = maxmap == 0 ? 100 : 2 * maxmap; + new_map = (struct alias_map *) realloc (map, (new_size + * sizeof (struct alias_map))); + if (new_map == NULL) + /* Simply don't extend: we don't have any more core. */ + return; + + map = new_map; + maxmap = new_size; +} + + +#ifdef _LIBC +static void __attribute__ ((unused)) +free_mem (void) +{ + if (string_space != NULL) + free (string_space); + if (map != NULL) + free (map); +} +text_set_element (__libc_subfreeres, free_mem); +#endif + + +static int +alias_compare (map1, map2) + const struct alias_map *map1; + const struct alias_map *map2; +{ +#if defined _LIBC || defined HAVE_STRCASECMP + return strcasecmp (map1->alias, map2->alias); +#else + const unsigned char *p1 = (const unsigned char *) map1->alias; + const unsigned char *p2 = (const unsigned char *) map2->alias; + unsigned char c1, c2; + + if (p1 == p2) + return 0; + + do + { + /* I know this seems to be odd but the tolower() function in + some systems libc cannot handle nonalpha characters. */ + c1 = isupper (*p1) ? tolower (*p1) : *p1; + c2 = isupper (*p2) ? tolower (*p2) : *p2; + if (c1 == '\0') + break; + ++p1; + ++p2; + } + while (c1 == c2); + + return c1 - c2; +#endif +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/po2tbl.sed.in b/debian/gettext-kde/gettext-kde-0.10.35/intl/po2tbl.sed.in new file mode 100755 index 00000000..b3bcca4d --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/po2tbl.sed.in @@ -0,0 +1,102 @@ +# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets +# Copyright (C) 1995 Free Software Foundation, Inc. +# Ulrich Drepper <[email protected]>, 1995. +# +# 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, 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. +# +1 { + i\ +/* Automatically generated by po2tbl.sed from @PACKAGE [email protected]. */\ +\ +#if HAVE_CONFIG_H\ +# include <config.h>\ +#endif\ +\ +#include "libgettext.h"\ +\ +const struct _msg_ent _msg_tbl[] = { + h + s/.*/0/ + x +} +# +# Write msgid entries in C array form. +# +/^msgid/ { + s/msgid[ ]*\(".*"\)/ {\1/ + tb +# Append the next line + :b + N +# Look whether second part is continuation line. + s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/ +# Yes, then branch. + ta +# Because we assume that the input file correctly formed the line +# just read cannot be again be a msgid line. So it's safe to ignore +# it. + s/\(.*\)\n.*/\1/ + bc +# We found a continuation line. But before printing insert '\'. + :a + s/\(.*\)\(\n.*\)/\1\\\2/ + P +# We cannot use D here. + s/.*\n\(.*\)/\1/ +# Some buggy seds do not clear the `successful substitution since last ``t''' +# flag on `N', so we do a `t' here to clear it. + tb +# Not reached + :c + x +# The following nice solution is by +# Bruno <[email protected]> + td +# Increment a decimal number in pattern space. +# First hide trailing `9' digits. + :d + s/9\(_*\)$/_\1/ + td +# Assure at least one digit is available. + s/^\(_*\)$/0\1/ +# Increment the last digit. + s/8\(_*\)$/9\1/ + s/7\(_*\)$/8\1/ + s/6\(_*\)$/7\1/ + s/5\(_*\)$/6\1/ + s/4\(_*\)$/5\1/ + s/3\(_*\)$/4\1/ + s/2\(_*\)$/3\1/ + s/1\(_*\)$/2\1/ + s/0\(_*\)$/1\1/ +# Convert the hidden `9' digits to `0's. + s/_/0/g + x + G + s/\(.*\)\n\([0-9]*\)/\1, \2},/ + s/\(.*\)"$/\1/ + p +} +# +# Last line. +# +$ { + i\ +};\ + + g + s/0*\(.*\)/int _msg_tbl_length = \1;/p +} +d diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/textdomain.c b/debian/gettext-kde/gettext-kde-0.10.35/intl/textdomain.c new file mode 100644 index 00000000..88557460 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/textdomain.c @@ -0,0 +1,108 @@ +/* Implementation of the textdomain(3) function. + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Written by Ulrich Drepper <[email protected]>, 1995. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#endif + +#if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC +# include <string.h> +#else +# include <strings.h> +# ifndef memcpy +# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) +# endif +#endif + +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgettext.h" +#endif + +/* @@ end of prolog @@ */ + +/* Name of the default text domain. */ +extern const char _nl_default_default_domain[]; + +/* Default text domain in which entries for gettext(3) are to be found. */ +extern const char *_nl_current_default_domain; + + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define TEXTDOMAIN __textdomain +# ifndef strdup +# define strdup(str) __strdup (str) +# endif +#else +# define TEXTDOMAIN textdomain__ +#endif + +/* Set the current default message catalog to DOMAINNAME. + If DOMAINNAME is null, return the current default. + If DOMAINNAME is "", reset to the default of "messages". */ +char * +TEXTDOMAIN (domainname) + const char *domainname; +{ + char *old; + + /* A NULL pointer requests the current setting. */ + if (domainname == NULL) + return (char *) _nl_current_default_domain; + + old = (char *) _nl_current_default_domain; + + /* If domain name is the null string set to default domain "messages". */ + if (domainname[0] == '\0' + || strcmp (domainname, _nl_default_default_domain) == 0) + _nl_current_default_domain = _nl_default_default_domain; + else + { + /* If the following malloc fails `_nl_current_default_domain' + will be NULL. This value will be returned and so signals we + are out of core. */ +#if defined _LIBC || defined HAVE_STRDUP + _nl_current_default_domain = strdup (domainname); +#else + size_t len = strlen (domainname) + 1; + char *cp = (char *) malloc (len); + if (cp != NULL) + memcpy (cp, domainname, len); + _nl_current_default_domain = cp; +#endif + } + + if (old != _nl_default_default_domain) + free (old); + + return (char *) _nl_current_default_domain; +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__textdomain, textdomain); +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/intl/xopen-msg.sed b/debian/gettext-kde/gettext-kde-0.10.35/intl/xopen-msg.sed new file mode 100755 index 00000000..b19c0bbd --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/intl/xopen-msg.sed @@ -0,0 +1,104 @@ +# po2msg.sed - Convert Uniforum style .po file to X/Open style .msg file +# Copyright (C) 1995 Free Software Foundation, Inc. +# Ulrich Drepper <[email protected]>, 1995. +# +# 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, 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. +# +# +# The first directive in the .msg should be the definition of the +# message set number. We use always set number 1. +# +1 { + i\ +$set 1 # Automatically created by po2msg.sed + h + s/.*/0/ + x +} +# +# We copy all comments into the .msg file. Perhaps they can help. +# +/^#/ s/^#[ ]*/$ /p +# +# We copy the original message as a comment into the .msg file. +# +/^msgid/ { +# Does not work now +# /"$/! { +# s/\\$// +# s/$/ ... (more lines following)"/ +# } + s/^msgid[ ]*"\(.*\)"$/$ Original Message: \1/ + p +} +# +# The .msg file contains, other then the .po file, only the translations +# but each given a unique ID. Starting from 1 and incrementing by 1 for +# each message we assign them to the messages. +# It is important that the .po file used to generate the cat-id-tbl.c file +# (with po-to-tbl) is the same as the one used here. (At least the order +# of declarations must not be changed.) +# +/^msgstr/ { + s/msgstr[ ]*"\(.*\)"/\1/ + x +# The following nice solution is by +# Bruno <[email protected]> + td +# Increment a decimal number in pattern space. +# First hide trailing `9' digits. + :d + s/9\(_*\)$/_\1/ + td +# Assure at least one digit is available. + s/^\(_*\)$/0\1/ +# Increment the last digit. + s/8\(_*\)$/9\1/ + s/7\(_*\)$/8\1/ + s/6\(_*\)$/7\1/ + s/5\(_*\)$/6\1/ + s/4\(_*\)$/5\1/ + s/3\(_*\)$/4\1/ + s/2\(_*\)$/3\1/ + s/1\(_*\)$/2\1/ + s/0\(_*\)$/1\1/ +# Convert the hidden `9' digits to `0's. + s/_/0/g + x +# Bring the line in the format `<number> <message>' + G + s/^[^\n]*$/& / + s/\(.*\)\n\([0-9]*\)/\2 \1/ +# Clear flag from last substitution. + tb +# Append the next line. + :b + N +# Look whether second part is a continuation line. + s/\(.*\n\)"\(.*\)"/\1\2/ +# Yes, then branch. + ta + P + D +# Note that `D' includes a jump to the start!! +# We found a continuation line. But before printing insert '\'. + :a + s/\(.*\)\(\n.*\)/\1\\\2/ + P +# We cannot use the sed command `D' here + s/.*\n\(.*\)/\1/ + tb +} +d diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/ChangeLog b/debian/gettext-kde/gettext-kde-0.10.35/lib/ChangeLog new file mode 100644 index 00000000..5c50e664 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/ChangeLog @@ -0,0 +1,494 @@ +1998-04-29 Ulrich Drepper <[email protected]> + + * printf-parse.h: Use unsigned char for parameters to read_int and + parse_one_spec (for loosing Solaris systems). + Patch by Jim Meyering. + +1998-04-28 11:42 Ulrich Drepper <[email protected]> + + * hash.c: Include malloc.h if stdlib.h is not available. + Include either string.h or strings.h. + + * system.h: Include limits.h before defining MAX to prevent + redefinitions. + + * Makefile.am: Move basename.c from EXTRA_DIST to libnlsut_a_SOURCES. + +1998-04-27 20:51 Ulrich Drepper <[email protected]> + + * Makefile (EXTRA_DIST): Remove obstack.c here. + (libnlsut_a_SOURCES): Add obstack.c here. + + * alloca.c: Include string.h and stdlib.h if available. Fix typos. + + * getopt.c: Update from glibc version. + + * hash.c: Include stdlib.h. Use #if instead of #ifdef while testing + HAVE_* macros. Don't include system.h. + + * printf-parse.h: Use #if instead of #ifdef. + +1997-08-18 13:47 Philippe De Muyter <[email protected]> + + * xstrdup.c (sys/types.h): File included. + * system.h (strstr): Function prototype added. + +1997-08-15 03:01 Ulrich Drepper <[email protected]> + + * stpcpy.c, stpncpy.c: Copy version from glibc to fix severe bugs. + +1997-08-01 15:47 Ulrich Drepper <[email protected]> + + * Makefile.am (AUTOMAKE_OPTIONS): Require version 1.2. + +Mon Mar 10 06:52:59 1997 Ulrich Drepper <[email protected]> + + * xstrdup.c: Add more compatibility handling. Pretty-print + preprocessor directives. + + * printf-parse.h: Define _GNU_SOURCE not __USE_GNU. + + * Makefile.am: Change for use with automake-1.1. + +1997-02-08 04:26 Ulrich Drepper <[email protected]> + + * stpncpy.c: Update from version in GNU libc 2.0. This corrects + a long standing bug in xgettext. + +Fri Dec 6 04:20:56 1996 Ulrich Drepper <[email protected]> + + * system.h: Use PARAMS not __P for basename prototype. + Reported by Kaveh R. Ghazi <[email protected]>. + +Tue Dec 3 17:50:34 1996 Ulrich Drepper <[email protected]> + + * system.h: Add prototype for basename. + + * Makefile.am (EXTRA_DIST): Add basename.c. + +Fri Nov 22 03:32:34 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (EXTRA_DIST): Rename strncase.c to strncasecmp.c. + +Sat Aug 31 04:52:56 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (nlsut_SOURCES): Move error.c to EXTRA_DIST. + +Wed Jun 19 02:45:02 1996 Ulrich Drepper <[email protected]> + + * system.h: Add prototypes for stpncpy, strcasecmp, and + strncasecmp. + + * Makefile.am (EXTRA_DIST): Add strncase and stpncpy. + +Fri Jun 14 03:56:23 1996 Ulrich Drepper <[email protected]> + + * getline.c (_GNU_SOURCE): Define this macro, not __USE_GNU. + + * Makefile.am (nlsut_SOURCES): Move getline.c and printf-prs.c to + EXTRA_DIST. Reported by Kaveh R. Ghazi. + +Tue Jun 11 15:28:17 1996 Ulrich Drepper <[email protected]> + + * printf-prs.c: Add some casts for `n'. + + * printf-parse.h: Add prototypes and __USE_GNU definition. + + * getline.c: Define __USE_GNU to get prototype. + + * Makefile.am (AUTOMAKE_OPTIONS): Add variable. Must be defined + in all subdirs. + +Wed Jun 5 16:54:43 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (INCLUDES): Define include paths to intl/ dir for + <libintl.h> file. + +Mon Jun 3 19:13:36 1996 Ulrich Drepper <[email protected]> + + * getopt.c: Update from latest GNU libc source. We don't need + the AC_REPLACE_GNU_GETOPT anymore. + + * Makefile.am (EXTRA_DIST): Remove files mentioned in + nlsut_SOURCES from EXTRA_DIST. + (nlsut_SOURCES): Add getopt.c and getopt1.c. + +Wed Apr 24 23:48:42 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (GETOPT): Remove variable. + (OBJECTS): Don't use $(GETOPT). If not present the getopt are now + listed in @LIBOBJS@. + +Fri Apr 5 12:00:51 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (SOURCES): Remove whoami.c. + (OBJECTS): Remove whoami.o. + + * system.h: Remove prototype for `get_submitter'. + +Thu Apr 4 21:14:51 1996 Ulrich Drepper <drepper@myware> + + * system.h: Add prototype for asprintf. + +Tue Apr 2 18:53:38 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (all-gettext): New goal. Same as all. + +Tue Apr 2 12:57:44 1996 Ulrich Drepper <drepper@myware> + + * error.c, error.h: Update from version in GNU libc. + +Tue Mar 26 12:35:56 1996 Ulrich Drepper <drepper@myware> + + * error.c, error.h: Applied Fran�ois' patches for more + portability. + +Mon Mar 25 01:21:31 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (SOURCES): Add strstr.c. + +Sun Mar 24 18:41:42 1996 Ulrich Drepper <drepper@myware> + + * error.c (error_with_loc): In `one error per line' mode check for + old_file_name to be NULL first. Reported by Fran�ois Pinard. + +Fri Mar 1 13:38:26 1996 Ulrich Drepper <drepper@myware> + + * getopt.c: Update from latest version in GNU C Library. + * getopt1.c: Ditto. + * getopt.h: Ditto. + + * error.c (error_with_loc): Not simply compare string pointers to + test for same file name. + (error_with_loc): file_name parameter is really const. + + * error.c (error_one_per_line): New variable. + (error_with_loc): If error_one_per_line != 0, print at most one + error per line. + + * error.h: Declare new variable error_one_per_line. + +Mon Jan 1 03:12:08 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (GETOPTSRC): Remove this variable. + +Sat Dec 30 16:26:07 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (ERROR, ERRORSRC): New variables. error.c is now + part of GNU libc and will not be needed on systems running this + lib. + (SOURCES): Replace error.c with $(ERRORSRC). + (OBJECTS): Replace error.o with $(ERROR). + +Tue Dec 19 22:08:10 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (Makefile): Explicitly use $(SHELL) for running + shell scripts. + +Sat Dec 9 16:40:49 1995 Ulrich Drepper <drepper@myware> + + * whoami.c, system.h, printf.h, printf-parse.h, hash.h, hash.c, + getline.h, fstrcmp.h, fstrcmp.c, error.h, error.c: + Use PARAMS instead of __P. Suggested by Roland McGrath. + +Wed Dec 6 16:07:27 1995 [email protected] <Kaveh R. Ghazi> + + * system.h: Fix alloca declaration so that it matches the one + generated by bison on HPUX. + +Sat Nov 25 16:13:50 1995 Ulrich Drepper <drepper@myware> + + * whoami.c: Don't use #ifdef, prefer #if. + + * error.c: Capitalize arguments of macros. Patch by Franc,ois Pinard. + +Thu Nov 16 22:41:32 1995 Ulrich Drepper <drepper@myware> + + * whoami.c: Correct prototype declarations. + + * xmalloc.c: Include "error.h" instead of defining error ourself. + + * system.h: Include <stdio.h> to get FILE definition. + + * hash.c: Peter Miller suggested not to use `div' as a variable name. + + * error.c (error_print_progname): For ANSI C provide complete type. + Include error.h. Patches by Peter Miller. + +Sun Nov 12 12:34:12 1995 Ulrich Drepper <drepper@myware> + + * whoami.c: Add prototypes. + (get_submitter): Use stpcpy if available. + +Sat Nov 11 00:26:31 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (HEADERS): + Add missing pathmax.h file. Reported by Franc,ois Pinard. + +Fri Nov 10 09:59:06 1995 Ulrich Drepper <drepper@myware> + + * error.h (error_print_progname): + Provide real prototype, i.e. with argument types. + Patch by Peter Miller. + +Wed Nov 8 23:25:00 1995 Ulrich Drepper <drepper@myware> + + * system.h: Add prototype for xgetcwd. + + * Makefile.in (SOURCES): Add xgetcwd.c. + (OBJECTS): Add xgetcwd.o. + +Tue Nov 7 11:44:32 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (intldir): + New variable. Use its value instead of ../intl. + +Sun Nov 5 19:40:03 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist-gettext): Make synonym for dist. + +Sun Nov 5 18:04:11 1995 Ulrich Drepper <drepper@myware> + + * hash.c (find_entry): Remove unused variable retval. + +Sun Nov 5 11:38:19 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist): Suppress error message when ln failed. + Get files from $(srcdir) explicitly. + +Sat Oct 28 14:25:13 1995 Ulrich Drepper <drepper@myware> + + * fstrcmp.c: + Revised version by Peter Miller. Now based on GNU diff's version + of this algorithm. + +Wed Sep 27 20:18:44 1995 Ulrich Drepper <drepper@myware> + + * system.h: Include sys/types.h for those old SysV systems out there. + Reported by Francesco Potorti`. + +Mon Sep 25 22:26:28 1995 Ulrich Drepper <drepper@myware> + + * obstack.h (ptrdiff_t): + Don't define unless HAVE_PTRDIFF_T is not defined. This + solves problems with Sun's compiler. Reported by Marcus Daniels. + +Mon Sep 18 10:45:48 1995 Ulrich Drepper <drepper@myware> + + * fstrcmp.h, fstrcmp.c: Initial revision + +Sun Sep 17 23:37:15 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: Add fstrcmp.[ch] to libgettext. + + * system.h (open_po_file): Remove unused `use_path' parameter. + + * hash.c: + Rewrite for uniform return values: < 0 for error cases, else >= 0. + + * Makefile.in: hash.[ch] moved from src/ to lib/ subdirectory. + +Mon Aug 28 10:05:31 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: Remove Emacs hints. + + * Makefile.in (libnlsut.a): Use $@ instead of full name. + +Sat Aug 19 17:37:24 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (install-src): Make depend on `all'. + +Tue Aug 15 05:51:25 1995 Ulrich Drepper <drepper@myware> + + * system.h (xgetcwd): Remove prototype. + +Mon Aug 14 23:52:41 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (install-src): New no-op goal. + +Wed Aug 9 10:05:09 1995 Ulrich Drepper <drepper@myware> + + * system.h (MAX): + Mark GCC variant with __extension__ and change typeof to __typeof__. + +Tue Aug 8 21:02:28 1995 Ulrich Drepper <drepper@myware> + + * strcasecmp.c: Initial revision. + + * Makefile.in (SOURCES): Add strcasecmp.c. + +Mon Aug 7 21:17:51 1995 Ulrich Drepper <drepper@myware> + + * strcspn.c: Initial revision. + + * Makefile.in (SOURCES): Add strcspn.c. + +Fri Aug 4 15:44:00 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist): Remove `copying instead' message. + +Wed Aug 2 18:51:33 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (ID, TAGS): Do not use $^. + +Tue Aug 1 20:07:40 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (distclean): Remove ID file. + + * Makefile.in (TAGS, ID): Use $^ as command argument. + (TAGS): Give etags -o option t write to current directory, + not $(srcdir). + (ID): Use $(srcdir) instead os $(top_srcdir)/src. + +Wed Jul 19 23:54:32 1995 Ulrich Drepper <drepper@myware> + + * strtol.c: Change copyright from LGPL to GPL. + +Tue Jul 18 20:09:04 1995 Ulrich Drepper <drepper@myware> + + * strtol.c (ULONG_MAX): Define if not defined in system header. + Reported by Francesco Potorti`. + + * printf-parse.h (parse_one_spec): Define prototype. + + * obstack.h: Put stddef.h include statement back in. + +Tue Jul 18 00:19:54 1995 Ulrich Drepper <drepper@myware> + + * vasprintf.c, strtol.c, obstack.c, getopt1.c, getopt.c, system.h, + printf.h, obstack.h, getline.h: Uniform test for __STDC__. + +Mon Jul 17 01:13:09 1995 Ulrich Drepper <drepper@myware> + + * system.h (HAVE_MALLOC_H): + Remove obsolete #else case. Was needed when we tried + to define free ourself. + + * system.h, error.h, strtoul.c, printf-parse.h, memmove.c, + getline.h: Add `Free' to Software Foundation. + + * getline.h: + Remove unneeded comment after #endif. We now use indentation. + + * getline.c: Indent preprocessor directives. + + * strtol.c (NULL): Define manualy if not defined in any included file. + +Sat Jul 15 23:59:26 1995 Ulrich Drepper <drepper@myware> + + * obstack.h: Add accidently removed #endif. + +Sat Jul 15 23:31:45 1995 Ulrich Drepper <drepper@myware> + + * vasprintf.c, printf-prs.c, obstack.h, obstack.c, memmove.c, + printf.h, printf-parse.h: + Exchange old LGPL against new GPL (no LGPL code in normal packages). + + * getline.h: Add copyright. + + * strtoul.c, strtol.c: Initial revision + + * obstack.h (ptrdiff_t): + Don't include stddef.h. Try to get it with sys/types.h and + if _PTRDIFF_T and ptrdiff_t are not defined, define it to off_t + (which is at least defined in config.h). + + * system.h (HAVE_STDLIB_H): + Is not useful if STDC_HEADERS is not also defined. + +Sat Jul 15 00:49:22 1995 Ulrich Drepper <drepper@myware> + + * error.h: Correct definition of size_t: don't try to include + stddef.h, but instead use sys/types. If it is not found here, + the config.h file will define it. + + * system.h: Load <stdlib.h> before defining prototypes. This + avoids problems with size_t not defined in the prototypes. + + * printf-parse.h (find_spec): Handle missing mblen function. + +Thu Jul 13 22:28:38 1995 Ulrich Drepper <drepper@myware> + + * system.h (MAX): + Move definition to end to reduce possibility of redefinition. + + * whoami.c (get_username, get_hostname, get_submitter): + Use K&R prototypes. + + * vasprintf.c: Include config.h. + + * printf.h (printf_info): + Use `char' and `unsigned' instead of `unsigned char' and + `unsigned int' resp. to help these dumb K&R compilers. + + * printf-parse.h: + Compilers other than GCC don't have `long long', K&R compiler + even don't have `long double'. + +Thu Jul 13 01:41:41 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (check): New goal. + +Tue Jul 11 21:37:19 1995 Ulrich Drepper <drepper@myware> + + * vasprintf.c (HAVE_STRTOUL): + Not needed anymore because we substitute strtoul if not present. + +Tue Jul 11 01:34:06 1995 Ulrich Drepper <drepper@myware> + + * whoami.c: Define NULL is necessary. + + * obstack.h: Protect inclusion of stddef and define ptrdiff_t if + necessary. + + * memmove.c: Include sys/types.h and perhaps stdlib.h instead of + stddef.h for getting size_t defined. + + * system.h: Don't define free, qsort, and strtol when no header + file is available. + Define EXIT_{FAILURE,SUCCESS} after stdlib.h is included. + + * printf.h: Protect non-ANSI header inclusion. + Protect __P definition. + Don't use __const in prototypes. + + * printf-prs.c: Include config.h. + Protect stdlib.h inclusion. + + * printf-parse.h: Protect header inclusion for non-ANSI environments. + Protect and de-GCC-ify MAX/MIN definition. + + * Makefile.in (SOURCES): New files: strtol.c and strtoul.c. + Depend $(OBJECT) on config.h,, instead of $(LIBOBJS). + Better dependency for printf-prs.o. + +Tue Jul 4 22:09:00 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (SOURCES): add memmove.c. + + * memmove.c: Initial revision. + + * error.h: Make size_t definition correct for !__STDC__. + Include <stddef.h> for getting size_t defined. + + * vasprintf.c: Don't use strtoul if !HAVE_STRTOUL. + + * system.h: Include <stdlib.h> also if defined HAVE_STDLIB_H. + Make sure that qsort, free and strtoul are prototyped. + +Mon Jul 3 15:02:50 1995 Ulrich Drepper <drepper@myware> + + * system.h: system.h (MAX): don't use GCC feature if !__STDC__. + Fix typo in EXIT_FAILURE defintion. + + * xmalloc.c: Include prototype for calloc.c. + + * Makefile.in (INCLUDES): even better path list. + (INCLUDES): remove unnecessary paths. + Correct path to original version. + +Sun Jul 2 02:01:43 1995 Ulrich Drepper <drepper@myware> + + * First official release. This directory contains supplementary + code taken from GNU C Library and other package's lib/ + directories. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/Makefile.am b/debian/gettext-kde/gettext-kde-0.10.35/lib/Makefile.am new file mode 100644 index 00000000..3cab0b02 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/Makefile.am @@ -0,0 +1,36 @@ +## Makefile for the support lib subdirectory of the GNU NLS Utilities +## Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, 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. + +## Process this file with automake to produce Makefile.in. + +AUTOMAKE_OPTIONS = 1.2 gnits + +noinst_LIBRARIES = libnlsut.a + +EXTRA_DIST = alloca.c error.c getline.c memset.c memmove.c \ +printf-prs.c stpcpy.c stpncpy.c strcasecmp.c strcspn.c strncasecmp.c \ +strstr.c strtol.c strtoul.c vasprintf.c + +libnlsut_a_SOURCES = basename.c fstrcmp.c getopt.c getopt1.c hash.c obstack.c \ +xgetcwd.c xmalloc.c xstrdup.c + +libnlsut_a_LIBADD = @ALLOCA@ @LIBOBJS@ + +noinst_HEADERS = error.h fstrcmp.h getline.h getopt.h hash.h obstack.h \ +printf-parse.h printf.h system.h pathmax.h + +INCLUDES = -I../intl diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/Makefile.in b/debian/gettext-kde/gettext-kde-0.10.35/lib/Makefile.in new file mode 100644 index 00000000..29a0bd32 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/Makefile.in @@ -0,0 +1,325 @@ +# Makefile.in generated automatically by automake 1.3 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +ACLOCAL_VERSION = @ACLOCAL_VERSION@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +DATADIRNAME = @DATADIRNAME@ +EMACS = @EMACS@ +GENCAT = @GENCAT@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GT_NO = @GT_NO@ +GT_YES = @GT_YES@ +INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ +INSTOBJEXT = @INSTOBJEXT@ +INTLDEPS = @INTLDEPS@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +LD = @LD@ +LIBOBJS = @LIBOBJS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +NM = @NM@ +PACKAGE = @PACKAGE@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +YACC = @YACC@ +aclocaldir = @aclocaldir@ +l = @l@ +lispdir = @lispdir@ + +AUTOMAKE_OPTIONS = 1.2 gnits + +noinst_LIBRARIES = libnlsut.a + +EXTRA_DIST = alloca.c error.c getline.c memset.c memmove.c \ +printf-prs.c stpcpy.c stpncpy.c strcasecmp.c strcspn.c strncasecmp.c \ +strstr.c strtol.c strtoul.c vasprintf.c + +libnlsut_a_SOURCES = basename.c fstrcmp.c getopt.c getopt1.c hash.c obstack.c \ +xgetcwd.c xmalloc.c xstrdup.c + +libnlsut_a_LIBADD = @ALLOCA@ @LIBOBJS@ + +noinst_HEADERS = error.h fstrcmp.h getline.h getopt.h hash.h obstack.h \ +printf-parse.h printf.h system.h pathmax.h + +INCLUDES = -I../intl +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +LIBRARIES = $(noinst_LIBRARIES) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +libnlsut_a_DEPENDENCIES = @ALLOCA@ @LIBOBJS@ +libnlsut_a_OBJECTS = basename.o fstrcmp.o getopt.o getopt1.o hash.o \ +obstack.o xgetcwd.o xmalloc.o xstrdup.o +AR = ar +CFLAGS = @CFLAGS@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +HEADERS = $(noinst_HEADERS) + +DIST_COMMON = ChangeLog Makefile.am Makefile.in alloca.c error.c \ +error.h getline.c memmove.c memset.c printf-prs.c stpcpy.c stpncpy.c \ +strcspn.c strncasecmp.c strstr.c strtoul.c vasprintf.c + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP = --best +SOURCES = $(libnlsut_a_SOURCES) +OBJECTS = $(libnlsut_a_OBJECTS) + +all: Makefile $(LIBRARIES) $(HEADERS) + +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnits --include-deps lib/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-noinstLIBRARIES: + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + +distclean-noinstLIBRARIES: + +maintainer-clean-noinstLIBRARIES: + +.c.o: + $(COMPILE) -c $< + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +libnlsut.a: $(libnlsut_a_OBJECTS) $(libnlsut_a_DEPENDENCIES) + -rm -f libnlsut.a + $(AR) cru libnlsut.a $(libnlsut_a_OBJECTS) $(libnlsut_a_LIBADD) + $(RANLIB) libnlsut.a + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = lib + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done +basename.o: basename.c ../config.h +fstrcmp.o: fstrcmp.c ../config.h system.h fstrcmp.h +getopt.o: getopt.c ../config.h +getopt1.o: getopt1.c ../config.h getopt.h +hash.o: hash.c ../config.h obstack.h hash.h +obstack.o: obstack.c ../config.h obstack.h +xgetcwd.o: xgetcwd.c ../config.h pathmax.h +xmalloc.o: xmalloc.c ../config.h error.h +xstrdup.o: xstrdup.c ../config.h + +info: +dvi: +check: all + $(MAKE) +installcheck: +install-exec: + @$(NORMAL_INSTALL) + +install-data: + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-noinstLIBRARIES mostlyclean-compile \ + mostlyclean-libtool mostlyclean-tags \ + mostlyclean-generic + +clean: clean-noinstLIBRARIES clean-compile clean-libtool clean-tags \ + clean-generic mostlyclean + +distclean: distclean-noinstLIBRARIES distclean-compile \ + distclean-libtool distclean-tags distclean-generic \ + clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-noinstLIBRARIES \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-generic \ + distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ +clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile mostlyclean-libtool distclean-libtool \ +clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ +installcheck install-exec install-data install uninstall all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/alloca.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/alloca.c new file mode 100644 index 00000000..c1699c42 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/alloca.c @@ -0,0 +1,504 @@ +/* alloca.c -- allocate automatically reclaimed memory + (Mostly) portable public-domain implementation -- D A Gwyn + + This implementation of the PWB library alloca function, + which is used to allocate space off the run-time stack so + that it is automatically reclaimed upon procedure exit, + was inspired by discussions with J. Q. Johnson of Cornell. + J.Otto Tennant <[email protected]> contributed the Cray support. + + There are some preprocessor constants that can + be defined when compiling for your specific system, for + improved efficiency; however, the defaults should be okay. + + The general concept of this implementation is to keep + track of all alloca-allocated blocks, and reclaim any + that are found to be deeper in the stack than the current + invocation. This heuristic does not reclaim storage as + soon as it becomes invalid, but it will do so eventually. + + As a special case, alloca(0) reclaims storage without + allocating any. It is a good idea to use alloca(0) in + your main control loop, etc. to force garbage collection. */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#ifdef HAVE_STRING_H +#include <string.h> +#endif +#ifdef HAVE_STDLIB_H +#include <stdlib.h> +#endif + +#ifdef emacs +#include "blockinput.h" +#endif + +/* If compiling with GCC 2, this file's not needed. */ +#if !defined (__GNUC__) || __GNUC__ < 2 + +/* If someone has defined alloca as a macro, + there must be some other way alloca is supposed to work. */ +#ifndef alloca + +#ifdef emacs +#ifdef static +/* actually, only want this if static is defined as "" + -- this is for usg, in which emacs must undefine static + in order to make unexec workable + */ +#ifndef STACK_DIRECTION +you +lose +-- must know STACK_DIRECTION at compile-time +#endif /* STACK_DIRECTION undefined */ +#endif /* static */ +#endif /* emacs */ + +/* If your stack is a linked list of frames, you have to + provide an "address metric" ADDRESS_FUNCTION macro. */ + +#if defined (CRAY) && defined (CRAY_STACKSEG_END) +long i00afunc (); +#define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) +#else +#define ADDRESS_FUNCTION(arg) &(arg) +#endif + +#if __STDC__ +typedef void *pointer; +#else +typedef char *pointer; +#endif + +#ifndef NULL +#define NULL 0 +#endif + +/* Different portions of Emacs need to call different versions of + malloc. The Emacs executable needs alloca to call xmalloc, because + ordinary malloc isn't protected from input signals. On the other + hand, the utilities in lib-src need alloca to call malloc; some of + them are very simple, and don't have an xmalloc routine. + + Non-Emacs programs expect this to call xmalloc. + + Callers below should use malloc. */ + +#ifndef emacs +#define malloc xmalloc +#endif +extern pointer malloc (); + +/* Define STACK_DIRECTION if you know the direction of stack + growth for your system; otherwise it will be automatically + deduced at run-time. + + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ + +#ifndef STACK_DIRECTION +#define STACK_DIRECTION 0 /* Direction unknown. */ +#endif + +#if STACK_DIRECTION != 0 + +#define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ + +#else /* STACK_DIRECTION == 0; need run-time code. */ + +static int stack_dir; /* 1 or -1 once known. */ +#define STACK_DIR stack_dir + +static void +find_stack_direction () +{ + static char *addr = NULL; /* Address of first `dummy', once known. */ + auto char dummy; /* To get stack address. */ + + if (addr == NULL) + { /* Initial entry. */ + addr = ADDRESS_FUNCTION (dummy); + + find_stack_direction (); /* Recurse once. */ + } + else + { + /* Second entry. */ + if (ADDRESS_FUNCTION (dummy) > addr) + stack_dir = 1; /* Stack grew upward. */ + else + stack_dir = -1; /* Stack grew downward. */ + } +} + +#endif /* STACK_DIRECTION == 0 */ + +/* An "alloca header" is used to: + (a) chain together all alloca'ed blocks; + (b) keep track of stack depth. + + It is very important that sizeof(header) agree with malloc + alignment chunk size. The following default should work okay. */ + +#ifndef ALIGN_SIZE +#define ALIGN_SIZE sizeof(double) +#endif + +typedef union hdr +{ + char align[ALIGN_SIZE]; /* To force sizeof(header). */ + struct + { + union hdr *next; /* For chaining headers. */ + char *deep; /* For stack depth measure. */ + } h; +} header; + +static header *last_alloca_header = NULL; /* -> last alloca header. */ + +/* Return a pointer to at least SIZE bytes of storage, + which will be automatically reclaimed upon exit from + the procedure that called alloca. Originally, this space + was supposed to be taken from the current stack frame of the + caller, but that method cannot be made to work for some + implementations of C, for example under Gould's UTX/32. */ + +pointer +alloca (size) + unsigned size; +{ + auto char probe; /* Probes stack depth: */ + register char *depth = ADDRESS_FUNCTION (probe); + +#if STACK_DIRECTION == 0 + if (STACK_DIR == 0) /* Unknown growth direction. */ + find_stack_direction (); +#endif + + /* Reclaim garbage, defined as all alloca'd storage that + was allocated from deeper in the stack than currently. */ + + { + register header *hp; /* Traverses linked list. */ + +#ifdef emacs + BLOCK_INPUT; +#endif + + for (hp = last_alloca_header; hp != NULL;) + if ((STACK_DIR > 0 && hp->h.deep > depth) + || (STACK_DIR < 0 && hp->h.deep < depth)) + { + register header *np = hp->h.next; + + free ((pointer) hp); /* Collect garbage. */ + + hp = np; /* -> next header. */ + } + else + break; /* Rest are not deeper. */ + + last_alloca_header = hp; /* -> last valid storage. */ + +#ifdef emacs + UNBLOCK_INPUT; +#endif + } + + if (size == 0) + return NULL; /* No allocation required. */ + + /* Allocate combined header + user data storage. */ + + { + register pointer new = malloc (sizeof (header) + size); + /* Address of header. */ + + if (new == 0) + abort(); + + ((header *) new)->h.next = last_alloca_header; + ((header *) new)->h.deep = depth; + + last_alloca_header = (header *) new; + + /* User storage begins just after header. */ + + return (pointer) ((char *) new + sizeof (header)); + } +} + +#if defined (CRAY) && defined (CRAY_STACKSEG_END) + +#ifdef DEBUG_I00AFUNC +#include <stdio.h> +#endif + +#ifndef CRAY_STACK +#define CRAY_STACK +#ifndef CRAY2 +/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ +struct stack_control_header + { + long shgrow:32; /* Number of times stack has grown. */ + long shaseg:32; /* Size of increments to stack. */ + long shhwm:32; /* High water mark of stack. */ + long shsize:32; /* Current size of stack (all segments). */ + }; + +/* The stack segment linkage control information occurs at + the high-address end of a stack segment. (The stack + grows from low addresses to high addresses.) The initial + part of the stack segment linkage control information is + 0200 (octal) words. This provides for register storage + for the routine which overflows the stack. */ + +struct stack_segment_linkage + { + long ss[0200]; /* 0200 overflow words. */ + long sssize:32; /* Number of words in this segment. */ + long ssbase:32; /* Offset to stack base. */ + long:32; + long sspseg:32; /* Offset to linkage control of previous + segment of stack. */ + long:32; + long sstcpt:32; /* Pointer to task common address block. */ + long sscsnm; /* Private control structure number for + microtasking. */ + long ssusr1; /* Reserved for user. */ + long ssusr2; /* Reserved for user. */ + long sstpid; /* Process ID for pid based multi-tasking. */ + long ssgvup; /* Pointer to multitasking thread giveup. */ + long sscray[7]; /* Reserved for Cray Research. */ + long ssa0; + long ssa1; + long ssa2; + long ssa3; + long ssa4; + long ssa5; + long ssa6; + long ssa7; + long sss0; + long sss1; + long sss2; + long sss3; + long sss4; + long sss5; + long sss6; + long sss7; + }; + +#else /* CRAY2 */ +/* The following structure defines the vector of words + returned by the STKSTAT library routine. */ +struct stk_stat + { + long now; /* Current total stack size. */ + long maxc; /* Amount of contiguous space which would + be required to satisfy the maximum + stack demand to date. */ + long high_water; /* Stack high-water mark. */ + long overflows; /* Number of stack overflow ($STKOFEN) calls. */ + long hits; /* Number of internal buffer hits. */ + long extends; /* Number of block extensions. */ + long stko_mallocs; /* Block allocations by $STKOFEN. */ + long underflows; /* Number of stack underflow calls ($STKRETN). */ + long stko_free; /* Number of deallocations by $STKRETN. */ + long stkm_free; /* Number of deallocations by $STKMRET. */ + long segments; /* Current number of stack segments. */ + long maxs; /* Maximum number of stack segments so far. */ + long pad_size; /* Stack pad size. */ + long current_address; /* Current stack segment address. */ + long current_size; /* Current stack segment size. This + number is actually corrupted by STKSTAT to + include the fifteen word trailer area. */ + long initial_address; /* Address of initial segment. */ + long initial_size; /* Size of initial segment. */ + }; + +/* The following structure describes the data structure which trails + any stack segment. I think that the description in 'asdef' is + out of date. I only describe the parts that I am sure about. */ + +struct stk_trailer + { + long this_address; /* Address of this block. */ + long this_size; /* Size of this block (does not include + this trailer). */ + long unknown2; + long unknown3; + long link; /* Address of trailer block of previous + segment. */ + long unknown5; + long unknown6; + long unknown7; + long unknown8; + long unknown9; + long unknown10; + long unknown11; + long unknown12; + long unknown13; + long unknown14; + }; + +#endif /* CRAY2 */ +#endif /* not CRAY_STACK */ + +#ifdef CRAY2 +/* Determine a "stack measure" for an arbitrary ADDRESS. + I doubt that "lint" will like this much. */ + +static long +i00afunc (long *address) +{ + struct stk_stat status; + struct stk_trailer *trailer; + long *block, size; + long result = 0; + + /* We want to iterate through all of the segments. The first + step is to get the stack status structure. We could do this + more quickly and more directly, perhaps, by referencing the + $LM00 common block, but I know that this works. */ + + STKSTAT (&status); + + /* Set up the iteration. */ + + trailer = (struct stk_trailer *) (status.current_address + + status.current_size + - 15); + + /* There must be at least one stack segment. Therefore it is + a fatal error if "trailer" is null. */ + + if (trailer == 0) + abort (); + + /* Discard segments that do not contain our argument address. */ + + while (trailer != 0) + { + block = (long *) trailer->this_address; + size = trailer->this_size; + if (block == 0 || size == 0) + abort (); + trailer = (struct stk_trailer *) trailer->link; + if ((block <= address) && (address < (block + size))) + break; + } + + /* Set the result to the offset in this segment and add the sizes + of all predecessor segments. */ + + result = address - block; + + if (trailer == 0) + { + return result; + } + + do + { + if (trailer->this_size <= 0) + abort (); + result += trailer->this_size; + trailer = (struct stk_trailer *) trailer->link; + } + while (trailer != 0); + + /* We are done. Note that if you present a bogus address (one + not in any segment), you will get a different number back, formed + from subtracting the address of the first block. This is probably + not what you want. */ + + return (result); +} + +#else /* not CRAY2 */ +/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. + Determine the number of the cell within the stack, + given the address of the cell. The purpose of this + routine is to linearize, in some sense, stack addresses + for alloca. */ + +static long +i00afunc (long address) +{ + long stkl = 0; + + long size, pseg, this_segment, stack; + long result = 0; + + struct stack_segment_linkage *ssptr; + + /* Register B67 contains the address of the end of the + current stack segment. If you (as a subprogram) store + your registers on the stack and find that you are past + the contents of B67, you have overflowed the segment. + + B67 also points to the stack segment linkage control + area, which is what we are really interested in. */ + + stkl = CRAY_STACKSEG_END (); + ssptr = (struct stack_segment_linkage *) stkl; + + /* If one subtracts 'size' from the end of the segment, + one has the address of the first word of the segment. + + If this is not the first segment, 'pseg' will be + nonzero. */ + + pseg = ssptr->sspseg; + size = ssptr->sssize; + + this_segment = stkl - size; + + /* It is possible that calling this routine itself caused + a stack overflow. Discard stack segments which do not + contain the target address. */ + + while (!(this_segment <= address && address <= stkl)) + { +#ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); +#endif + if (pseg == 0) + break; + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + this_segment = stkl - size; + } + + result = address - this_segment; + + /* If you subtract pseg from the current end of the stack, + you get the address of the previous stack segment's end. + This seems a little convoluted to me, but I'll bet you save + a cycle somewhere. */ + + while (pseg != 0) + { +#ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o\n", pseg, size); +#endif + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + result += size; + } + return (result); +} + +#endif /* not CRAY2 */ +#endif /* CRAY */ + +#endif /* no alloca */ +#endif /* not GCC version 2 */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/basename.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/basename.c new file mode 100644 index 00000000..52ecb512 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/basename.c @@ -0,0 +1,41 @@ +/* Return the name-within-directory of a file name. + Copyright (C) 1996, 1997 Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to [email protected]. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <string.h> + +#ifndef _LIBC +/* We cannot generally use the name `basename' since XPG defines an unusable + variant of the function but we cannot use it. */ +# define basename gnu_basename +#endif + + +char * +basename (filename) + const char *filename; +{ + char *p = strrchr (filename, '/'); + return p ? p + 1 : (char *) filename; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/error.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/error.c new file mode 100644 index 00000000..140fa77a --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/error.c @@ -0,0 +1,248 @@ +/* Error handler for noninteractive utilities + Copyright (C) 1990,91,92,93,94,95,96,97,98 Free Software Foundation, Inc. + + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to [email protected]. + + 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, 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. */ + +/* Written by David MacKenzie <[email protected]>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdio.h> + +#if HAVE_VPRINTF || HAVE_DOPRNT || _LIBC +# if __STDC__ +# include <stdarg.h> +# define VA_START(args, lastarg) va_start(args, lastarg) +# else +# include <varargs.h> +# define VA_START(args, lastarg) va_start(args) +# endif +#else +# define va_alist a1, a2, a3, a4, a5, a6, a7, a8 +# define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8; +#endif + +#if STDC_HEADERS || _LIBC +# include <stdlib.h> +# include <string.h> +#else +void exit (); +#endif + +#include "error.h" + +#ifndef _ +# define _(String) String +#endif + +/* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +void (*error_print_progname) ( +#if __STDC__ - 0 + void +#endif + ); + +/* This variable is incremented each time `error' is called. */ +unsigned int error_message_count; + +#ifdef _LIBC +/* In the GNU C library, there is a predefined variable for this. */ + +# define program_name program_invocation_name +# include <errno.h> + +/* In GNU libc we want do not want to use the common name `error' directly. + Instead make it a weak alias. */ +# define error __error +# define error_at_line __error_at_line + +#else /* not _LIBC */ + +/* The calling program should define program_name and set it to the + name of the executing program. */ +extern char *program_name; + +# ifdef HAVE_STRERROR_R +# define __strerror_r strerror_r +# else +# if HAVE_STRERROR +# ifndef strerror /* On some systems, strerror is a macro */ +char *strerror (); +# endif +# else +static char * +private_strerror (errnum) + int errnum; +{ + extern char *sys_errlist[]; + extern int sys_nerr; + + if (errnum > 0 && errnum <= sys_nerr) + return _(sys_errlist[errnum]); + return _("Unknown system error"); +} +# define strerror private_strerror +# endif /* HAVE_STRERROR */ +# endif /* HAVE_STRERROR_R */ +#endif /* not _LIBC */ + +/* Print the program name and error message MESSAGE, which is a printf-style + format string with optional args. + If ERRNUM is nonzero, print its corresponding system error message. + Exit with status STATUS if it is nonzero. */ +/* VARARGS */ + +void +#if defined VA_START && __STDC__ +error (int status, int errnum, const char *message, ...) +#else +error (status, errnum, message, va_alist) + int status; + int errnum; + char *message; + va_dcl +#endif +{ +#ifdef VA_START + va_list args; +#endif + + if (error_print_progname) + (*error_print_progname) (); + else + { + fflush (stdout); + fprintf (stderr, "%s: ", program_name); + } + +#ifdef VA_START + VA_START (args, message); +# if HAVE_VPRINTF || _LIBC + vfprintf (stderr, message, args); +# else + _doprnt (message, args, stderr); +# endif + va_end (args); +#else + fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8); +#endif + + ++error_message_count; + if (errnum) + { +#if defined HAVE_STRERROR_R || defined _LIBC + char errbuf[1024]; + fprintf (stderr, ": %s", __strerror_r (errnum, errbuf, sizeof errbuf)); +#else + fprintf (stderr, ": %s", strerror (errnum)); +#endif + } + putc ('\n', stderr); + fflush (stderr); + if (status) + exit (status); +} + +/* Sometimes we want to have at most one error per line. This + variable controls whether this mode is selected or not. */ +int error_one_per_line; + +void +#if defined VA_START && __STDC__ +error_at_line (int status, int errnum, const char *file_name, + unsigned int line_number, const char *message, ...) +#else +error_at_line (status, errnum, file_name, line_number, message, va_alist) + int status; + int errnum; + const char *file_name; + unsigned int line_number; + char *message; + va_dcl +#endif +{ +#ifdef VA_START + va_list args; +#endif + + if (error_one_per_line) + { + static const char *old_file_name; + static unsigned int old_line_number; + + if (old_line_number == line_number && + (file_name == old_file_name || !strcmp (old_file_name, file_name))) + /* Simply return and print nothing. */ + return; + + old_file_name = file_name; + old_line_number = line_number; + } + + if (error_print_progname) + (*error_print_progname) (); + else + { + fflush (stdout); + fprintf (stderr, "%s:", program_name); + } + + if (file_name != NULL) + fprintf (stderr, "%s:%d: ", file_name, line_number); + +#ifdef VA_START + VA_START (args, message); +# if HAVE_VPRINTF || _LIBC + vfprintf (stderr, message, args); +# else + _doprnt (message, args, stderr); +# endif + va_end (args); +#else + fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8); +#endif + + ++error_message_count; + if (errnum) + { +#if defined HAVE_STRERROR_R || defined _LIBC + char errbuf[1024]; + fprintf (stderr, ": %s", __strerror_r (errnum, errbuf, sizeof errbuf)); +#else + fprintf (stderr, ": %s", strerror (errnum)); +#endif + } + putc ('\n', stderr); + fflush (stderr); + if (status) + exit (status); +} + +#ifdef _LIBC +/* Make the weak alias. */ +# undef error +# undef error_at_line +weak_alias (__error, error) +weak_alias (__error_at_line, error_at_line) +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/error.h b/debian/gettext-kde/gettext-kde-0.10.35/lib/error.h new file mode 100644 index 00000000..20f75824 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/error.h @@ -0,0 +1,78 @@ +/* Declaration for error-reporting function + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to [email protected]. + + 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, 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. */ + +#ifndef _ERROR_H +#define _ERROR_H 1 + +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__ +# define __attribute__(Spec) /* empty */ +# endif +/* The __-protected variants of `format' and `printf' attributes + are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) +# define __format__ format +# define __printf__ printf +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined (__STDC__) && __STDC__ + +/* Print a message with `fprintf (stderr, FORMAT, ...)'; + if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). + If STATUS is nonzero, terminate the program with `exit (STATUS)'. */ + +extern void error (int status, int errnum, const char *format, ...) + __attribute__ ((__format__ (__printf__, 3, 4))); + +extern void error_at_line (int status, int errnum, const char *fname, + unsigned int lineno, const char *format, ...) + __attribute__ ((__format__ (__printf__, 5, 6))); + +/* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +extern void (*error_print_progname) (void); + +#else +void error (); +void error_at_line (); +extern void (*error_print_progname) (); +#endif + +/* This variable is incremented each time `error' is called. */ +extern unsigned int error_message_count; + +/* Sometimes we want to have at most one error per line. This + variable controls whether this mode is selected or not. */ +extern int error_one_per_line; + +#ifdef __cplusplus +} +#endif + +#endif /* error.h */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/fstrcmp.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/fstrcmp.c new file mode 100644 index 00000000..b1f59712 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/fstrcmp.c @@ -0,0 +1,636 @@ +/* Functions to make fuzzy comparisons between strings + Copyright (C) 1988, 1989, 1992, 1993, 1995 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 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., 675 Mass Ave, Cambridge, MA 02139, USA. + + + Derived from GNU diff 2.7, analyze.c et al. + + The basic algorithm is described in: + "An O(ND) Difference Algorithm and its Variations", Eugene Myers, + Algorithmica Vol. 1 No. 2, 1986, pp. 251-266; + see especially section 4.2, which describes the variation used below. + + The basic algorithm was independently discovered as described in: + "Algorithms for Approximate String Matching", E. Ukkonen, + Information and Control Vol. 64, 1985, pp. 100-118. + + Modified to work on strings rather than files + by Peter Miller <[email protected]>, October 1995 */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#ifdef HAVE_STRING_H +# include <string.h> +#else +# include <strings.h> +#endif + +#include <stdio.h> + +#ifdef HAVE_LIMITS_H +# include <limits.h> +#else +# define INT_MAX ((int)(~(unsigned)0 >> 1)) +#endif + +#include "system.h" +#include "fstrcmp.h" + + +/* + * Data on one input string being compared. + */ +struct string_data +{ + /* The string to be compared. */ + const char *data; + + /* The length of the string to be compared. */ + int data_length; + + /* The number of characters inserted or deleted. */ + int edit_count; +}; + +static struct string_data string[2]; + + +#ifdef MINUS_H_FLAG + +/* This corresponds to the diff -H flag. With this heuristic, for + strings with a constant small density of changes, the algorithm is + linear in the strings size. This is unlikely in typical uses of + fstrcmp, and so is usually compiled out. Besides, there is no + interface to set it true. */ +static int heuristic; + +#endif + + +/* Vector, indexed by diagonal, containing 1 + the X coordinate of the + point furthest along the given diagonal in the forward search of the + edit matrix. */ +static int *fdiag; + +/* Vector, indexed by diagonal, containing the X coordinate of the point + furthest along the given diagonal in the backward search of the edit + matrix. */ +static int *bdiag; + +/* Edit scripts longer than this are too expensive to compute. */ +static int too_expensive; + +/* Snakes bigger than this are considered `big'. */ +#define SNAKE_LIMIT 20 + +struct partition +{ + /* Midpoints of this partition. */ + int xmid, ymid; + + /* Nonzero if low half will be analyzed minimally. */ + int lo_minimal; + + /* Likewise for high half. */ + int hi_minimal; +}; + + +/* NAME + diag - find diagonal path + + SYNOPSIS + int diag(int xoff, int xlim, int yoff, int ylim, int minimal, + struct partition *part); + + DESCRIPTION + Find the midpoint of the shortest edit script for a specified + portion of the two strings. + + Scan from the beginnings of the strings, and simultaneously from + the ends, doing a breadth-first search through the space of + edit-sequence. When the two searches meet, we have found the + midpoint of the shortest edit sequence. + + If MINIMAL is nonzero, find the minimal edit script regardless + of expense. Otherwise, if the search is too expensive, use + heuristics to stop the search and report a suboptimal answer. + + RETURNS + Set PART->(XMID,YMID) to the midpoint (XMID,YMID). The diagonal + number XMID - YMID equals the number of inserted characters + minus the number of deleted characters (counting only characters + before the midpoint). Return the approximate edit cost; this is + the total number of characters inserted or deleted (counting + only characters before the midpoint), unless a heuristic is used + to terminate the search prematurely. + + Set PART->LEFT_MINIMAL to nonzero iff the minimal edit script + for the left half of the partition is known; similarly for + PART->RIGHT_MINIMAL. + + CAVEAT + This function assumes that the first characters of the specified + portions of the two strings do not match, and likewise that the + last characters do not match. The caller must trim matching + characters from the beginning and end of the portions it is + going to specify. + + If we return the "wrong" partitions, the worst this can do is + cause suboptimal diff output. It cannot cause incorrect diff + output. */ + +static int diag PARAMS ((int, int, int, int, int, struct partition *)); + +static int +diag (xoff, xlim, yoff, ylim, minimal, part) + int xoff; + int xlim; + int yoff; + int ylim; + int minimal; + struct partition *part; +{ + int *const fd = fdiag; /* Give the compiler a chance. */ + int *const bd = bdiag; /* Additional help for the compiler. */ + const char *const xv = string[0].data; /* Still more help for the compiler. */ + const char *const yv = string[1].data; /* And more and more . . . */ + const int dmin = xoff - ylim; /* Minimum valid diagonal. */ + const int dmax = xlim - yoff; /* Maximum valid diagonal. */ + const int fmid = xoff - yoff; /* Center diagonal of top-down search. */ + const int bmid = xlim - ylim; /* Center diagonal of bottom-up search. */ + int fmin = fmid; + int fmax = fmid; /* Limits of top-down search. */ + int bmin = bmid; + int bmax = bmid; /* Limits of bottom-up search. */ + int c; /* Cost. */ + int odd = (fmid - bmid) & 1; + + /* + * True if southeast corner is on an odd diagonal with respect + * to the northwest. + */ + fd[fmid] = xoff; + bd[bmid] = xlim; + for (c = 1;; ++c) + { + int d; /* Active diagonal. */ + int big_snake; + + big_snake = 0; + /* Extend the top-down search by an edit step in each diagonal. */ + if (fmin > dmin) + fd[--fmin - 1] = -1; + else + ++fmin; + if (fmax < dmax) + fd[++fmax + 1] = -1; + else + --fmax; + for (d = fmax; d >= fmin; d -= 2) + { + int x; + int y; + int oldx; + int tlo; + int thi; + + tlo = fd[d - 1], + thi = fd[d + 1]; + + if (tlo >= thi) + x = tlo + 1; + else + x = thi; + oldx = x; + y = x - d; + while (x < xlim && y < ylim && xv[x] == yv[y]) + { + ++x; + ++y; + } + if (x - oldx > SNAKE_LIMIT) + big_snake = 1; + fd[d] = x; + if (odd && bmin <= d && d <= bmax && bd[d] <= x) + { + part->xmid = x; + part->ymid = y; + part->lo_minimal = part->hi_minimal = 1; + return 2 * c - 1; + } + } + /* Similarly extend the bottom-up search. */ + if (bmin > dmin) + bd[--bmin - 1] = INT_MAX; + else + ++bmin; + if (bmax < dmax) + bd[++bmax + 1] = INT_MAX; + else + --bmax; + for (d = bmax; d >= bmin; d -= 2) + { + int x; + int y; + int oldx; + int tlo; + int thi; + + tlo = bd[d - 1], + thi = bd[d + 1]; + if (tlo < thi) + x = tlo; + else + x = thi - 1; + oldx = x; + y = x - d; + while (x > xoff && y > yoff && xv[x - 1] == yv[y - 1]) + { + --x; + --y; + } + if (oldx - x > SNAKE_LIMIT) + big_snake = 1; + bd[d] = x; + if (!odd && fmin <= d && d <= fmax && x <= fd[d]) + { + part->xmid = x; + part->ymid = y; + part->lo_minimal = part->hi_minimal = 1; + return 2 * c; + } + } + + if (minimal) + continue; + +#ifdef MINUS_H_FLAG + /* Heuristic: check occasionally for a diagonal that has made lots + of progress compared with the edit distance. If we have any + such, find the one that has made the most progress and return + it as if it had succeeded. + + With this heuristic, for strings with a constant small density + of changes, the algorithm is linear in the strings size. */ + if (c > 200 && big_snake && heuristic) + { + int best; + + best = 0; + for (d = fmax; d >= fmin; d -= 2) + { + int dd; + int x; + int y; + int v; + + dd = d - fmid; + x = fd[d]; + y = x - d; + v = (x - xoff) * 2 - dd; + + if (v > 12 * (c + (dd < 0 ? -dd : dd))) + { + if + ( + v > best + && + xoff + SNAKE_LIMIT <= x + && + x < xlim + && + yoff + SNAKE_LIMIT <= y + && + y < ylim + ) + { + /* We have a good enough best diagonal; now insist + that it end with a significant snake. */ + int k; + + for (k = 1; xv[x - k] == yv[y - k]; k++) + { + if (k == SNAKE_LIMIT) + { + best = v; + part->xmid = x; + part->ymid = y; + break; + } + } + } + } + } + if (best > 0) + { + part->lo_minimal = 1; + part->hi_minimal = 0; + return 2 * c - 1; + } + best = 0; + for (d = bmax; d >= bmin; d -= 2) + { + int dd; + int x; + int y; + int v; + + dd = d - bmid; + x = bd[d]; + y = x - d; + v = (xlim - x) * 2 + dd; + + if (v > 12 * (c + (dd < 0 ? -dd : dd))) + { + if (v > best && xoff < x && x <= xlim - SNAKE_LIMIT && + yoff < y && y <= ylim - SNAKE_LIMIT) + { + /* We have a good enough best diagonal; now insist + that it end with a significant snake. */ + int k; + + for (k = 0; xv[x + k] == yv[y + k]; k++) + { + if (k == SNAKE_LIMIT - 1) + { + best = v; + part->xmid = x; + part->ymid = y; + break; + } + } + } + } + } + if (best > 0) + { + part->lo_minimal = 0; + part->hi_minimal = 1; + return 2 * c - 1; + } + } +#endif /* MINUS_H_FLAG */ + + /* Heuristic: if we've gone well beyond the call of duty, give up + and report halfway between our best results so far. */ + if (c >= too_expensive) + { + int fxybest; + int fxbest; + int bxybest; + int bxbest; + + /* Pacify `gcc -Wall'. */ + fxbest = 0; + bxbest = 0; + + /* Find forward diagonal that maximizes X + Y. */ + fxybest = -1; + for (d = fmax; d >= fmin; d -= 2) + { + int x; + int y; + + x = fd[d] < xlim ? fd[d] : xlim; + y = x - d; + + if (ylim < y) + { + x = ylim + d; + y = ylim; + } + if (fxybest < x + y) + { + fxybest = x + y; + fxbest = x; + } + } + /* Find backward diagonal that minimizes X + Y. */ + bxybest = INT_MAX; + for (d = bmax; d >= bmin; d -= 2) + { + int x; + int y; + + x = xoff > bd[d] ? xoff : bd[d]; + y = x - d; + + if (y < yoff) + { + x = yoff + d; + y = yoff; + } + if (x + y < bxybest) + { + bxybest = x + y; + bxbest = x; + } + } + /* Use the better of the two diagonals. */ + if ((xlim + ylim) - bxybest < fxybest - (xoff + yoff)) + { + part->xmid = fxbest; + part->ymid = fxybest - fxbest; + part->lo_minimal = 1; + part->hi_minimal = 0; + } + else + { + part->xmid = bxbest; + part->ymid = bxybest - bxbest; + part->lo_minimal = 0; + part->hi_minimal = 1; + } + return 2 * c - 1; + } + } +} + + +/* NAME + compareseq - find edit sequence + + SYNOPSIS + void compareseq(int xoff, int xlim, int yoff, int ylim, int minimal); + + DESCRIPTION + Compare in detail contiguous subsequences of the two strings + which are known, as a whole, to match each other. + + The subsequence of string 0 is [XOFF, XLIM) and likewise for + string 1. + + Note that XLIM, YLIM are exclusive bounds. All character + numbers are origin-0. + + If MINIMAL is nonzero, find a minimal difference no matter how + expensive it is. */ + +static void compareseq PARAMS ((int, int, int, int, int)); + +static void +compareseq (xoff, xlim, yoff, ylim, minimal) + int xoff; + int xlim; + int yoff; + int ylim; + int minimal; +{ + const char *const xv = string[0].data; /* Help the compiler. */ + const char *const yv = string[1].data; + + /* Slide down the bottom initial diagonal. */ + while (xoff < xlim && yoff < ylim && xv[xoff] == yv[yoff]) + { + ++xoff; + ++yoff; + } + + /* Slide up the top initial diagonal. */ + while (xlim > xoff && ylim > yoff && xv[xlim - 1] == yv[ylim - 1]) + { + --xlim; + --ylim; + } + + /* Handle simple cases. */ + if (xoff == xlim) + { + while (yoff < ylim) + { + ++string[1].edit_count; + ++yoff; + } + } + else if (yoff == ylim) + { + while (xoff < xlim) + { + ++string[0].edit_count; + ++xoff; + } + } + else + { + int c; + struct partition part; + + /* Find a point of correspondence in the middle of the strings. */ + c = diag (xoff, xlim, yoff, ylim, minimal, &part); + if (c == 1) + { +#if 0 + /* This should be impossible, because it implies that one of + the two subsequences is empty, and that case was handled + above without calling `diag'. Let's verify that this is + true. */ + abort (); +#else + /* The two subsequences differ by a single insert or delete; + record it and we are done. */ + if (part.xmid - part.ymid < xoff - yoff) + ++string[1].edit_count; + else + ++string[0].edit_count; +#endif + } + else + { + /* Use the partitions to split this problem into subproblems. */ + compareseq (xoff, part.xmid, yoff, part.ymid, part.lo_minimal); + compareseq (part.xmid, xlim, part.ymid, ylim, part.hi_minimal); + } + } +} + + +/* NAME + fstrcmp - fuzzy string compare + + SYNOPSIS + double fstrcmp(const char *, const char *); + + DESCRIPTION + The fstrcmp function may be used to compare two string for + similarity. It is very useful in reducing "cascade" or + "secondary" errors in compilers or other situations where + symbol tables occur. + + RETURNS + double; 0 if the strings are entirly dissimilar, 1 if the + strings are identical, and a number in between if they are + similar. */ + +double +fstrcmp (string1, string2) + const char *string1; + const char *string2; +{ + int i; + + size_t fdiag_len; + static int *fdiag_buf; + static size_t fdiag_max; + + /* set the info for each string. */ + string[0].data = string1; + string[0].data_length = strlen (string1); + string[1].data = string2; + string[1].data_length = strlen (string2); + + /* short-circuit obvious comparisons */ + if (string[0].data_length == 0 && string[1].data_length == 0) + return 1.0; + if (string[0].data_length == 0 || string[1].data_length == 0) + return 0.0; + + /* Set TOO_EXPENSIVE to be approximate square root of input size, + bounded below by 256. */ + too_expensive = 1; + for (i = string[0].data_length + string[1].data_length; i != 0; i >>= 2) + too_expensive <<= 1; + if (too_expensive < 256) + too_expensive = 256; + + /* Because fstrcmp is typically called multiple times, while scanning + symbol tables, etc, attempt to minimize the number of memory + allocations performed. Thus, we use a static buffer for the + diagonal vectors, and never free them. */ + fdiag_len = string[0].data_length + string[1].data_length + 3; + if (fdiag_len > fdiag_max) + { + fdiag_max = fdiag_len; + fdiag_buf = xrealloc (fdiag_buf, fdiag_max * (2 * sizeof (int))); + } + fdiag = fdiag_buf + string[1].data_length + 1; + bdiag = fdiag + fdiag_len; + + /* Now do the main comparison algorithm */ + string[0].edit_count = 0; + string[1].edit_count = 0; + compareseq (0, string[0].data_length, 0, string[1].data_length, 0); + + /* The result is + ((number of chars in common) / (average length of the strings)). + This is admittedly biased towards finding that the strings are + similar, however it does produce meaningful results. */ + return ((double) (string[0].data_length + string[1].data_length - + string[1].edit_count - string[0].edit_count) / (string[0].data_length + + string[1].data_length)); +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/fstrcmp.h b/debian/gettext-kde/gettext-kde-0.10.35/lib/fstrcmp.h new file mode 100644 index 00000000..04047171 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/fstrcmp.h @@ -0,0 +1,25 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + +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, 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. */ + +#ifndef _FSTRCMP_H +#define _FSTRCMP_H + +double fstrcmp PARAMS ((const char *__s1, const char *__s2)); + +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/getline.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/getline.c new file mode 100644 index 00000000..ba05abb7 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/getline.c @@ -0,0 +1,155 @@ +/* getline.c -- Replacement for GNU C library function getline + +Copyright (C) 1993, 1996 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 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. */ + +/* Written by Jan Brittenson, [email protected]. */ + +#if HAVE_CONFIG_H +# include <config.h> +#endif + +/* The `getdelim' function is only declared if the following symbol + is defined. */ +#define _GNU_SOURCE 1 +#include <stdio.h> +#include <sys/types.h> + +#if defined __GNU_LIBRARY__ && HAVE_GETDELIM + +int +getline (lineptr, n, stream) + char **lineptr; + size_t *n; + FILE *stream; +{ + return getdelim (lineptr, n, '\n', stream); +} + + +#else /* ! have getdelim */ + +# define NDEBUG +# include <assert.h> + +# if STDC_HEADERS +# include <stdlib.h> +# else +char *malloc (), *realloc (); +# endif + +/* Always add at least this many bytes when extending the buffer. */ +# define MIN_CHUNK 64 + +/* Read up to (and including) a TERMINATOR from STREAM into *LINEPTR + + OFFSET (and null-terminate it). *LINEPTR is a pointer returned from + malloc (or NULL), pointing to *N characters of space. It is realloc'd + as necessary. Return the number of characters read (not including the + null terminator), or -1 on error or EOF. */ + +int +getstr (lineptr, n, stream, terminator, offset) + char **lineptr; + size_t *n; + FILE *stream; + char terminator; + size_t offset; +{ + int nchars_avail; /* Allocated but unused chars in *LINEPTR. */ + char *read_pos; /* Where we're reading into *LINEPTR. */ + int ret; + + if (!lineptr || !n || !stream) + return -1; + + if (!*lineptr) + { + *n = MIN_CHUNK; + *lineptr = malloc (*n); + if (!*lineptr) + return -1; + } + + nchars_avail = *n - offset; + read_pos = *lineptr + offset; + + for (;;) + { + register int c = getc (stream); + + /* We always want at least one char left in the buffer, since we + always (unless we get an error while reading the first char) + NUL-terminate the line buffer. */ + + assert(*n - nchars_avail == read_pos - *lineptr); + if (nchars_avail < 2) + { + if (*n > MIN_CHUNK) + *n *= 2; + else + *n += MIN_CHUNK; + + nchars_avail = *n + *lineptr - read_pos; + *lineptr = realloc (*lineptr, *n); + if (!*lineptr) + return -1; + read_pos = *n - nchars_avail + *lineptr; + assert(*n - nchars_avail == read_pos - *lineptr); + } + + if (c == EOF || ferror (stream)) + { + /* Return partial line, if any. */ + if (read_pos == *lineptr) + return -1; + else + break; + } + + *read_pos++ = c; + nchars_avail--; + + if (c == terminator) + /* Return the line. */ + break; + } + + /* Done - NUL terminate and return the number of chars read. */ + *read_pos = '\0'; + + ret = read_pos - (*lineptr + offset); + return ret; +} + +int +getline (lineptr, n, stream) + char **lineptr; + size_t *n; + FILE *stream; +{ + return getstr (lineptr, n, stream, '\n', 0); +} + +int +getdelim (lineptr, n, delimiter, stream) + char **lineptr; + size_t *n; + int delimiter; + FILE *stream; +{ + return getstr (lineptr, n, stream, delimiter, 0); +} +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/getline.h b/debian/gettext-kde/gettext-kde-0.10.35/lib/getline.h new file mode 100644 index 00000000..cc6466d7 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/getline.h @@ -0,0 +1,36 @@ +/* Copyright (C) 1995 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, 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. */ + +#ifndef GETLINE_H_ +# define GETLINE_H_ 1 + +# include <stdio.h> + +# ifndef PARAMS +# if defined (__GNUC__) || __STDC__ +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif +# endif + +int +getline PARAMS ((char **_lineptr, size_t *_n, FILE *_stream)); + +int +getdelim PARAMS ((char **_lineptr, size_t *_n, int _delimiter, FILE *_stream)); + +#endif /* not GETLINE_H_ */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/getopt.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/getopt.c new file mode 100644 index 00000000..7da985f5 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/getopt.c @@ -0,0 +1,1052 @@ +/* Getopt for GNU. + NOTE: getopt is now part of the C library, so if you don't know what + "Keep this file name-space clean" means, talk to [email protected] + before changing it! + + Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98 + Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to [email protected]. + + 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, 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. */ + +/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>. + Ditto for AIX 3.2 and <stdlib.h>. */ +#ifndef _NO_PROTO +# define _NO_PROTO +#endif + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#if !defined __STDC__ || !__STDC__ +/* This is a separate conditional since some stdc systems + reject `defined (const)'. */ +# ifndef const +# define const +# endif +#endif + +#include <stdio.h> + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#define GETOPT_INTERFACE_VERSION 2 +#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 +# include <gnu-versions.h> +# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION +# define ELIDE_CODE +# endif +#endif + +#ifndef ELIDE_CODE + + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +/* Don't include stdlib.h for non-GNU C libraries because some of them + contain conflicting prototypes for getopt. */ +# include <stdlib.h> +# include <unistd.h> +#endif /* GNU C library. */ + +#ifdef VMS +# include <unixlib.h> +# if HAVE_STRING_H - 0 +# include <string.h> +# endif +#endif + +#ifndef _ +/* This is for other GNU distributions with internationalized messages. + When compiling libc, the _ macro is predefined. */ +# ifdef HAVE_LIBINTL_H +# include <libintl.h> +# define _(msgid) gettext (msgid) +# else +# define _(msgid) (msgid) +# endif +#endif + +/* This version of `getopt' appears to the caller like standard Unix `getopt' + but it behaves differently for the user, since it allows the user + to intersperse the options with the other arguments. + + As `getopt' works, it permutes the elements of ARGV so that, + when it is done, all the options precede everything else. Thus + all application programs are extended to handle flexible argument order. + + Setting the environment variable POSIXLY_CORRECT disables permutation. + Then the behavior is completely standard. + + GNU application programs can use a third alternative mode in which + they can distinguish the relative order of options and other arguments. */ + +#include "getopt.h" + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +char *optarg = NULL; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +/* 1003.2 says this must be 1 before any call. */ +int optind = 1; + +/* Formerly, initialization of getopt depended on optind==0, which + causes problems with re-calling getopt as programs generally don't + know that. */ + +int __getopt_initialized = 0; + +/* The next char to be scanned in the option-element + in which the last option character we returned was found. + This allows us to pick up the scan where we left off. + + If this is zero, or a null string, it means resume the scan + by advancing to the next ARGV-element. */ + +static char *nextchar; + +/* Callers store zero here to inhibit the error message + for unrecognized options. */ + +int opterr = 1; + +/* Set to an option character which was unrecognized. + This must be initialized on some systems to avoid linking in the + system's own getopt implementation. */ + +int optopt = '?'; + +/* Describe how to deal with options that follow non-option ARGV-elements. + + If the caller did not specify anything, + the default is REQUIRE_ORDER if the environment variable + POSIXLY_CORRECT is defined, PERMUTE otherwise. + + REQUIRE_ORDER means don't recognize them as options; + stop option processing when the first non-option is seen. + This is what Unix does. + This mode of operation is selected by either setting the environment + variable POSIXLY_CORRECT, or using `+' as the first character + of the list of option characters. + + PERMUTE is the default. We permute the contents of ARGV as we scan, + so that eventually all the non-options are at the end. This allows options + to be given in any order, even with programs that were not written to + expect this. + + RETURN_IN_ORDER is an option available to programs that were written + to expect options and other ARGV-elements in any order and that care about + the ordering of the two. We describe each non-option ARGV-element + as if it were the argument of an option with character code 1. + Using `-' as the first character of the list of option characters + selects this mode of operation. + + The special argument `--' forces an end of option-scanning regardless + of the value of `ordering'. In the case of RETURN_IN_ORDER, only + `--' can cause `getopt' to return -1 with `optind' != ARGC. */ + +static enum +{ + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER +} ordering; + +/* Value of POSIXLY_CORRECT environment variable. */ +static char *posixly_correct; + +#ifdef __GNU_LIBRARY__ +/* We want to avoid inclusion of string.h with non-GNU libraries + because there are many ways it can cause trouble. + On some systems, it contains special magic macros that don't work + in GCC. */ +# include <string.h> +# define my_index strchr +#else + +# if HAVE_STRING_H +# include <string.h> +# else +# include <strings.h> +# endif + +/* Avoid depending on library functions or files + whose names are inconsistent. */ + +#ifndef getenv +extern char *getenv (); +#endif + +static char * +my_index (str, chr) + const char *str; + int chr; +{ + while (*str) + { + if (*str == chr) + return (char *) str; + str++; + } + return 0; +} + +/* If using GCC, we can safely declare strlen this way. + If not using GCC, it is ok not to declare it. */ +#ifdef __GNUC__ +/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. + That was relevant to code that was here before. */ +# if (!defined __STDC__ || !__STDC__) && !defined strlen +/* gcc with -traditional declares the built-in strlen to return int, + and has done so at least since version 2.4.5. -- rms. */ +extern int strlen (const char *); +# endif /* not __STDC__ */ +#endif /* __GNUC__ */ + +#endif /* not __GNU_LIBRARY__ */ + +/* Handle permutation of arguments. */ + +/* Describe the part of ARGV that contains non-options that have + been skipped. `first_nonopt' is the index in ARGV of the first of them; + `last_nonopt' is the index after the last of them. */ + +static int first_nonopt; +static int last_nonopt; + +#ifdef _LIBC +/* Bash 2.0 gives us an environment variable containing flags + indicating ARGV elements that should not be considered arguments. */ + +/* Defined in getopt_init.c */ +extern char *__getopt_nonoption_flags; + +static int nonoption_flags_max_len; +static int nonoption_flags_len; + +static int original_argc; +static char *const *original_argv; + +/* Make sure the environment variable bash 2.0 puts in the environment + is valid for the getopt call we must make sure that the ARGV passed + to getopt is that one passed to the process. */ +static void +__attribute__ ((unused)) +store_args_and_env (int argc, char *const *argv) +{ + /* XXX This is no good solution. We should rather copy the args so + that we can compare them later. But we must not use malloc(3). */ + original_argc = argc; + original_argv = argv; +} +# ifdef text_set_element +text_set_element (__libc_subinit, store_args_and_env); +# endif /* text_set_element */ + +# define SWAP_FLAGS(ch1, ch2) \ + if (nonoption_flags_len > 0) \ + { \ + char __tmp = __getopt_nonoption_flags[ch1]; \ + __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ + __getopt_nonoption_flags[ch2] = __tmp; \ + } +#else /* !_LIBC */ +# define SWAP_FLAGS(ch1, ch2) +#endif /* _LIBC */ + +/* Exchange two adjacent subsequences of ARGV. + One subsequence is elements [first_nonopt,last_nonopt) + which contains all the non-options that have been skipped so far. + The other is elements [last_nonopt,optind), which contains all + the options processed since those non-options were skipped. + + `first_nonopt' and `last_nonopt' are relocated so that they describe + the new indices of the non-options in ARGV after they are moved. */ + +#if defined __STDC__ && __STDC__ +static void exchange (char **); +#endif + +static void +exchange (argv) + char **argv; +{ + int bottom = first_nonopt; + int middle = last_nonopt; + int top = optind; + char *tem; + + /* Exchange the shorter segment with the far end of the longer segment. + That puts the shorter segment into the right place. + It leaves the longer segment in the right place overall, + but it consists of two parts that need to be swapped next. */ + +#ifdef _LIBC + /* First make sure the handling of the `__getopt_nonoption_flags' + string can work normally. Our top argument must be in the range + of the string. */ + if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) + { + /* We must extend the array. The user plays games with us and + presents new arguments. */ + char *new_str = malloc (top + 1); + if (new_str == NULL) + nonoption_flags_len = nonoption_flags_max_len = 0; + else + { + memset (__mempcpy (new_str, __getopt_nonoption_flags, + nonoption_flags_max_len), + '\0', top + 1 - nonoption_flags_max_len); + nonoption_flags_max_len = top + 1; + __getopt_nonoption_flags = new_str; + } + } +#endif + + while (top > middle && middle > bottom) + { + if (top - middle > middle - bottom) + { + /* Bottom segment is the short one. */ + int len = middle - bottom; + register int i; + + /* Swap it with the top part of the top segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[top - (middle - bottom) + i]; + argv[top - (middle - bottom) + i] = tem; + SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); + } + /* Exclude the moved bottom segment from further swapping. */ + top -= len; + } + else + { + /* Top segment is the short one. */ + int len = top - middle; + register int i; + + /* Swap it with the bottom part of the bottom segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[middle + i]; + argv[middle + i] = tem; + SWAP_FLAGS (bottom + i, middle + i); + } + /* Exclude the moved top segment from further swapping. */ + bottom += len; + } + } + + /* Update records for the slots the non-options now occupy. */ + + first_nonopt += (optind - last_nonopt); + last_nonopt = optind; +} + +/* Initialize the internal data when the first call is made. */ + +#if defined __STDC__ && __STDC__ +static const char *_getopt_initialize (int, char *const *, const char *); +#endif +static const char * +_getopt_initialize (argc, argv, optstring) + int argc; + char *const *argv; + const char *optstring; +{ + /* Start processing options with ARGV-element 1 (since ARGV-element 0 + is the program name); the sequence of previously skipped + non-option ARGV-elements is empty. */ + + first_nonopt = last_nonopt = optind; + + nextchar = NULL; + + posixly_correct = getenv ("POSIXLY_CORRECT"); + + /* Determine how to handle the ordering of options and nonoptions. */ + + if (optstring[0] == '-') + { + ordering = RETURN_IN_ORDER; + ++optstring; + } + else if (optstring[0] == '+') + { + ordering = REQUIRE_ORDER; + ++optstring; + } + else if (posixly_correct != NULL) + ordering = REQUIRE_ORDER; + else + ordering = PERMUTE; + +#ifdef _LIBC + if (posixly_correct == NULL + && argc == original_argc && argv == original_argv) + { + if (nonoption_flags_max_len == 0) + { + if (__getopt_nonoption_flags == NULL + || __getopt_nonoption_flags[0] == '\0') + nonoption_flags_max_len = -1; + else + { + const char *orig_str = __getopt_nonoption_flags; + int len = nonoption_flags_max_len = strlen (orig_str); + if (nonoption_flags_max_len < argc) + nonoption_flags_max_len = argc; + __getopt_nonoption_flags = + (char *) malloc (nonoption_flags_max_len); + if (__getopt_nonoption_flags == NULL) + nonoption_flags_max_len = -1; + else + memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), + '\0', nonoption_flags_max_len - len); + } + } + nonoption_flags_len = nonoption_flags_max_len; + } + else + nonoption_flags_len = 0; +#endif + + return optstring; +} + +/* Scan elements of ARGV (whose length is ARGC) for option characters + given in OPTSTRING. + + If an element of ARGV starts with '-', and is not exactly "-" or "--", + then it is an option element. The characters of this element + (aside from the initial '-') are option characters. If `getopt' + is called repeatedly, it returns successively each of the option characters + from each of the option elements. + + If `getopt' finds another option character, it returns that character, + updating `optind' and `nextchar' so that the next call to `getopt' can + resume the scan with the following option character or ARGV-element. + + If there are no more option characters, `getopt' returns -1. + Then `optind' is the index in ARGV of the first ARGV-element + that is not an option. (The ARGV-elements have been permuted + so that those that are not options now come last.) + + OPTSTRING is a string containing the legitimate option characters. + If an option character is seen that is not listed in OPTSTRING, + return '?' after printing an error message. If you set `opterr' to + zero, the error message is suppressed but we still return '?'. + + If a char in OPTSTRING is followed by a colon, that means it wants an arg, + so the following text in the same ARGV-element, or the text of the following + ARGV-element, is returned in `optarg'. Two colons mean an option that + wants an optional arg; if there is text in the current ARGV-element, + it is returned in `optarg', otherwise `optarg' is set to zero. + + If OPTSTRING starts with `-' or `+', it requests different methods of + handling the non-option ARGV-elements. + See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. + + Long-named options begin with `--' instead of `-'. + Their names may be abbreviated as long as the abbreviation is unique + or is an exact match for some defined option. If they have an + argument, it follows the option name in the same ARGV-element, separated + from the option name by a `=', or else the in next ARGV-element. + When `getopt' finds a long-named option, it returns 0 if that option's + `flag' field is nonzero, the value of the option's `val' field + if the `flag' field is zero. + + The elements of ARGV aren't really const, because we permute them. + But we pretend they're const in the prototype to be compatible + with other systems. + + LONGOPTS is a vector of `struct option' terminated by an + element containing a name which is zero. + + LONGIND returns the index in LONGOPT of the long-named option found. + It is only valid when a long-named option has been found by the most + recent call. + + If LONG_ONLY is nonzero, '-' as well as '--' can introduce + long-named options. */ + +int +_getopt_internal (argc, argv, optstring, longopts, longind, long_only) + int argc; + char *const *argv; + const char *optstring; + const struct option *longopts; + int *longind; + int long_only; +{ + optarg = NULL; + + if (optind == 0 || !__getopt_initialized) + { + if (optind == 0) + optind = 1; /* Don't scan ARGV[0], the program name. */ + optstring = _getopt_initialize (argc, argv, optstring); + __getopt_initialized = 1; + } + + /* Test whether ARGV[optind] points to a non-option argument. + Either it does not have option syntax, or there is an environment flag + from the shell indicating it is not an option. The later information + is only used when the used in the GNU libc. */ +#ifdef _LIBC +# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ + || (optind < nonoption_flags_len \ + && __getopt_nonoption_flags[optind] == '1')) +#else +# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') +#endif + + if (nextchar == NULL || *nextchar == '\0') + { + /* Advance to the next ARGV-element. */ + + /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been + moved back by the user (who may also have changed the arguments). */ + if (last_nonopt > optind) + last_nonopt = optind; + if (first_nonopt > optind) + first_nonopt = optind; + + if (ordering == PERMUTE) + { + /* If we have just processed some options following some non-options, + exchange them so that the options come first. */ + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (last_nonopt != optind) + first_nonopt = optind; + + /* Skip any additional non-options + and extend the range of non-options previously skipped. */ + + while (optind < argc && NONOPTION_P) + optind++; + last_nonopt = optind; + } + + /* The special ARGV-element `--' means premature end of options. + Skip it like a null option, + then exchange with previous non-options as if it were an option, + then skip everything else like a non-option. */ + + if (optind != argc && !strcmp (argv[optind], "--")) + { + optind++; + + if (first_nonopt != last_nonopt && last_nonopt != optind) + exchange ((char **) argv); + else if (first_nonopt == last_nonopt) + first_nonopt = optind; + last_nonopt = argc; + + optind = argc; + } + + /* If we have done all the ARGV-elements, stop the scan + and back over any non-options that we skipped and permuted. */ + + if (optind == argc) + { + /* Set the next-arg-index to point at the non-options + that we previously skipped, so the caller will digest them. */ + if (first_nonopt != last_nonopt) + optind = first_nonopt; + return -1; + } + + /* If we have come to a non-option and did not permute it, + either stop the scan or describe it to the caller and pass it by. */ + + if (NONOPTION_P) + { + if (ordering == REQUIRE_ORDER) + return -1; + optarg = argv[optind++]; + return 1; + } + + /* We have found another option-ARGV-element. + Skip the initial punctuation. */ + + nextchar = (argv[optind] + 1 + + (longopts != NULL && argv[optind][1] == '-')); + } + + /* Decode the current option-ARGV-element. */ + + /* Check whether the ARGV-element is a long option. + + If long_only and the ARGV-element has the form "-f", where f is + a valid short option, don't consider it an abbreviated form of + a long option that starts with f. Otherwise there would be no + way to give the -f short option. + + On the other hand, if there's a long option "fubar" and + the ARGV-element is "-fu", do consider that an abbreviation of + the long option, just like "--fu", and not "-f" with arg "u". + + This distinction seems to be the most useful approach. */ + + if (longopts != NULL + && (argv[optind][1] == '-' + || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = -1; + int option_index; + + for (nameend = nextchar; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, nextchar, nameend - nextchar)) + { + if ((unsigned int) (nameend - nextchar) + == (unsigned int) strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else + /* Second or later nonexact match found. */ + ambig = 1; + } + + if (ambig && !exact) + { + if (opterr) + fprintf (stderr, _("%s: option `%s' is ambiguous\n"), + argv[0], argv[optind]); + nextchar += strlen (nextchar); + optind++; + optopt = 0; + return '?'; + } + + if (pfound != NULL) + { + option_index = indfound; + optind++; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + optarg = nameend + 1; + else + { + if (opterr) + if (argv[optind - 1][1] == '-') + /* --option */ + fprintf (stderr, + _("%s: option `--%s' doesn't allow an argument\n"), + argv[0], pfound->name); + else + /* +option or -option */ + fprintf (stderr, + _("%s: option `%c%s' doesn't allow an argument\n"), + argv[0], argv[optind - 1][0], pfound->name); + + nextchar += strlen (nextchar); + + optopt = pfound->val; + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (optind < argc) + optarg = argv[optind++]; + else + { + if (opterr) + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); + nextchar += strlen (nextchar); + optopt = pfound->val; + return optstring[0] == ':' ? ':' : '?'; + } + } + nextchar += strlen (nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + + /* Can't find it as a long option. If this is not getopt_long_only, + or the option starts with '--' or is not a valid short + option, then it's an error. + Otherwise interpret it as a short option. */ + if (!long_only || argv[optind][1] == '-' + || my_index (optstring, *nextchar) == NULL) + { + if (opterr) + { + if (argv[optind][1] == '-') + /* --option */ + fprintf (stderr, _("%s: unrecognized option `--%s'\n"), + argv[0], nextchar); + else + /* +option or -option */ + fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), + argv[0], argv[optind][0], nextchar); + } + nextchar = (char *) ""; + optind++; + optopt = 0; + return '?'; + } + } + + /* Look at and handle the next short option-character. */ + + { + char c = *nextchar++; + char *temp = my_index (optstring, c); + + /* Increment `optind' when we start to process its last character. */ + if (*nextchar == '\0') + ++optind; + + if (temp == NULL || c == ':') + { + if (opterr) + { + if (posixly_correct) + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, _("%s: illegal option -- %c\n"), + argv[0], c); + else + fprintf (stderr, _("%s: invalid option -- %c\n"), + argv[0], c); + } + optopt = c; + return '?'; + } + /* Convenience. Treat POSIX -W foo same as long option --foo */ + if (temp[0] == 'W' && temp[1] == ';') + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = 0; + int option_index; + + /* This is an option that requires an argument. */ + if (*nextchar != '\0') + { + optarg = nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + optind++; + } + else if (optind == argc) + { + if (opterr) + { + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, _("%s: option requires an argument -- %c\n"), + argv[0], c); + } + optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + return c; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + optarg = argv[optind++]; + + /* optarg is now the argument, see if it's in the + table of longopts. */ + + for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, nextchar, nameend - nextchar)) + { + if ((unsigned int) (nameend - nextchar) == strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else + /* Second or later nonexact match found. */ + ambig = 1; + } + if (ambig && !exact) + { + if (opterr) + fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), + argv[0], argv[optind]); + nextchar += strlen (nextchar); + optind++; + return '?'; + } + if (pfound != NULL) + { + option_index = indfound; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + optarg = nameend + 1; + else + { + if (opterr) + fprintf (stderr, _("\ +%s: option `-W %s' doesn't allow an argument\n"), + argv[0], pfound->name); + + nextchar += strlen (nextchar); + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (optind < argc) + optarg = argv[optind++]; + else + { + if (opterr) + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[optind - 1]); + nextchar += strlen (nextchar); + return optstring[0] == ':' ? ':' : '?'; + } + } + nextchar += strlen (nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + nextchar = NULL; + return 'W'; /* Let the application handle it. */ + } + if (temp[1] == ':') + { + if (temp[2] == ':') + { + /* This is an option that accepts an argument optionally. */ + if (*nextchar != '\0') + { + optarg = nextchar; + optind++; + } + else + optarg = NULL; + nextchar = NULL; + } + else + { + /* This is an option that requires an argument. */ + if (*nextchar != '\0') + { + optarg = nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + optind++; + } + else if (optind == argc) + { + if (opterr) + { + /* 1003.2 specifies the format of this message. */ + fprintf (stderr, + _("%s: option requires an argument -- %c\n"), + argv[0], c); + } + optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + optarg = argv[optind++]; + nextchar = NULL; + } + } + return c; + } +} + +int +getopt (argc, argv, optstring) + int argc; + char *const *argv; + const char *optstring; +{ + return _getopt_internal (argc, argv, optstring, + (const struct option *) 0, + (int *) 0, + 0); +} + +#endif /* Not ELIDE_CODE. */ + +#ifdef TEST + +/* Compile with -DTEST to make an executable for use in testing + the above definition of `getopt'. */ + +int +main (argc, argv) + int argc; + char **argv; +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + + c = getopt (argc, argv, "abc:d:0123456789"); + if (c == -1) + break; + + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/getopt.h b/debian/gettext-kde/gettext-kde-0.10.35/lib/getopt.h new file mode 100644 index 00000000..c4adc30b --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/getopt.h @@ -0,0 +1,133 @@ +/* Declarations for getopt. + Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to [email protected]. + + 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, 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. */ + +#ifndef _GETOPT_H +#define _GETOPT_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +extern char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +extern int optind; + +/* Callers store zero here to inhibit the error message `getopt' prints + for unrecognized options. */ + +extern int opterr; + +/* Set to an option character which was unrecognized. */ + +extern int optopt; + +/* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of `struct option' terminated by an element containing a name which is + zero. + + The field `has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field `flag' is not NULL, it points to a variable that is set + to the value given in the field `val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an `int' to + a compiled-in constant, such as set a value from `optarg', set the + option's `flag' field to zero and its `val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero `flag' field, `getopt' + returns the contents of the `val' field. */ + +struct option +{ +#if defined (__STDC__) && __STDC__ + const char *name; +#else + char *name; +#endif + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; +}; + +/* Names for the values of the `has_arg' field of `struct option'. */ + +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +#if defined (__STDC__) && __STDC__ +#ifdef __GNU_LIBRARY__ +/* Many other libraries have conflicting prototypes for getopt, with + differences in the consts, in stdlib.h. To avoid compilation + errors, only prototype getopt for the GNU C library. */ +extern int getopt (int argc, char *const *argv, const char *shortopts); +#else /* not __GNU_LIBRARY__ */ +extern int getopt (); +#endif /* __GNU_LIBRARY__ */ +extern int getopt_long (int argc, char *const *argv, const char *shortopts, + const struct option *longopts, int *longind); +extern int getopt_long_only (int argc, char *const *argv, + const char *shortopts, + const struct option *longopts, int *longind); + +/* Internal only. Users should not call this directly. */ +extern int _getopt_internal (int argc, char *const *argv, + const char *shortopts, + const struct option *longopts, int *longind, + int long_only); +#else /* not __STDC__ */ +extern int getopt (); +extern int getopt_long (); +extern int getopt_long_only (); + +extern int _getopt_internal (); +#endif /* __STDC__ */ + +#ifdef __cplusplus +} +#endif + +#endif /* getopt.h */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/getopt1.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/getopt1.c new file mode 100644 index 00000000..4ce10655 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/getopt1.c @@ -0,0 +1,190 @@ +/* getopt_long and getopt_long_only entry points for GNU getopt. + Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98 + Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to [email protected]. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "getopt.h" + +#if !defined __STDC__ || !__STDC__ +/* This is a separate conditional since some stdc systems + reject `defined (const)'. */ +#ifndef const +#define const +#endif +#endif + +#include <stdio.h> + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself. This code is part of the GNU C + Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object files, + it is simpler to just do this in the source for each such file. */ + +#define GETOPT_INTERFACE_VERSION 2 +#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2 +#include <gnu-versions.h> +#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION +#define ELIDE_CODE +#endif +#endif + +#ifndef ELIDE_CODE + + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +#include <stdlib.h> +#endif + +#ifndef NULL +#define NULL 0 +#endif + +int +getopt_long (argc, argv, options, long_options, opt_index) + int argc; + char *const *argv; + const char *options; + const struct option *long_options; + int *opt_index; +{ + return _getopt_internal (argc, argv, options, long_options, opt_index, 0); +} + +/* Like getopt_long, but '-' as well as '--' can indicate a long option. + If an option that starts with '-' (not '--') doesn't match a long option, + but does match a short option, it is parsed as a short option + instead. */ + +int +getopt_long_only (argc, argv, options, long_options, opt_index) + int argc; + char *const *argv; + const char *options; + const struct option *long_options; + int *opt_index; +{ + return _getopt_internal (argc, argv, options, long_options, opt_index, 1); +} + + +#endif /* Not ELIDE_CODE. */ + +#ifdef TEST + +#include <stdio.h> + +int +main (argc, argv) + int argc; + char **argv; +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + int option_index = 0; + static struct option long_options[] = + { + {"add", 1, 0, 0}, + {"append", 0, 0, 0}, + {"delete", 1, 0, 0}, + {"verbose", 0, 0, 0}, + {"create", 0, 0, 0}, + {"file", 1, 0, 0}, + {0, 0, 0, 0} + }; + + c = getopt_long (argc, argv, "abc:d:0123456789", + long_options, &option_index); + if (c == -1) + break; + + switch (c) + { + case 0: + printf ("option %s", long_options[option_index].name); + if (optarg) + printf (" with arg %s", optarg); + printf ("\n"); + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case 'd': + printf ("option d with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/hash.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/hash.c new file mode 100644 index 00000000..dcf223c0 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/hash.c @@ -0,0 +1,385 @@ +/* hash - implement simple hashing table with string based keys. + Copyright (C) 1994, 1995 Free Software Foundation, Inc. + Written by Ulrich Drepper <[email protected]>, October 1994. + + 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, 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. */ + +#if HAVE_CONFIG_H +# include <config.h> +#endif + +#if STDC_HEADERS +# include <stdlib.h> +#else +# ifdef HAVE_MALLOC_H +# include <malloc.h> +# endif +#endif + +#ifdef HAVE_STRING_H +# include <string.h> +#else +# include <strings.h> +#endif + +#include <stdio.h> +#include <sys/types.h> + +#if HAVE_OBSTACK +# include <obstack.h> +#else +# include "obstack.h" +#endif + +#if HAVE_VALUES_H +# include <values.h> +#endif + +#include "hash.h" + +#define obstack_chunk_alloc xmalloc +#define obstack_chunk_free free + +#ifndef BITSPERBYTE +# define BITSPERBYTE 8 +#endif + +#ifndef LONGBITS +# define LONGBITS (sizeof (long) * BITSPERBYTE) +#endif + +#ifndef bcopy +# define bcopy(S, D, N) memcpy ((D), (S), (N)) +#endif + +void *xmalloc PARAMS ((size_t __n)); + +typedef struct hash_entry +{ + unsigned long used; + const char *key; + void *data; + struct hash_entry *next; +} +hash_entry; + +/* Prototypes for local functions. */ +static void insert_entry_2 PARAMS ((hash_table *htab, const char *key, + unsigned long hval, size_t idx, + void *data)); +static size_t lookup PARAMS ((hash_table *htab, const char *key, size_t keylen, + unsigned long hval)); +static size_t lookup_2 PARAMS ((hash_table *htab, const char *key, + unsigned long hval)); +static unsigned long compute_hashval PARAMS ((const char *key, size_t keylen)); +static int is_prime PARAMS ((unsigned long candidate)); + + +int +init_hash (htab, init_size) + hash_table *htab; + unsigned long init_size; +{ + /* We need the size to be a prime. */ + init_size = next_prime (init_size); + + /* Initialize the data structure. */ + htab->size = init_size; + htab->filled = 0; + htab->first = NULL; + htab->table = (void *) xmalloc ((init_size + 1) * sizeof (hash_entry)); + if (htab->table == NULL) + return -1; + + memset (htab->table, '\0', (init_size + 1) * sizeof (hash_entry)); + obstack_init (&htab->mem_pool); + + return 0; +} + + +int +delete_hash (htab) + hash_table *htab; +{ + free (htab->table); + obstack_free (&htab->mem_pool, NULL); + return 0; +} + + +int +insert_entry (htab, key, keylen, data) + hash_table *htab; + const char *key; + size_t keylen; + void *data; +{ + unsigned long hval = compute_hashval (key, keylen); + hash_entry *table = (hash_entry *) htab->table; + size_t idx = lookup (htab, key, keylen, hval); + + if (table[idx].used) + /* We don't want to overwrite the old value. */ + return -1; + else + { + /* An empty bucket has been found. */ + insert_entry_2 (htab, obstack_copy0 (&htab->mem_pool, key, keylen), + hval, idx, data); + return 0; + } +} + +static void +insert_entry_2 (htab, key, hval, idx, data) + hash_table *htab; + const char *key; + unsigned long hval; + size_t idx; + void *data; +{ + hash_entry *table = (hash_entry *) htab->table; + + table[idx].used = hval; + table[idx].key = key; + table[idx].data = data; + + /* List the new value in the list. */ + if ((hash_entry *) htab->first == NULL) + { + table[idx].next = &table[idx]; + *(hash_entry **) &htab->first = &table[idx]; + } + else + { + table[idx].next = ((hash_entry *) htab->first)->next; + ((hash_entry *) htab->first)->next = &table[idx]; + *(hash_entry **) &htab->first = &table[idx]; + } + + ++htab->filled; + if (100 * htab->filled > 90 * htab->size) + { + /* Table is filled more than 90%. Resize the table. */ + unsigned long old_size = htab->size; + + htab->size = next_prime (htab->size * 2); + htab->filled = 0; + htab->first = NULL; + htab->table = (void *) xmalloc ((1 + htab->size) + * sizeof (hash_entry)); + memset (htab->table, '\0', (1 + htab->size) * sizeof (hash_entry)); + + for (idx = 1; idx <= old_size; ++idx) + if (table[idx].used) + insert_entry_2 (htab, table[idx].key, table[idx].used, + lookup_2 (htab, table[idx].key, table[idx].used), + table[idx].data); + + free (table); + } +} + + +int +find_entry (htab, key, keylen, result) + hash_table *htab; + const char *key; + size_t keylen; + void **result; +{ + hash_entry *table = (hash_entry *) htab->table; + size_t idx = lookup (htab, key, keylen, compute_hashval (key, keylen)); + + if (table[idx].used == 0) + return -1; + + *result = table[idx].data; + return 0; +} + + +int +iterate_table (htab, ptr, key, data) + hash_table *htab; + void **ptr; + const void **key; + void **data; +{ + if (*ptr == NULL) + { + if (htab->first == NULL) + return -1; + *ptr = (void *) ((hash_entry *) htab->first)->next; + } + else + { + if (*ptr == htab->first) + return -1; + *ptr = (void *) (((hash_entry *) *ptr)->next); + } + + *key = ((hash_entry *) *ptr)->key; + *data = ((hash_entry *) *ptr)->data; + return 0; +} + + +static size_t +lookup (htab, key, keylen, hval) + hash_table *htab; + const char *key; + size_t keylen; + unsigned long hval; +{ + unsigned long hash; + size_t idx; + hash_entry *table = (hash_entry *) htab->table; + + /* First hash function: simply take the modul but prevent zero. */ + hash = 1 + hval % htab->size; + + idx = hash; + + if (table[idx].used) + { + if (table[idx].used == hval && table[idx].key[keylen] == '\0' + && strncmp (key, table[idx].key, keylen) == 0) + return idx; + + /* Second hash function as suggested in [Knuth]. */ + hash = 1 + hval % (htab->size - 2); + + do + { + if (idx <= hash) + idx = htab->size + idx - hash; + else + idx -= hash; + + /* If entry is found use it. */ + if (table[idx].used == hval && table[idx].key[keylen] == '\0' + && strncmp (key, table[idx].key, keylen) == 0) + return idx; + } + while (table[idx].used); + } + return idx; +} + + +/* References: + [Aho,Sethi,Ullman] Compilers: Principles, Techniques and Tools, 1986 + [Knuth] The Art of Computer Programming, part3 (6.4) */ + +static size_t +lookup_2 (htab, key, hval) + hash_table *htab; + const char *key; + unsigned long hval; +{ + unsigned long hash; + size_t idx; + hash_entry *table = (hash_entry *) htab->table; + + /* First hash function: simply take the modul but prevent zero. */ + hash = 1 + hval % htab->size; + + idx = hash; + + if (table[idx].used) + { + if (table[idx].used == hval && strcmp (key, table[idx].key) == 0) + return idx; + + /* Second hash function as suggested in [Knuth]. */ + hash = 1 + hval % (htab->size - 2); + + do + { + if (idx <= hash) + idx = htab->size + idx - hash; + else + idx -= hash; + + /* If entry is found use it. */ + if (table[idx].used == hval && strcmp (key, table[idx].key) == 0) + return idx; + } + while (table[idx].used); + } + return idx; +} + + +static unsigned long +compute_hashval (key, keylen) + const char *key; + size_t keylen; +{ + size_t cnt; + unsigned long hval, g; + + /* Compute the hash value for the given string. The algorithm + is taken from [Aho,Sethi,Ullman]. */ + cnt = 0; + hval = keylen; + while (cnt < keylen) + { + hval <<= 4; + hval += key[cnt++]; + g = hval & ((unsigned long) 0xf << (LONGBITS - 4)); + if (g != 0) + { + hval ^= g >> (LONGBITS - 8); + hval ^= g; + } + } + return hval != 0 ? hval : ~((unsigned long) 0); +} + + +unsigned long +next_prime (seed) + unsigned long seed; +{ + /* Make it definitely odd. */ + seed |= 1; + + while (!is_prime (seed)) + seed += 2; + + return seed; +} + + +static int +is_prime (candidate) + unsigned long candidate; +{ + /* No even number and none less than 10 will be passed here. */ + unsigned long divn = 3; + unsigned long sq = divn * divn; + + while (sq < candidate && candidate % divn != 0) + { + ++divn; + sq += 4 * divn; + ++divn; + } + + return candidate % divn != 0; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/hash.h b/debian/gettext-kde/gettext-kde-0.10.35/lib/hash.h new file mode 100644 index 00000000..238d6ca8 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/hash.h @@ -0,0 +1,53 @@ +/* Copyright (C) 1995 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If + not, write to the Free Software Foundation, Inc., 59 Temple Place + - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef _HASH_H +# define _HASH_H + +# include <obstack.h> + +typedef struct hash_table +{ + unsigned long size; + unsigned long filled; + void *first; + void *table; + struct obstack mem_pool; +} +hash_table; + +# ifndef PARAMS +# if defined (__GNUC__) || __STDC__ +# define PARAMS(Args) Args +# else +# define PARAMS(Args) () +# endif +# endif + +int init_hash PARAMS ((hash_table *htab, unsigned long init_size)); +int delete_hash PARAMS ((hash_table *htab)); +int insert_entry PARAMS ((hash_table *htab, const char *key, size_t keylen, + void *data)); +int find_entry PARAMS ((hash_table *htab, const char *key, size_t keylen, + void **result)); + +int iterate_table PARAMS ((hash_table *htab, void **ptr, + const void **key, void **data)); + +unsigned long next_prime PARAMS ((unsigned long seed)); + +#endif /* not _HASH_H */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/memmove.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/memmove.c new file mode 100644 index 00000000..ea38e8df --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/memmove.c @@ -0,0 +1,28 @@ +/* memmove.c -- copy memory. + Copy LENGTH bytes from SOURCE to DEST. Does not null-terminate. + In the public domain. + By David MacKenzie <[email protected]>. */ + +#if HAVE_CONFIG_H +# include <config.h> +#endif + +void * +memmove (dest, source, length) + char *dest; + const char *source; + unsigned length; +{ + char *d0 = dest; + if (source < dest) + /* Moving from low mem to hi mem; start at end. */ + for (source += length, dest += length; length; --length) + *--dest = *--source; + else if (source != dest) + { + /* Moving from hi mem to low mem; start at beginning. */ + for (; length; --length) + *dest++ = *source++; + } + return (void *) d0; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/memset.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/memset.c new file mode 100644 index 00000000..a0db560a --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/memset.c @@ -0,0 +1,29 @@ +/* memset.c -- set an area of memory to a given value + Copyright (C) 1991 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +char * +memset (str, c, len) + char *str; + int c; + unsigned len; +{ + register char *st = str; + + while (len-- > 0) + *st++ = c; + return str; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/obstack.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/obstack.c new file mode 100644 index 00000000..e5b5d4fd --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/obstack.c @@ -0,0 +1,593 @@ +/* obstack.c - subroutines used implicitly by object stack macros + Copyright (C) 1988,89,90,91,92,93,94,96,97 Free Software Foundation, Inc. + + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to [email protected]. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "obstack.h" + +/* NOTE BEFORE MODIFYING THIS FILE: This version number must be + incremented whenever callers compiled using an old obstack.h can no + longer properly call the functions in this obstack.c. */ +#define OBSTACK_INTERFACE_VERSION 1 + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself, and the installed library + supports the same library interface we do. This code is part of the GNU + C Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object + files, it is simpler to just do this in the source for each such file. */ + +#include <stdio.h> /* Random thing to get __GNU_LIBRARY__. */ +#if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1 +#include <gnu-versions.h> +#if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION +#define ELIDE_CODE +#endif +#endif + + +#ifndef ELIDE_CODE + + +#if defined (__STDC__) && __STDC__ +#define POINTER void * +#else +#define POINTER char * +#endif + +/* Determine default alignment. */ +struct fooalign {char x; double d;}; +#define DEFAULT_ALIGNMENT \ + ((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0)) +/* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT. + But in fact it might be less smart and round addresses to as much as + DEFAULT_ROUNDING. So we prepare for it to do that. */ +union fooround {long x; double d;}; +#define DEFAULT_ROUNDING (sizeof (union fooround)) + +/* When we copy a long block of data, this is the unit to do it with. + On some machines, copying successive ints does not work; + in such a case, redefine COPYING_UNIT to `long' (if that works) + or `char' as a last resort. */ +#ifndef COPYING_UNIT +#define COPYING_UNIT int +#endif + + +/* The functions allocating more room by calling `obstack_chunk_alloc' + jump to the handler pointed to by `obstack_alloc_failed_handler'. + This variable by default points to the internal function + `print_and_abort'. */ +#if defined (__STDC__) && __STDC__ +static void print_and_abort (void); +void (*obstack_alloc_failed_handler) (void) = print_and_abort; +#else +static void print_and_abort (); +void (*obstack_alloc_failed_handler) () = print_and_abort; +#endif + +/* Exit value used when `print_and_abort' is used. */ +#if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H +#include <stdlib.h> +#endif +#ifndef EXIT_FAILURE +#define EXIT_FAILURE 1 +#endif +int obstack_exit_failure = EXIT_FAILURE; + +/* The non-GNU-C macros copy the obstack into this global variable + to avoid multiple evaluation. */ + +struct obstack *_obstack; + +/* Define a macro that either calls functions with the traditional malloc/free + calling interface, or calls functions with the mmalloc/mfree interface + (that adds an extra first argument), based on the state of use_extra_arg. + For free, do not use ?:, since some compilers, like the MIPS compilers, + do not allow (expr) ? void : void. */ + +#if defined (__STDC__) && __STDC__ +#define CALL_CHUNKFUN(h, size) \ + (((h) -> use_extra_arg) \ + ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ + : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size))) + +#define CALL_FREEFUN(h, old_chunk) \ + do { \ + if ((h) -> use_extra_arg) \ + (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ + else \ + (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \ + } while (0) +#else +#define CALL_CHUNKFUN(h, size) \ + (((h) -> use_extra_arg) \ + ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ + : (*(struct _obstack_chunk *(*) ()) (h)->chunkfun) ((size))) + +#define CALL_FREEFUN(h, old_chunk) \ + do { \ + if ((h) -> use_extra_arg) \ + (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ + else \ + (*(void (*) ()) (h)->freefun) ((old_chunk)); \ + } while (0) +#endif + + +/* Initialize an obstack H for use. Specify chunk size SIZE (0 means default). + Objects start on multiples of ALIGNMENT (0 means use default). + CHUNKFUN is the function to use to allocate chunks, + and FREEFUN the function to free them. + + Return nonzero if successful, zero if out of memory. + To recover from an out of memory error, + free up some memory, then call this again. */ + +int +_obstack_begin (h, size, alignment, chunkfun, freefun) + struct obstack *h; + int size; + int alignment; +#if defined (__STDC__) && __STDC__ + POINTER (*chunkfun) (long); + void (*freefun) (void *); +#else + POINTER (*chunkfun) (); + void (*freefun) (); +#endif +{ + register struct _obstack_chunk *chunk; /* points to new chunk */ + + if (alignment == 0) + alignment = (int) DEFAULT_ALIGNMENT; + if (size == 0) + /* Default size is what GNU malloc can fit in a 4096-byte block. */ + { + /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. + Use the values for range checking, because if range checking is off, + the extra bytes won't be missed terribly, but if range checking is on + and we used a larger request, a whole extra 4096 bytes would be + allocated. + + These number are irrelevant to the new GNU malloc. I suspect it is + less sensitive to the size of the request. */ + int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) + + 4 + DEFAULT_ROUNDING - 1) + & ~(DEFAULT_ROUNDING - 1)); + size = 4096 - extra; + } + +#if defined (__STDC__) && __STDC__ + h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun; + h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; +#else + h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun; + h->freefun = freefun; +#endif + h->chunk_size = size; + h->alignment_mask = alignment - 1; + h->use_extra_arg = 0; + + chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); + if (!chunk) + (*obstack_alloc_failed_handler) (); + h->next_free = h->object_base = chunk->contents; + h->chunk_limit = chunk->limit + = (char *) chunk + h->chunk_size; + chunk->prev = 0; + /* The initial chunk now contains no empty object. */ + h->maybe_empty_object = 0; + h->alloc_failed = 0; + return 1; +} + +int +_obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg) + struct obstack *h; + int size; + int alignment; +#if defined (__STDC__) && __STDC__ + POINTER (*chunkfun) (POINTER, long); + void (*freefun) (POINTER, POINTER); +#else + POINTER (*chunkfun) (); + void (*freefun) (); +#endif + POINTER arg; +{ + register struct _obstack_chunk *chunk; /* points to new chunk */ + + if (alignment == 0) + alignment = (int) DEFAULT_ALIGNMENT; + if (size == 0) + /* Default size is what GNU malloc can fit in a 4096-byte block. */ + { + /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. + Use the values for range checking, because if range checking is off, + the extra bytes won't be missed terribly, but if range checking is on + and we used a larger request, a whole extra 4096 bytes would be + allocated. + + These number are irrelevant to the new GNU malloc. I suspect it is + less sensitive to the size of the request. */ + int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) + + 4 + DEFAULT_ROUNDING - 1) + & ~(DEFAULT_ROUNDING - 1)); + size = 4096 - extra; + } + +#if defined(__STDC__) && __STDC__ + h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun; + h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; +#else + h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun; + h->freefun = freefun; +#endif + h->chunk_size = size; + h->alignment_mask = alignment - 1; + h->extra_arg = arg; + h->use_extra_arg = 1; + + chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); + if (!chunk) + (*obstack_alloc_failed_handler) (); + h->next_free = h->object_base = chunk->contents; + h->chunk_limit = chunk->limit + = (char *) chunk + h->chunk_size; + chunk->prev = 0; + /* The initial chunk now contains no empty object. */ + h->maybe_empty_object = 0; + h->alloc_failed = 0; + return 1; +} + +/* Allocate a new current chunk for the obstack *H + on the assumption that LENGTH bytes need to be added + to the current object, or a new object of length LENGTH allocated. + Copies any partial object from the end of the old chunk + to the beginning of the new one. */ + +void +_obstack_newchunk (h, length) + struct obstack *h; + int length; +{ + register struct _obstack_chunk *old_chunk = h->chunk; + register struct _obstack_chunk *new_chunk; + register long new_size; + register long obj_size = h->next_free - h->object_base; + register long i; + long already; + + /* Compute size for new chunk. */ + new_size = (obj_size + length) + (obj_size >> 3) + 100; + if (new_size < h->chunk_size) + new_size = h->chunk_size; + + /* Allocate and initialize the new chunk. */ + new_chunk = CALL_CHUNKFUN (h, new_size); + if (!new_chunk) + (*obstack_alloc_failed_handler) (); + h->chunk = new_chunk; + new_chunk->prev = old_chunk; + new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size; + + /* Move the existing object to the new chunk. + Word at a time is fast and is safe if the object + is sufficiently aligned. */ + if (h->alignment_mask + 1 >= DEFAULT_ALIGNMENT) + { + for (i = obj_size / sizeof (COPYING_UNIT) - 1; + i >= 0; i--) + ((COPYING_UNIT *)new_chunk->contents)[i] + = ((COPYING_UNIT *)h->object_base)[i]; + /* We used to copy the odd few remaining bytes as one extra COPYING_UNIT, + but that can cross a page boundary on a machine + which does not do strict alignment for COPYING_UNITS. */ + already = obj_size / sizeof (COPYING_UNIT) * sizeof (COPYING_UNIT); + } + else + already = 0; + /* Copy remaining bytes one by one. */ + for (i = already; i < obj_size; i++) + new_chunk->contents[i] = h->object_base[i]; + + /* If the object just copied was the only data in OLD_CHUNK, + free that chunk and remove it from the chain. + But not if that chunk might contain an empty object. */ + if (h->object_base == old_chunk->contents && ! h->maybe_empty_object) + { + new_chunk->prev = old_chunk->prev; + CALL_FREEFUN (h, old_chunk); + } + + h->object_base = new_chunk->contents; + h->next_free = h->object_base + obj_size; + /* The new chunk certainly contains no empty object yet. */ + h->maybe_empty_object = 0; +} + +/* Return nonzero if object OBJ has been allocated from obstack H. + This is here for debugging. + If you use it in a program, you are probably losing. */ + +#if defined (__STDC__) && __STDC__ +/* Suppress -Wmissing-prototypes warning. We don't want to declare this in + obstack.h because it is just for debugging. */ +int _obstack_allocated_p (struct obstack *h, POINTER obj); +#endif + +int +_obstack_allocated_p (h, obj) + struct obstack *h; + POINTER obj; +{ + register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ + register struct _obstack_chunk *plp; /* point to previous chunk if any */ + + lp = (h)->chunk; + /* We use >= rather than > since the object cannot be exactly at + the beginning of the chunk but might be an empty object exactly + at the end of an adjacent chunk. */ + while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) + { + plp = lp->prev; + lp = plp; + } + return lp != 0; +} + +/* Free objects in obstack H, including OBJ and everything allocate + more recently than OBJ. If OBJ is zero, free everything in H. */ + +#undef obstack_free + +/* This function has two names with identical definitions. + This is the first one, called from non-ANSI code. */ + +void +_obstack_free (h, obj) + struct obstack *h; + POINTER obj; +{ + register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ + register struct _obstack_chunk *plp; /* point to previous chunk if any */ + + lp = h->chunk; + /* We use >= because there cannot be an object at the beginning of a chunk. + But there can be an empty object at that address + at the end of another chunk. */ + while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) + { + plp = lp->prev; + CALL_FREEFUN (h, lp); + lp = plp; + /* If we switch chunks, we can't tell whether the new current + chunk contains an empty object, so assume that it may. */ + h->maybe_empty_object = 1; + } + if (lp) + { + h->object_base = h->next_free = (char *) (obj); + h->chunk_limit = lp->limit; + h->chunk = lp; + } + else if (obj != 0) + /* obj is not in any of the chunks! */ + abort (); +} + +/* This function is used from ANSI code. */ + +void +obstack_free (h, obj) + struct obstack *h; + POINTER obj; +{ + register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ + register struct _obstack_chunk *plp; /* point to previous chunk if any */ + + lp = h->chunk; + /* We use >= because there cannot be an object at the beginning of a chunk. + But there can be an empty object at that address + at the end of another chunk. */ + while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj)) + { + plp = lp->prev; + CALL_FREEFUN (h, lp); + lp = plp; + /* If we switch chunks, we can't tell whether the new current + chunk contains an empty object, so assume that it may. */ + h->maybe_empty_object = 1; + } + if (lp) + { + h->object_base = h->next_free = (char *) (obj); + h->chunk_limit = lp->limit; + h->chunk = lp; + } + else if (obj != 0) + /* obj is not in any of the chunks! */ + abort (); +} + +int +_obstack_memory_used (h) + struct obstack *h; +{ + register struct _obstack_chunk* lp; + register int nbytes = 0; + + for (lp = h->chunk; lp != 0; lp = lp->prev) + { + nbytes += lp->limit - (char *) lp; + } + return nbytes; +} + +/* Define the error handler. */ +#ifndef _ +# ifdef HAVE_LIBINTL_H +# include <libintl.h> +# ifndef _ +# define _(Str) gettext (Str) +# endif +# else +# define _(Str) (Str) +# endif +#endif + +static void +print_and_abort () +{ + fputs (_("memory exhausted\n"), stderr); + exit (obstack_exit_failure); +} + +#if 0 +/* These are now turned off because the applications do not use it + and it uses bcopy via obstack_grow, which causes trouble on sysV. */ + +/* Now define the functional versions of the obstack macros. + Define them to simply use the corresponding macros to do the job. */ + +#if defined (__STDC__) && __STDC__ +/* These function definitions do not work with non-ANSI preprocessors; + they won't pass through the macro names in parentheses. */ + +/* The function names appear in parentheses in order to prevent + the macro-definitions of the names from being expanded there. */ + +POINTER (obstack_base) (obstack) + struct obstack *obstack; +{ + return obstack_base (obstack); +} + +POINTER (obstack_next_free) (obstack) + struct obstack *obstack; +{ + return obstack_next_free (obstack); +} + +int (obstack_object_size) (obstack) + struct obstack *obstack; +{ + return obstack_object_size (obstack); +} + +int (obstack_room) (obstack) + struct obstack *obstack; +{ + return obstack_room (obstack); +} + +int (obstack_make_room) (obstack, length) + struct obstack *obstack; + int length; +{ + return obstack_make_room (obstack, length); +} + +void (obstack_grow) (obstack, pointer, length) + struct obstack *obstack; + POINTER pointer; + int length; +{ + obstack_grow (obstack, pointer, length); +} + +void (obstack_grow0) (obstack, pointer, length) + struct obstack *obstack; + POINTER pointer; + int length; +{ + obstack_grow0 (obstack, pointer, length); +} + +void (obstack_1grow) (obstack, character) + struct obstack *obstack; + int character; +{ + obstack_1grow (obstack, character); +} + +void (obstack_blank) (obstack, length) + struct obstack *obstack; + int length; +{ + obstack_blank (obstack, length); +} + +void (obstack_1grow_fast) (obstack, character) + struct obstack *obstack; + int character; +{ + obstack_1grow_fast (obstack, character); +} + +void (obstack_blank_fast) (obstack, length) + struct obstack *obstack; + int length; +{ + obstack_blank_fast (obstack, length); +} + +POINTER (obstack_finish) (obstack) + struct obstack *obstack; +{ + return obstack_finish (obstack); +} + +POINTER (obstack_alloc) (obstack, length) + struct obstack *obstack; + int length; +{ + return obstack_alloc (obstack, length); +} + +POINTER (obstack_copy) (obstack, pointer, length) + struct obstack *obstack; + POINTER pointer; + int length; +{ + return obstack_copy (obstack, pointer, length); +} + +POINTER (obstack_copy0) (obstack, pointer, length) + struct obstack *obstack; + POINTER pointer; + int length; +{ + return obstack_copy0 (obstack, pointer, length); +} + +#endif /* __STDC__ */ + +#endif /* 0 */ + +#endif /* !ELIDE_CODE */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/obstack.h b/debian/gettext-kde/gettext-kde-0.10.35/lib/obstack.h new file mode 100644 index 00000000..144998cb --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/obstack.h @@ -0,0 +1,593 @@ +/* obstack.h - object stack macros + Copyright (C) 1988,89,90,91,92,93,94,96,97,98 Free Software Foundation, Inc. + + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to [email protected]. + + 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, 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. */ + +/* Summary: + +All the apparent functions defined here are macros. The idea +is that you would use these pre-tested macros to solve a +very specific set of problems, and they would run fast. +Caution: no side-effects in arguments please!! They may be +evaluated MANY times!! + +These macros operate a stack of objects. Each object starts life +small, and may grow to maturity. (Consider building a word syllable +by syllable.) An object can move while it is growing. Once it has +been "finished" it never changes address again. So the "top of the +stack" is typically an immature growing object, while the rest of the +stack is of mature, fixed size and fixed address objects. + +These routines grab large chunks of memory, using a function you +supply, called `obstack_chunk_alloc'. On occasion, they free chunks, +by calling `obstack_chunk_free'. You must define them and declare +them before using any obstack macros. + +Each independent stack is represented by a `struct obstack'. +Each of the obstack macros expects a pointer to such a structure +as the first argument. + +One motivation for this package is the problem of growing char strings +in symbol tables. Unless you are "fascist pig with a read-only mind" +--Gosper's immortal quote from HAKMEM item 154, out of context--you +would not like to put any arbitrary upper limit on the length of your +symbols. + +In practice this often means you will build many short symbols and a +few long symbols. At the time you are reading a symbol you don't know +how long it is. One traditional method is to read a symbol into a +buffer, realloc()ating the buffer every time you try to read a symbol +that is longer than the buffer. This is beaut, but you still will +want to copy the symbol from the buffer to a more permanent +symbol-table entry say about half the time. + +With obstacks, you can work differently. Use one obstack for all symbol +names. As you read a symbol, grow the name in the obstack gradually. +When the name is complete, finalize it. Then, if the symbol exists already, +free the newly read name. + +The way we do this is to take a large chunk, allocating memory from +low addresses. When you want to build a symbol in the chunk you just +add chars above the current "high water mark" in the chunk. When you +have finished adding chars, because you got to the end of the symbol, +you know how long the chars are, and you can create a new object. +Mostly the chars will not burst over the highest address of the chunk, +because you would typically expect a chunk to be (say) 100 times as +long as an average object. + +In case that isn't clear, when we have enough chars to make up +the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed) +so we just point to it where it lies. No moving of chars is +needed and this is the second win: potentially long strings need +never be explicitly shuffled. Once an object is formed, it does not +change its address during its lifetime. + +When the chars burst over a chunk boundary, we allocate a larger +chunk, and then copy the partly formed object from the end of the old +chunk to the beginning of the new larger chunk. We then carry on +accreting characters to the end of the object as we normally would. + +A special macro is provided to add a single char at a time to a +growing object. This allows the use of register variables, which +break the ordinary 'growth' macro. + +Summary: + We allocate large chunks. + We carve out one object at a time from the current chunk. + Once carved, an object never moves. + We are free to append data of any size to the currently + growing object. + Exactly one object is growing in an obstack at any one time. + You can run one obstack per control block. + You may have as many control blocks as you dare. + Because of the way we do it, you can `unwind' an obstack + back to a previous state. (You may remove objects much + as you would with a stack.) +*/ + + +/* Don't do the contents of this file more than once. */ + +#ifndef _OBSTACK_H +#define _OBSTACK_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* We use subtraction of (char *) 0 instead of casting to int + because on word-addressable machines a simple cast to int + may ignore the byte-within-word field of the pointer. */ + +#ifndef __PTR_TO_INT +# define __PTR_TO_INT(P) ((P) - (char *) 0) +#endif + +#ifndef __INT_TO_PTR +# define __INT_TO_PTR(P) ((P) + (char *) 0) +#endif + +/* We need the type of the resulting object. If __PTRDIFF_TYPE__ is + defined, as with GNU C, use that; that way we don't pollute the + namespace with <stddef.h>'s symbols. Otherwise, if <stddef.h> is + available, include it and use ptrdiff_t. In traditional C, long is + the best that we can do. */ + +#ifdef __PTRDIFF_TYPE__ +# define PTR_INT_TYPE __PTRDIFF_TYPE__ +#else +# ifdef HAVE_STDDEF_H +# include <stddef.h> +# define PTR_INT_TYPE ptrdiff_t +# else +# define PTR_INT_TYPE long +# endif +#endif + +#if defined _LIBC || defined HAVE_STRING_H +# include <string.h> +# define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N)) +#else +# ifdef memcpy +# define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N)) +# else +# define _obstack_memcpy(To, From, N) bcopy ((From), (To), (N)) +# endif +#endif + +struct _obstack_chunk /* Lives at front of each chunk. */ +{ + char *limit; /* 1 past end of this chunk */ + struct _obstack_chunk *prev; /* address of prior chunk or NULL */ + char contents[4]; /* objects begin here */ +}; + +struct obstack /* control current object in current chunk */ +{ + long chunk_size; /* preferred size to allocate chunks in */ + struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */ + char *object_base; /* address of object we are building */ + char *next_free; /* where to add next char to current object */ + char *chunk_limit; /* address of char after current chunk */ + PTR_INT_TYPE temp; /* Temporary for some macros. */ + int alignment_mask; /* Mask of alignment for each object. */ +#if defined __STDC__ && __STDC__ + /* These prototypes vary based on `use_extra_arg', and we use + casts to the prototypeless function type in all assignments, + but having prototypes here quiets -Wstrict-prototypes. */ + struct _obstack_chunk *(*chunkfun) (void *, long); + void (*freefun) (void *, struct _obstack_chunk *); + void *extra_arg; /* first arg for chunk alloc/dealloc funcs */ +#else + struct _obstack_chunk *(*chunkfun) (); /* User's fcn to allocate a chunk. */ + void (*freefun) (); /* User's function to free a chunk. */ + char *extra_arg; /* first arg for chunk alloc/dealloc funcs */ +#endif + unsigned use_extra_arg:1; /* chunk alloc/dealloc funcs take extra arg */ + unsigned maybe_empty_object:1;/* There is a possibility that the current + chunk contains a zero-length object. This + prevents freeing the chunk if we allocate + a bigger chunk to replace it. */ + unsigned alloc_failed:1; /* No longer used, as we now call the failed + handler on error, but retained for binary + compatibility. */ +}; + +/* Declare the external functions we use; they are in obstack.c. */ + +#if defined __STDC__ && __STDC__ +extern void _obstack_newchunk (struct obstack *, int); +extern void _obstack_free (struct obstack *, void *); +extern int _obstack_begin (struct obstack *, int, int, + void *(*) (long), void (*) (void *)); +extern int _obstack_begin_1 (struct obstack *, int, int, + void *(*) (void *, long), + void (*) (void *, void *), void *); +extern int _obstack_memory_used (struct obstack *); +#else +extern void _obstack_newchunk (); +extern void _obstack_free (); +extern int _obstack_begin (); +extern int _obstack_begin_1 (); +extern int _obstack_memory_used (); +#endif + +#if defined __STDC__ && __STDC__ + +/* Do the function-declarations after the structs + but before defining the macros. */ + +void obstack_init (struct obstack *obstack); + +void * obstack_alloc (struct obstack *obstack, int size); + +void * obstack_copy (struct obstack *obstack, void *address, int size); +void * obstack_copy0 (struct obstack *obstack, void *address, int size); + +void obstack_free (struct obstack *obstack, void *block); + +void obstack_blank (struct obstack *obstack, int size); + +void obstack_grow (struct obstack *obstack, void *data, int size); +void obstack_grow0 (struct obstack *obstack, void *data, int size); + +void obstack_1grow (struct obstack *obstack, int data_char); +void obstack_ptr_grow (struct obstack *obstack, void *data); +void obstack_int_grow (struct obstack *obstack, int data); + +void * obstack_finish (struct obstack *obstack); + +int obstack_object_size (struct obstack *obstack); + +int obstack_room (struct obstack *obstack); +void obstack_make_room (struct obstack *obstack, int size); +void obstack_1grow_fast (struct obstack *obstack, int data_char); +void obstack_ptr_grow_fast (struct obstack *obstack, void *data); +void obstack_int_grow_fast (struct obstack *obstack, int data); +void obstack_blank_fast (struct obstack *obstack, int size); + +void * obstack_base (struct obstack *obstack); +void * obstack_next_free (struct obstack *obstack); +int obstack_alignment_mask (struct obstack *obstack); +int obstack_chunk_size (struct obstack *obstack); +int obstack_memory_used (struct obstack *obstack); + +#endif /* __STDC__ */ + +/* Non-ANSI C cannot really support alternative functions for these macros, + so we do not declare them. */ + +/* Error handler called when `obstack_chunk_alloc' failed to allocate + more memory. This can be set to a user defined function. The + default action is to print a message and abort. */ +#if defined __STDC__ && __STDC__ +extern void (*obstack_alloc_failed_handler) (void); +#else +extern void (*obstack_alloc_failed_handler) (); +#endif + +/* Exit value used when `print_and_abort' is used. */ +extern int obstack_exit_failure; + +/* Pointer to beginning of object being allocated or to be allocated next. + Note that this might not be the final address of the object + because a new chunk might be needed to hold the final size. */ + +#define obstack_base(h) ((h)->object_base) + +/* Size for allocating ordinary chunks. */ + +#define obstack_chunk_size(h) ((h)->chunk_size) + +/* Pointer to next byte not yet allocated in current chunk. */ + +#define obstack_next_free(h) ((h)->next_free) + +/* Mask specifying low bits that should be clear in address of an object. */ + +#define obstack_alignment_mask(h) ((h)->alignment_mask) + +/* To prevent prototype warnings provide complete argument list in + standard C version. */ +#if defined __STDC__ && __STDC__ + +# define obstack_init(h) \ + _obstack_begin ((h), 0, 0, \ + (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free) + +# define obstack_begin(h, size) \ + _obstack_begin ((h), (size), 0, \ + (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free) + +# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ + _obstack_begin ((h), (size), (alignment), \ + (void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun)) + +# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ + _obstack_begin_1 ((h), (size), (alignment), \ + (void *(*) (void *, long)) (chunkfun), \ + (void (*) (void *, void *)) (freefun), (arg)) + +# define obstack_chunkfun(h, newchunkfun) \ + ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun)) + +# define obstack_freefun(h, newfreefun) \ + ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun)) + +#else + +# define obstack_init(h) \ + _obstack_begin ((h), 0, 0, \ + (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free) + +# define obstack_begin(h, size) \ + _obstack_begin ((h), (size), 0, \ + (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free) + +# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ + _obstack_begin ((h), (size), (alignment), \ + (void *(*) ()) (chunkfun), (void (*) ()) (freefun)) + +# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ + _obstack_begin_1 ((h), (size), (alignment), \ + (void *(*) ()) (chunkfun), (void (*) ()) (freefun), (arg)) + +# define obstack_chunkfun(h, newchunkfun) \ + ((h) -> chunkfun = (struct _obstack_chunk *(*)()) (newchunkfun)) + +# define obstack_freefun(h, newfreefun) \ + ((h) -> freefun = (void (*)()) (newfreefun)) + +#endif + +#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = achar) + +#define obstack_blank_fast(h,n) ((h)->next_free += (n)) + +#define obstack_memory_used(h) _obstack_memory_used (h) + +#if defined __GNUC__ && defined __STDC__ && __STDC__ +/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and + does not implement __extension__. But that compiler doesn't define + __GNUC_MINOR__. */ +# if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__) +# define __extension__ +# endif + +/* For GNU C, if not -traditional, + we can define these macros to compute all args only once + without using a global variable. + Also, we can avoid using the `temp' slot, to make faster code. */ + +# define obstack_object_size(OBSTACK) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + (unsigned) (__o->next_free - __o->object_base); }) + +# define obstack_room(OBSTACK) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + (unsigned) (__o->chunk_limit - __o->next_free); }) + +# define obstack_make_room(OBSTACK,length) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + int __len = (length); \ + if (__o->chunk_limit - __o->next_free < __len) \ + _obstack_newchunk (__o, __len); \ + (void) 0; }) + +# define obstack_empty_p(OBSTACK) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + (__o->chunk->prev == 0 && __o->next_free - __o->chunk->contents == 0); }) + +# define obstack_grow(OBSTACK,where,length) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + int __len = (length); \ + if (__o->next_free + __len > __o->chunk_limit) \ + _obstack_newchunk (__o, __len); \ + _obstack_memcpy (__o->next_free, (char *) (where), __len); \ + __o->next_free += __len; \ + (void) 0; }) + +# define obstack_grow0(OBSTACK,where,length) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + int __len = (length); \ + if (__o->next_free + __len + 1 > __o->chunk_limit) \ + _obstack_newchunk (__o, __len + 1); \ + _obstack_memcpy (__o->next_free, (char *) (where), __len); \ + __o->next_free += __len; \ + *(__o->next_free)++ = 0; \ + (void) 0; }) + +# define obstack_1grow(OBSTACK,datum) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + if (__o->next_free + 1 > __o->chunk_limit) \ + _obstack_newchunk (__o, 1); \ + *(__o->next_free)++ = (datum); \ + (void) 0; }) + +/* These assume that the obstack alignment is good enough for pointers or ints, + and that the data added so far to the current object + shares that much alignment. */ + +# define obstack_ptr_grow(OBSTACK,datum) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + if (__o->next_free + sizeof (void *) > __o->chunk_limit) \ + _obstack_newchunk (__o, sizeof (void *)); \ + *((void **)__o->next_free)++ = ((void *)datum); \ + (void) 0; }) + +# define obstack_int_grow(OBSTACK,datum) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + if (__o->next_free + sizeof (int) > __o->chunk_limit) \ + _obstack_newchunk (__o, sizeof (int)); \ + *((int *)__o->next_free)++ = ((int)datum); \ + (void) 0; }) + +# define obstack_ptr_grow_fast(h,aptr) (*((void **) (h)->next_free)++ = (void *)aptr) +# define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint) + +# define obstack_blank(OBSTACK,length) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + int __len = (length); \ + if (__o->chunk_limit - __o->next_free < __len) \ + _obstack_newchunk (__o, __len); \ + __o->next_free += __len; \ + (void) 0; }) + +# define obstack_alloc(OBSTACK,length) \ +__extension__ \ +({ struct obstack *__h = (OBSTACK); \ + obstack_blank (__h, (length)); \ + obstack_finish (__h); }) + +# define obstack_copy(OBSTACK,where,length) \ +__extension__ \ +({ struct obstack *__h = (OBSTACK); \ + obstack_grow (__h, (where), (length)); \ + obstack_finish (__h); }) + +# define obstack_copy0(OBSTACK,where,length) \ +__extension__ \ +({ struct obstack *__h = (OBSTACK); \ + obstack_grow0 (__h, (where), (length)); \ + obstack_finish (__h); }) + +/* The local variable is named __o1 to avoid a name conflict + when obstack_blank is called. */ +# define obstack_finish(OBSTACK) \ +__extension__ \ +({ struct obstack *__o1 = (OBSTACK); \ + void *value; \ + value = (void *) __o1->object_base; \ + if (__o1->next_free == value) \ + __o1->maybe_empty_object = 1; \ + __o1->next_free \ + = __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask)\ + & ~ (__o1->alignment_mask)); \ + if (__o1->next_free - (char *)__o1->chunk \ + > __o1->chunk_limit - (char *)__o1->chunk) \ + __o1->next_free = __o1->chunk_limit; \ + __o1->object_base = __o1->next_free; \ + value; }) + +# define obstack_free(OBSTACK, OBJ) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + void *__obj = (OBJ); \ + if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) \ + __o->next_free = __o->object_base = __obj; \ + else (obstack_free) (__o, __obj); }) + +#else /* not __GNUC__ or not __STDC__ */ + +# define obstack_object_size(h) \ + (unsigned) ((h)->next_free - (h)->object_base) + +# define obstack_room(h) \ + (unsigned) ((h)->chunk_limit - (h)->next_free) + +# define obstack_empty_p(h) \ + ((h)->chunk->prev == 0 && (h)->next_free - (h)->chunk->contents == 0) + +/* Note that the call to _obstack_newchunk is enclosed in (..., 0) + so that we can avoid having void expressions + in the arms of the conditional expression. + Casting the third operand to void was tried before, + but some compilers won't accept it. */ + +# define obstack_make_room(h,length) \ +( (h)->temp = (length), \ + (((h)->next_free + (h)->temp > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), (h)->temp), 0) : 0)) + +# define obstack_grow(h,where,length) \ +( (h)->temp = (length), \ + (((h)->next_free + (h)->temp > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ + _obstack_memcpy ((h)->next_free, (char *) (where), (h)->temp), \ + (h)->next_free += (h)->temp) + +# define obstack_grow0(h,where,length) \ +( (h)->temp = (length), \ + (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \ + _obstack_memcpy ((h)->next_free, (char *) (where), (h)->temp), \ + (h)->next_free += (h)->temp, \ + *((h)->next_free)++ = 0) + +# define obstack_1grow(h,datum) \ +( (((h)->next_free + 1 > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), 1), 0) : 0), \ + (*((h)->next_free)++ = (datum))) + +# define obstack_ptr_grow(h,datum) \ +( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \ + (*((char **) (((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *) datum))) + +# define obstack_int_grow(h,datum) \ +( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \ + (*((int *) (((h)->next_free+=sizeof(int))-sizeof(int))) = ((int) datum))) + +# define obstack_ptr_grow_fast(h,aptr) (*((char **) (h)->next_free)++ = (char *) aptr) +# define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint) + +# define obstack_blank(h,length) \ +( (h)->temp = (length), \ + (((h)->chunk_limit - (h)->next_free < (h)->temp) \ + ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ + ((h)->next_free += (h)->temp)) + +# define obstack_alloc(h,length) \ + (obstack_blank ((h), (length)), obstack_finish ((h))) + +# define obstack_copy(h,where,length) \ + (obstack_grow ((h), (where), (length)), obstack_finish ((h))) + +# define obstack_copy0(h,where,length) \ + (obstack_grow0 ((h), (where), (length)), obstack_finish ((h))) + +# define obstack_finish(h) \ +( ((h)->next_free == (h)->object_base \ + ? (((h)->maybe_empty_object = 1), 0) \ + : 0), \ + (h)->temp = __PTR_TO_INT ((h)->object_base), \ + (h)->next_free \ + = __INT_TO_PTR ((__PTR_TO_INT ((h)->next_free)+(h)->alignment_mask) \ + & ~ ((h)->alignment_mask)), \ + (((h)->next_free - (char *) (h)->chunk \ + > (h)->chunk_limit - (char *) (h)->chunk) \ + ? ((h)->next_free = (h)->chunk_limit) : 0), \ + (h)->object_base = (h)->next_free, \ + __INT_TO_PTR ((h)->temp)) + +# if defined __STDC__ && __STDC__ +# define obstack_free(h,obj) \ +( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \ + (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ + ? (int) ((h)->next_free = (h)->object_base \ + = (h)->temp + (char *) (h)->chunk) \ + : (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0))) +# else +# define obstack_free(h,obj) \ +( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \ + (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ + ? (int) ((h)->next_free = (h)->object_base \ + = (h)->temp + (char *) (h)->chunk) \ + : (_obstack_free ((h), (h)->temp + (char *) (h)->chunk), 0))) +# endif + +#endif /* not __GNUC__ or not __STDC__ */ + +#ifdef __cplusplus +} /* C++ */ +#endif + +#endif /* obstack.h */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/pathmax.h b/debian/gettext-kde/gettext-kde-0.10.35/lib/pathmax.h new file mode 100644 index 00000000..74f5792a --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/pathmax.h @@ -0,0 +1,53 @@ +/* Define PATH_MAX somehow. Requires sys/types.h. + Copyright (C) 1992 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +#ifndef _PATHMAX_H +#define _PATHMAX_H + +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif + +/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define + PATH_MAX but might cause redefinition warnings when sys/param.h is + later included (as on MORE/BSD 4.3). */ +#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__)) +#include <limits.h> +#endif + +#ifndef _POSIX_PATH_MAX +#define _POSIX_PATH_MAX 255 +#endif + +#if !defined(PATH_MAX) && defined(_PC_PATH_MAX) +#define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX)) +#endif + +/* Don't include sys/param.h if it already has been. */ +#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN) +#include <sys/param.h> +#endif + +#if !defined(PATH_MAX) && defined(MAXPATHLEN) +#define PATH_MAX MAXPATHLEN +#endif + +#ifndef PATH_MAX +#define PATH_MAX _POSIX_PATH_MAX +#endif + +#endif /* _PATHMAX_H */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/printf-parse.h b/debian/gettext-kde/gettext-kde-0.10.35/lib/printf-parse.h new file mode 100644 index 00000000..90116867 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/printf-parse.h @@ -0,0 +1,421 @@ +/* Internal header for parsing printf format strings. + Copyright (C) 1995, 1996 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +/* We use some extension so define this here. */ +#define _GNU_SOURCE 1 + +#include <ctype.h> +#include <printf.h> +#if STDC_HEADERS +# include <stddef.h> +#endif + +#if STDC_HEADERS || HAVE_STRING_H +# include <string.h> +#else +# include <strings.h> +#endif + +#if __GNUC__ >= 2 +# define long_long_int long long int +# define long_double long double +#else +# define long_long_int long +# define long_double double +#endif + +#ifndef MB_CUR_MAX +# define MB_CUR_MAX (sizeof (long)) +#endif + +#define NDEBUG 1 +#include <assert.h> + +#ifndef MAX +# if defined __GNU__ && __GNUC__ >= 2 +# define MAX(a,b) ({typeof(a) _a = (a); typeof(b) _b = (b); \ + _a > _b ? _a : _b; }) +# else +# define MAX(a,b) ((a) > (b) ? (a) : (b)) +# endif +#endif +#ifndef MIN +# if defined __GNU__ && __GNUC__ >= 2 +# define MIN(a,b) ({typeof(a) _a = (a); typeof(b) _b = (b); \ + _a < _b ? _a : _b; }) +# else +# define MIN(a,b) ((a) < (b) ? (a) : (b)) +# endif +#endif + +struct printf_spec + { + /* Information parsed from the format spec. */ + struct printf_info info; + + /* Pointers into the format string for the end of this format + spec and the next (or to the end of the string if no more). */ + const char *end_of_fmt, *next_fmt; + + /* Position of arguments for precision and width, or -1 if `info' has + the constant value. */ + int prec_arg, width_arg; + + int data_arg; /* Position of data argument. */ + int data_arg_type; /* Type of first argument. */ + /* Number of arguments consumed by this format specifier. */ + size_t ndata_args; + }; + + +/* The various kinds off arguments that can be passed to printf. */ +union printf_arg + { + unsigned char pa_char; + short int pa_short_int; + int pa_int; + long int pa_long_int; + long_long_int pa_long_long_int; + unsigned short int pa_u_short_int; + unsigned int pa_u_int; + unsigned long int pa_u_long_int; + unsigned long_long_int pa_u_long_long_int; + float pa_float; + double pa_double; + long_double pa_long_double; + const char *pa_string; + void *pa_pointer; + }; + + +/* Prototype for local function. */ +static unsigned int read_int PARAMS ((const unsigned char **pstr)); +static const char *find_spec PARAMS ((const char *format)); +static inline size_t parse_one_spec PARAMS ((const unsigned char *format, + size_t posn, + struct printf_spec *spec, + size_t *max_ref_arg)); + + +/* Read a simple integer from a string and update the string pointer. + It is assumed that the first character is a digit. */ +static inline unsigned int +read_int (pstr) + const unsigned char **pstr; +{ + unsigned int retval = **pstr - '0'; + + while (isdigit (*++(*pstr))) + { + retval *= 10; + retval += **pstr - '0'; + } + + return retval; +} + + + +/* Find the next spec in FORMAT, or the end of the string. Returns + a pointer into FORMAT, to a '%' or a '\0'. */ +static inline const char * +find_spec (format) + const char *format; +{ + while (*format != '\0' && *format != '%') + { + int len; + +#ifdef HAVE_MBLEN + if (isascii (*format) || (len = mblen (format, MB_CUR_MAX)) <= 0) + ++format; + else + format += len; +#else + ++format; +#endif + } + return format; +} + + +/* FORMAT must point to a '%' at the beginning of a spec. Fills in *SPEC + with the parsed details. POSN is the number of arguments already + consumed. At most MAXTYPES - POSN types are filled in TYPES. Return + the number of args consumed by this spec; *MAX_REF_ARG is updated so it + remains the highest argument index used. */ +static inline size_t +parse_one_spec (format, posn, spec, max_ref_arg) + const unsigned char *format; + size_t posn; + struct printf_spec *spec; + size_t *max_ref_arg; +{ + unsigned int n; + size_t nargs = 0; + + /* Skip the '%'. */ + ++format; + + /* Clear information structure. */ + spec->data_arg = -1; + spec->info.alt = 0; + spec->info.space = 0; + spec->info.left = 0; + spec->info.showsign = 0; + spec->info.group = 0; + spec->info.pad = ' '; + + /* Test for positional argument. */ + if (isdigit (*format)) + { + const char *begin = format; + + n = read_int (&format); + + if (n > 0 && *format == '$') + /* Is positional parameter. */ + { + ++format; /* Skip the '$'. */ + spec->data_arg = n - 1; + *max_ref_arg = MAX (*max_ref_arg, n); + } + else + /* Oops; that was actually the width and/or 0 padding flag. + Step back and read it again. */ + format = begin; + } + + /* Check for spec modifiers. */ + while (*format == ' ' || *format == '+' || *format == '-' || + *format == '#' || *format == '0' || *format == '\'') + switch (*format++) + { + case ' ': + /* Output a space in place of a sign, when there is no sign. */ + spec->info.space = 1; + break; + case '+': + /* Always output + or - for numbers. */ + spec->info.showsign = 1; + break; + case '-': + /* Left-justify things. */ + spec->info.left = 1; + break; + case '#': + /* Use the "alternate form": + Hex has 0x or 0X, FP always has a decimal point. */ + spec->info.alt = 1; + break; + case '0': + /* Pad with 0s. */ + spec->info.pad = '0'; + break; + case '\'': + /* Show grouping in numbers if the locale information + indicates any. */ + spec->info.group = 1; + break; + } + if (spec->info.left) + spec->info.pad = ' '; + + /* Get the field width. */ + spec->width_arg = -1; + spec->info.width = 0; + if (*format == '*') + { + /* The field width is given in an argument. + A negative field width indicates left justification. */ + const char *begin = ++format; + + if (isdigit (*format)) + { + /* The width argument might be found in a positional parameter. */ + n = read_int (&format); + + if (n > 0 && *format == '$') + { + spec->width_arg = n - 1; + *max_ref_arg = MAX (*max_ref_arg, n); + ++format; /* Skip '$'. */ + } + } + + if (spec->width_arg < 0) + { + /* Not in a positional parameter. Consume one argument. */ + spec->width_arg = posn++; + ++nargs; + format = begin; /* Step back and reread. */ + } + } + else if (isdigit (*format)) + /* Constant width specification. */ + spec->info.width = read_int (&format); + + /* Get the precision. */ + spec->prec_arg = -1; + /* -1 means none given; 0 means explicit 0. */ + spec->info.prec = -1; + if (*format == '.') + { + ++format; + if (*format == '*') + { + /* The precision is given in an argument. */ + const char *begin = ++format; + + if (isdigit (*format)) + { + n = read_int (&format); + + if (n > 0 && *format == '$') + { + spec->prec_arg = n - 1; + *max_ref_arg = MAX (*max_ref_arg, n); + ++format; + } + } + + if (spec->prec_arg < 0) + { + /* Not in a positional parameter. */ + spec->prec_arg = posn++; + ++nargs; + format = begin; + } + } + else if (isdigit (*format)) + spec->info.prec = read_int (&format); + else + /* "%.?" is treated like "%.0?". */ + spec->info.prec = 0; + } + + /* Check for type modifiers. */ +#define is_longlong is_long_double + spec->info.is_long_double = 0; + spec->info.is_short = 0; + spec->info.is_long = 0; + + while (*format == 'h' || *format == 'l' || *format == 'L' || + *format == 'Z' || *format == 'q') + switch (*format++) + { + case 'h': + /* int's are short int's. */ + spec->info.is_short = 1; + break; + case 'l': + if (spec->info.is_long) + /* A double `l' is equivalent to an `L'. */ + spec->info.is_longlong = 1; + else + /* int's are long int's. */ + spec->info.is_long = 1; + break; + case 'L': + /* double's are long double's, and int's are long long int's. */ + spec->info.is_long_double = 1; + break; + case 'Z': + /* int's are size_t's. */ + assert (sizeof(size_t) <= sizeof(unsigned long_long_int)); + spec->info.is_longlong = sizeof(size_t) > sizeof(unsigned long int); + spec->info.is_long = sizeof(size_t) > sizeof(unsigned int); + break; + case 'q': + /* 4.4 uses this for long long. */ + spec->info.is_longlong = 1; + break; + } + + /* Get the format specification. */ + spec->info.spec = *format++; + /* Find the data argument types of a built-in spec. */ + spec->ndata_args = 1; + + switch (spec->info.spec) + { + case 'i': + case 'd': + case 'u': + case 'o': + case 'X': + case 'x': + if (spec->info.is_longlong) + spec->data_arg_type = PA_INT|PA_FLAG_LONG_LONG; + else if (spec->info.is_long) + spec->data_arg_type = PA_INT|PA_FLAG_LONG; + else if (spec->info.is_short) + spec->data_arg_type = PA_INT|PA_FLAG_SHORT; + else + spec->data_arg_type = PA_INT; + break; + case 'e': + case 'E': + case 'f': + case 'g': + case 'G': + if (spec->info.is_long_double) + spec->data_arg_type = PA_DOUBLE|PA_FLAG_LONG_DOUBLE; + else + spec->data_arg_type = PA_DOUBLE; + break; + case 'c': + spec->data_arg_type = PA_CHAR; + break; + case 's': + spec->data_arg_type = PA_STRING; + break; + case 'p': + spec->data_arg_type = PA_POINTER|PA_FLAG_PTR; + break; + case 'n': + spec->data_arg_type = PA_INT|PA_FLAG_PTR; + break; + + case 'm': + default: + /* An unknown spec will consume no args. */ + spec->ndata_args = 0; + break; + } + + if (spec->data_arg == -1 && spec->ndata_args > 0) + { + /* There are args consumed, but no positional spec. + Use the next sequential arg position. */ + spec->data_arg = posn; + posn += spec->ndata_args; + nargs += spec->ndata_args; + } + + if (spec->info.spec == '\0') + /* Format ended before this spec was complete. */ + spec->end_of_fmt = spec->next_fmt = format - 1; + else + { + /* Find the next format spec. */ + spec->end_of_fmt = format; + spec->next_fmt = find_spec (format); + } + + return nargs; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/printf-prs.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/printf-prs.c new file mode 100644 index 00000000..9371e27d --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/printf-prs.c @@ -0,0 +1,75 @@ +/* Copyright (C) 1991, 1992, 1995, 1996 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdio.h> +#include <printf.h> +#ifdef STDC_HEADERS +# include <stdlib.h> +#endif + +#include "printf-parse.h" + + +size_t +parse_printf_format (fmt, n, argtypes) + const char *fmt; + size_t n; + int *argtypes; +{ + size_t nargs; /* Number of arguments. */ + size_t max_ref_arg; /* Highest index used in a positional arg. */ + struct printf_spec spec; + + nargs = 0; + max_ref_arg = 0; + + /* Search for format specifications. */ + for (fmt = find_spec (fmt); *fmt != '\0'; fmt = spec.next_fmt) + { + /* Parse this spec. */ + nargs += parse_one_spec (fmt, nargs, &spec, &max_ref_arg); + + /* If the width is determined by an argument this is an int. */ + if (spec.width_arg != -1 && spec.width_arg < (int) n) + argtypes[spec.width_arg] = PA_INT; + + /* If the precision is determined by an argument this is an int. */ + if (spec.prec_arg != -1 && spec.prec_arg < (int) n) + argtypes[spec.prec_arg] = PA_INT; + + if (spec.data_arg < (int) n) + switch (spec.ndata_args) + { + case 0: /* No arguments. */ + break; + case 1: /* One argument; we already have the type. */ + argtypes[spec.data_arg] = spec.data_arg_type; + break; + default: + /* We don't handle this here. Beside GNU libc no other + libc provides printf function registration. But while + having this feature it also provides this function, so + that using *this* file is not needed. */ + break; + } + } + + return MAX (nargs, max_ref_arg); +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/printf.h b/debian/gettext-kde/gettext-kde-0.10.35/lib/printf.h new file mode 100644 index 00000000..03b00352 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/printf.h @@ -0,0 +1,108 @@ +/* Copyright (C) 1991, 1992, 1993, 1995 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, 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. */ + +#ifndef _PRINTF_H + +#define _PRINTF_H 1 + +#include <stdio.h> +#include <sys/types.h> + +#ifdef STDC_HEADERS +# include <stddef.h> +#endif + +#ifndef PARAMS +# if __STDC__ +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif +#endif + +struct printf_info +{ + int prec; /* Precision. */ + int width; /* Width. */ + char spec; /* Format letter. */ + unsigned is_long_double:1; /* L flag. */ + unsigned is_short:1; /* h flag. */ + unsigned is_long:1; /* l flag. */ + unsigned alt:1; /* # flag. */ + unsigned space:1; /* Space flag. */ + unsigned left:1; /* - flag. */ + unsigned showsign:1; /* + flag. */ + unsigned group:1; /* ' flag. */ + char pad; /* Padding character. */ +}; + + +/* Type of a printf specifier-handler function. + STREAM is the FILE on which to write output. + INFO gives information about the format specification. + Arguments can be read from ARGS. + The function should return the number of characters written, + or -1 for errors. */ + +typedef int (*printf_function) PARAMS ((FILE * __stream, + const struct printf_info * __info, + const void **const __args)); +typedef int (*printf_arginfo_function) PARAMS ((const struct printf_info + *__info, + size_t __n, + int *__argtypes)); + +/* Parse FMT, and fill in N elements of ARGTYPES with the + types needed for the conversions FMT specifies. Returns + the number of arguments required by FMT. + + The ARGINFO function registered with a user-defined format is passed a + `struct printf_info' describing the format spec being parsed. A width + or precision of INT_MIN means a `*' was used to indicate that the + width/precision will come from an arg. The function should fill in the + array it is passed with the types of the arguments it wants, and return + the number of arguments it wants. */ + +extern size_t parse_printf_format PARAMS ((const char *__fmt, + size_t __n, + int *__argtypes)); + +/* Codes returned by `parse_printf_format' for basic types. + + These values cover all the standard format specifications. + Users can add new values after PA_LAST for their own types. */ + +enum +{ /* C type: */ + PA_INT, /* int */ + PA_CHAR, /* int, cast to char */ + PA_STRING, /* const char *, a '\0'-terminated string */ + PA_POINTER, /* void * */ + PA_FLOAT, /* float */ + PA_DOUBLE, /* double */ + PA_LAST +}; + +/* Flag bits that can be set in a type returned by `parse_printf_format'. */ +#define PA_FLAG_MASK 0xff00 +#define PA_FLAG_LONG_LONG (1 << 8) +#define PA_FLAG_LONG_DOUBLE PA_FLAG_LONG_LONG +#define PA_FLAG_LONG (1 << 9) +#define PA_FLAG_SHORT (1 << 10) +#define PA_FLAG_PTR (1 << 11) + + +#endif /* printf.h */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/stpcpy.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/stpcpy.c new file mode 100644 index 00000000..0ad8863c --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/stpcpy.c @@ -0,0 +1,51 @@ +/* Copyright (C) 1992, 1995, 1997 Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to [email protected]. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <string.h> + +#undef __stpcpy +#undef stpcpy + +#ifndef weak_alias +# define __stpcpy stpcpy +#endif + +/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */ +char * +__stpcpy (dest, src) + char *dest; + const char *src; +{ + register char *d = dest; + register const char *s = src; + + do + *d++ = *s; + while (*s++ != '\0'); + + return d - 1; +} +#ifdef weak_alias +weak_alias (__stpcpy, stpcpy) +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/stpncpy.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/stpncpy.c new file mode 100644 index 00000000..fcbdfe50 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/stpncpy.c @@ -0,0 +1,101 @@ +/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to [email protected]. + + 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, 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. */ + +/* This is almost copied from strncpy.c, written by Torbjorn Granlund. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#ifdef _LIBC +# include <string.h> +#else +# include <sys/types.h> +#endif + +#ifndef weak_alias +# define __stpncpy stpncpy +#endif + +/* Copy no more than N characters of SRC to DEST, returning the address of + the terminating '\0' in DEST, if any, or else DEST + N. */ +char * +__stpncpy (dest, src, n) + char *dest; + const char *src; + size_t n; +{ + char c; + char *s = dest; + + if (n >= 4) + { + size_t n4 = n >> 2; + + for (;;) + { + c = *src++; + *dest++ = c; + if (c == '\0') + break; + c = *src++; + *dest++ = c; + if (c == '\0') + break; + c = *src++; + *dest++ = c; + if (c == '\0') + break; + c = *src++; + *dest++ = c; + if (c == '\0') + break; + if (--n4 == 0) + goto last_chars; + } + n -= dest - s; + goto zero_fill; + } + + last_chars: + n &= 3; + if (n == 0) + return dest; + + for (;;) + { + c = *src++; + --n; + *dest++ = c; + if (c == '\0') + break; + if (n == 0) + return dest; + } + + zero_fill: + while (n-- > 0) + dest[n] = '\0'; + + return dest - 1; +} +#ifdef weak_alias +weak_alias (__stpncpy, stpncpy) +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/strcasecmp.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/strcasecmp.c new file mode 100644 index 00000000..776d62ad --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/strcasecmp.c @@ -0,0 +1,77 @@ +/* Copyright (C) 1991, 1992, 1995, 1996, 1997 Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to [email protected]. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <ctype.h> +#include <string.h> + +#ifndef weak_alias +# define __strcasecmp strcasecmp +# define TOLOWER(Ch) tolower (Ch) +#else +# ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define __strcasecmp __strcasecmp_l +# define TOLOWER(Ch) __tolower_l ((Ch), loc) +# else +# define TOLOWER(Ch) tolower (Ch) +# endif +#endif + +#ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define LOCALE_PARAM , loc +# define LOCALE_PARAM_DECL __locale_t loc; +#else +# define LOCALE_PARAM +# define LOCALE_PARAM_DECL +#endif + +/* Compare S1 and S2, ignoring case, returning less than, equal to or + greater than zero if S1 is lexicographically less than, + equal to or greater than S2. */ +int +__strcasecmp (s1, s2 LOCALE_PARAM) + const char *s1; + const char *s2; + LOCALE_PARAM_DECL +{ + const unsigned char *p1 = (const unsigned char *) s1; + const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + if (p1 == p2) + return 0; + + do + { + c1 = TOLOWER (*p1++); + c2 = TOLOWER (*p2++); + if (c1 == '\0') + break; + } + while (c1 == c2); + + return c1 - c2; +} +#ifndef __strcasecmp +weak_alias (__strcasecmp, strcasecmp) +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/strcspn.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/strcspn.c new file mode 100644 index 00000000..6c2e0b8a --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/strcspn.c @@ -0,0 +1,52 @@ +/* Copyright (C) 1991, 1994, 1996, 1997 Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to [email protected]. + + 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, 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. */ + +#if HAVE_CONFIG_H +# include <config.h> +#endif + +#if defined _LIBC || HAVE_STRING_H +# include <string.h> +#else +# include <strings.h> +# ifndef strchr +# define strchr index +# endif +#endif + +#undef strcspn + +/* Return the length of the maximum initial segment of S + which contains no characters from REJECT. */ +size_t +strcspn (s, reject) + const char *s; + const char *reject; +{ + size_t count = 0; + + while (*s != '\0') + if (strchr (reject, *s++) == NULL) + ++count; + else + return count; + + return count; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/strncasecmp.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/strncasecmp.c new file mode 100644 index 00000000..52af434b --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/strncasecmp.c @@ -0,0 +1,80 @@ +/* Compare at most N characters of two strings without taking care for + the case. + Copyright (C) 1992, 1996, 1997 Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to [email protected]. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <string.h> +#include <ctype.h> + +#ifndef weak_alias +# define __strncasecmp strncasecmp +# define TOLOWER(Ch) tolower (Ch) +#else +# ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define __strncasecmp __strncasecmp_l +# define TOLOWER(Ch) __tolower_l ((Ch), loc) +# else +# define TOLOWER(Ch) tolower (Ch) +# endif +#endif + +#ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define LOCALE_PARAM , loc +# define LOCALE_PARAM_DECL __locale_t loc; +#else +# define LOCALE_PARAM +# define LOCALE_PARAM_DECL +#endif + +/* Compare no more than N characters of S1 and S2, + ignoring case, returning less than, equal to or + greater than zero if S1 is lexicographically less + than, equal to or greater than S2. */ +int +__strncasecmp (s1, s2, n LOCALE_PARAM) + const char *s1; + const char *s2; + size_t n; + LOCALE_PARAM_DECL +{ + const unsigned char *p1 = (const unsigned char *) s1; + const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + if (p1 == p2 || n == 0) + return 0; + + do + { + c1 = TOLOWER (*p1++); + c2 = TOLOWER (*p2++); + if (c1 == '\0' || c1 != c2) + return c1 - c2; + } while (--n > 0); + + return c1 - c2; +} +#ifndef __strncasecmp +weak_alias (__strncasecmp, strncasecmp) +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/strstr.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/strstr.c new file mode 100644 index 00000000..77f24cbc --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/strstr.c @@ -0,0 +1,44 @@ +/* strstr.c -- return the offset of one string within another + Copyright (C) 1989, 1990 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +/* Written by Mike Rendell <[email protected]>. */ + +/* Return the starting address of string S2 in S1; + return 0 if it is not found. */ + +char * +strstr (s1, s2) + char *s1; + char *s2; +{ + int i; + char *p1; + char *p2; + char *s = s1; + + for (p2 = s2, i = 0; *s; p2 = s2, i++, s++) + { + for (p1 = s; *p1 && *p2 && *p1 == *p2; p1++, p2++) + ; + if (!*p2) + break; + } + if (!*p2) + return s1 + i; + + return 0; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/strtol.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/strtol.c new file mode 100644 index 00000000..d49f1c61 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/strtol.c @@ -0,0 +1,445 @@ +/* Convert string representation of a number into an integer value. + Copyright (C) 1991, 92, 94, 95, 96, 97, 98 Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to [email protected]. + + 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, 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. */ + +#if HAVE_CONFIG_H +# include <config.h> +#endif + +#ifdef _LIBC +# define USE_NUMBER_GROUPING +# define STDC_HEADERS +# define HAVE_LIMITS_H +#endif + +#include <ctype.h> +#include <errno.h> +#ifndef errno +extern int errno; +#endif +#ifndef __set_errno +# define __set_errno(Val) errno = (Val) +#endif + +#ifdef HAVE_LIMITS_H +# include <limits.h> +#endif + +#ifdef STDC_HEADERS +# include <stddef.h> +# include <stdlib.h> +# include <string.h> +#else +# ifndef NULL +# define NULL 0 +# endif +#endif + +#ifdef USE_NUMBER_GROUPING +# include "../locale/localeinfo.h" +#endif + +/* Nonzero if we are defining `strtoul' or `strtoull', operating on + unsigned integers. */ +#ifndef UNSIGNED +# define UNSIGNED 0 +# define INT LONG int +#else +# define INT unsigned LONG int +#endif + +/* Determine the name. */ +#ifdef USE_IN_EXTENDED_LOCALE_MODEL +# if UNSIGNED +# ifdef USE_WIDE_CHAR +# ifdef QUAD +# define strtol __wcstoull_l +# else +# define strtol __wcstoul_l +# endif +# else +# ifdef QUAD +# define strtol __strtoull_l +# else +# define strtol __strtoul_l +# endif +# endif +# else +# ifdef USE_WIDE_CHAR +# ifdef QUAD +# define strtol __wcstoll_l +# else +# define strtol __wcstol_l +# endif +# else +# ifdef QUAD +# define strtol __strtoll_l +# else +# define strtol __strtol_l +# endif +# endif +# endif +#else +# if UNSIGNED +# ifdef USE_WIDE_CHAR +# ifdef QUAD +# define strtol wcstoull +# else +# define strtol wcstoul +# endif +# else +# ifdef QUAD +# define strtol strtoull +# else +# define strtol strtoul +# endif +# endif +# else +# ifdef USE_WIDE_CHAR +# ifdef QUAD +# define strtol wcstoll +# else +# define strtol wcstol +# endif +# else +# ifdef QUAD +# define strtol strtoll +# endif +# endif +# endif +#endif + +/* If QUAD is defined, we are defining `strtoll' or `strtoull', + operating on `long long int's. */ +#ifdef QUAD +# define LONG long long +# undef LONG_MIN +# define LONG_MIN LONG_LONG_MIN +# undef LONG_MAX +# define LONG_MAX LONG_LONG_MAX +# undef ULONG_MAX +# define ULONG_MAX ULONG_LONG_MAX +# if __GNUC__ == 2 && __GNUC_MINOR__ < 7 + /* Work around gcc bug with using this constant. */ + static const unsigned long long int maxquad = ULONG_LONG_MAX; +# undef ULONG_MAX +# define ULONG_MAX maxquad +# endif +#else +# define LONG long + +#ifndef ULONG_MAX +# define ULONG_MAX ((unsigned long) ~(unsigned long) 0) +#endif +#ifndef LONG_MAX +# define LONG_MAX ((long int) (ULONG_MAX >> 1)) +#endif +#endif + + +/* We use this code also for the extended locale handling where the + function gets as an additional argument the locale which has to be + used. To access the values we have to redefine the _NL_CURRENT + macro. */ +#ifdef USE_IN_EXTENDED_LOCALE_MODEL +# undef _NL_CURRENT +# define _NL_CURRENT(category, item) \ + (current->values[_NL_ITEM_INDEX (item)].string) +# define LOCALE_PARAM , loc +# define LOCALE_PARAM_DECL __locale_t loc; +#else +# define LOCALE_PARAM +# define LOCALE_PARAM_DECL +#endif + +#if defined _LIBC || defined HAVE_WCHAR_H +# include <wchar.h> +#endif + +#ifdef USE_WIDE_CHAR +# include <wctype.h> +# define L_(Ch) L##Ch +# define UCHAR_TYPE wint_t +# define STRING_TYPE wchar_t +# ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define ISSPACE(Ch) __iswspace_l ((Ch), loc) +# define ISALPHA(Ch) __iswalpha_l ((Ch), loc) +# define TOUPPER(Ch) __towupper_l ((Ch), loc) +# else +# define ISSPACE(Ch) iswspace (Ch) +# define ISALPHA(Ch) iswalpha (Ch) +# define TOUPPER(Ch) towupper (Ch) +# endif +# else +# if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII) +# define IN_CTYPE_DOMAIN(c) 1 +# else +# define IN_CTYPE_DOMAIN(c) isascii(c) +# endif +# define L_(Ch) Ch +# define UCHAR_TYPE unsigned char +# define STRING_TYPE char +# ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define ISSPACE(Ch) __isspace_l ((Ch), loc) +# define ISALPHA(Ch) __isalpha_l ((Ch), loc) +# define TOUPPER(Ch) __toupper_l ((Ch), loc) +# else +# define ISSPACE(Ch) (IN_CTYPE_DOMAIN (Ch) && isspace (Ch)) +# define ISALPHA(Ch) (IN_CTYPE_DOMAIN (Ch) && isalpha (Ch)) +# define TOUPPER(Ch) (IN_CTYPE_DOMAIN (Ch) ? toupper (Ch) : (Ch)) +# endif +#endif + +#ifdef __STDC__ +# define INTERNAL(X) INTERNAL1(X) +# define INTERNAL1(X) __##X##_internal +# define WEAKNAME(X) WEAKNAME1(X) +#else +# define INTERNAL(X) __/**/X/**/_internal +#endif + +#ifdef USE_NUMBER_GROUPING +/* This file defines a function to check for correct grouping. */ +# include "grouping.h" +#endif + + + +/* Convert NPTR to an `unsigned long int' or `long int' in base BASE. + If BASE is 0 the base is determined by the presence of a leading + zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal. + If BASE is < 2 or > 36, it is reset to 10. + If ENDPTR is not NULL, a pointer to the character after the last + one converted is stored in *ENDPTR. */ + +INT +INTERNAL (strtol) (nptr, endptr, base, group LOCALE_PARAM) + const STRING_TYPE *nptr; + STRING_TYPE **endptr; + int base; + int group; + LOCALE_PARAM_DECL +{ + int negative; + register unsigned LONG int cutoff; + register unsigned int cutlim; + register unsigned LONG int i; + register const STRING_TYPE *s; + register UCHAR_TYPE c; + const STRING_TYPE *save, *end; + int overflow; + +#ifdef USE_NUMBER_GROUPING +# ifdef USE_IN_EXTENDED_LOCALE_MODEL + struct locale_data *current = loc->__locales[LC_NUMERIC]; +# endif + /* The thousands character of the current locale. */ + wchar_t thousands = L'\0'; + /* The numeric grouping specification of the current locale, + in the format described in <locale.h>. */ + const char *grouping; + + if (group) + { + grouping = _NL_CURRENT (LC_NUMERIC, GROUPING); + if (*grouping <= 0 || *grouping == CHAR_MAX) + grouping = NULL; + else + { + /* Figure out the thousands separator character. */ +# if defined _LIBC || defined _HAVE_BTOWC + thousands = __btowc (*_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP)); + if (thousands == WEOF) + thousands = L'\0'; +# endif + if (thousands == L'\0') + grouping = NULL; + } + } + else + grouping = NULL; +#endif + + if (base < 0 || base == 1 || base > 36) + { + __set_errno (EINVAL); + return 0; + } + + save = s = nptr; + + /* Skip white space. */ + while (ISSPACE (*s)) + ++s; + if (*s == L_('\0')) + goto noconv; + + /* Check for a sign. */ + if (*s == L_('-')) + { + negative = 1; + ++s; + } + else if (*s == L_('+')) + { + negative = 0; + ++s; + } + else + negative = 0; + + /* Recognize number prefix and if BASE is zero, figure it out ourselves. */ + if (*s == L_('0')) + { + if (TOUPPER (s[1]) == L_('X')) + { + s += 2; + base = 16; + } + else if (base == 0) + base = 8; + } + else if (base == 0) + base = 10; + + /* Save the pointer so we can check later if anything happened. */ + save = s; + +#ifdef USE_NUMBER_GROUPING + if (group) + { + /* Find the end of the digit string and check its grouping. */ + end = s; + for (c = *end; c != L_('\0'); c = *++end) + if ((wchar_t) c != thousands + && ((wchar_t) c < L_('0') || (wchar_t) c > L_('9')) + && (!ISALPHA (c) || (int) (TOUPPER (c) - L_('A') + 10) >= base)) + break; + if (*s == thousands) + end = s; + else + end = correctly_grouped_prefix (s, end, thousands, grouping); + } + else +#endif + end = NULL; + + cutoff = ULONG_MAX / (unsigned LONG int) base; + cutlim = ULONG_MAX % (unsigned LONG int) base; + + overflow = 0; + i = 0; + for (c = *s; c != L_('\0'); c = *++s) + { + if (s == end) + break; + if (c >= L_('0') && c <= L_('9')) + c -= L_('0'); + else if (ISALPHA (c)) + c = TOUPPER (c) - L_('A') + 10; + else + break; + if ((int) c >= base) + break; + /* Check for overflow. */ + if (i > cutoff || (i == cutoff && c > cutlim)) + overflow = 1; + else + { + i *= (unsigned LONG int) base; + i += c; + } + } + + /* Check if anything actually happened. */ + if (s == save) + goto noconv; + + /* Store in ENDPTR the address of one character + past the last character we converted. */ + if (endptr != NULL) + *endptr = (STRING_TYPE *) s; + +#if !UNSIGNED + /* Check for a value that is within the range of + `unsigned LONG int', but outside the range of `LONG int'. */ + if (overflow == 0 + && i > (negative + ? -((unsigned LONG int) (LONG_MIN + 1)) + 1 + : (unsigned LONG int) LONG_MAX)) + overflow = 1; +#endif + + if (overflow) + { + __set_errno (ERANGE); +#if UNSIGNED + return ULONG_MAX; +#else + return negative ? LONG_MIN : LONG_MAX; +#endif + } + + /* Return the result of the appropriate sign. */ + return negative ? -i : i; + +noconv: + /* We must handle a special case here: the base is 0 or 16 and the + first two characters are '0' and 'x', but the rest are no + hexadecimal digits. This is no error case. We return 0 and + ENDPTR points to the `x`. */ + if (endptr != NULL) + if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X') + && save[-2] == L_('0')) + *endptr = (STRING_TYPE *) &save[-1]; + else + /* There was no number to convert. */ + *endptr = (STRING_TYPE *) nptr; + + return 0L; +} + +/* External user entry point. */ + +#if _LIBC - 0 == 0 +# undef PARAMS +# if defined (__STDC__) && __STDC__ +# define PARAMS(Args) Args +# else +# define PARAMS(Args) () +# endif + +/* Prototype. */ +INT strtol PARAMS ((const STRING_TYPE *nptr, STRING_TYPE **endptr, int base)); +#endif + + +INT +#ifdef weak_function +weak_function +#endif +strtol (nptr, endptr, base LOCALE_PARAM) + const STRING_TYPE *nptr; + STRING_TYPE **endptr; + int base; + LOCALE_PARAM_DECL +{ + return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM); +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/strtoul.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/strtoul.c new file mode 100644 index 00000000..873f5401 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/strtoul.c @@ -0,0 +1,23 @@ +/* Copyright (C) 1991, 1997 Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C Library. + Bugs can be reported to [email protected]. + + 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, 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. */ + +#define UNSIGNED 1 + +#include <strtol.c> diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/system.h b/debian/gettext-kde/gettext-kde-0.10.35/lib/system.h new file mode 100644 index 00000000..75c2ed85 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/system.h @@ -0,0 +1,139 @@ +/* Header for GNU gettext libiberty + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +#ifndef _SYSTEM_H +#define _SYSTEM_H 1 + +#ifndef PARAMS +# if __STDC__ +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif +#endif + +#include <stdio.h> +#include <sys/types.h> + +#if defined STDC_HEADERS +# include <stdlib.h> +#else +# ifdef HAVE_MALLOC_H +# include <malloc.h> +# endif +unsigned long strtoul (); +#endif + +/* Prototypes for helper functions. */ +extern FILE *open_po_file PARAMS ((const char *__input_name, + char **__file_name)); + +/* Wrapper functions with error checking for standard functions. */ +extern char *xgetcwd PARAMS ((void)); +extern void *xmalloc PARAMS ((size_t __n)); +extern void *xrealloc PARAMS ((void *__p, size_t __n)); +extern char *xstrdup PARAMS ((const char *__string)); +extern char *stpcpy PARAMS ((char *__dst, const char *__src)); +extern char *stpncpy PARAMS ((char *__dst, const char *__src, size_t __n)); +extern size_t parse_printf_format PARAMS ((const char *__fmt, size_t __n, + int *__argtypes)); +extern int asprintf PARAMS ((char **, const char *, ...)); +extern int strcasecmp PARAMS ((const char *__s1, const char *__s2)); +extern int strncasecmp PARAMS ((const char *__s1, const char *__s2, + size_t __n)); +extern char *strstr PARAMS ((const char *__str, const char *__sub)); + +#if STDC_HEADERS || HAVE_STRING_H +# include <string.h> +# if !STDC_HEADERS && HAVE_MEMORY_H +# include <memory.h> +# endif +#else +# include <strings.h> +#endif +#if !HAVE_MEMCPY +# ifndef memcpy +# define memcpy(D, S, N) bcopy ((S), (D), (N)) +# endif +#endif +#if !HAVE_STRCHR +# ifndef strchr +# define strchr index +# endif +#endif + +#ifdef __GNUC__ +# ifndef alloca +# define alloca __builtin_alloca +# endif +#else +# if HAVE_ALLOCA_H +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifdef __hpux /* This section must match that of bison generated files. */ +# ifdef __cplusplus +extern "C" void *alloca (unsigned int); +# else /* not __cplusplus */ +void *alloca (); +# endif /* not __cplusplus */ +# else /* not __hpux */ +# ifndef alloca +char *alloca (); +# endif +# endif /* __hpux */ +# endif +# endif +#endif + +/* Before we define the following symbols we get the <limits.h> file if + available since otherwise we get redefinitions on some systems. */ +#if HAVE_LIMITS_H +# include <limits.h> +#endif + +#ifndef MAX +# if __STDC__ && defined __GNUC__ && __GNUC__ >= 2 +# define MAX(a,b) (__extension__ \ + ({__typeof__ (a) _a = (a); \ + __typeof__ (b) _b = (b); \ + _a > _b ? _a : _b; \ + })) +# else +# define MAX(a,b) ((a) > (b) ? (a) : (b)) +# endif +#endif + +/* Some systems do not define EXIT_*, even with STDC_HEADERS. */ +#ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +#endif +#ifndef EXIT_FAILURE +# define EXIT_FAILURE 1 +#endif + + +/* When not using the GNU libc we use the basename implementation we + provide here. */ +#ifndef __GNU_LIBRARY__ +extern char *gnu_basename PARAMS ((const char *)); +# define basename(Arg) gnu_basename (Arg) +#endif + +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/vasprintf.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/vasprintf.c new file mode 100644 index 00000000..d06f2a55 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/vasprintf.c @@ -0,0 +1,193 @@ +/* Like vsprintf but provides a pointer to malloc'd storage, which must + be freed by the caller. + Copyright (C) 1994 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdio.h> +#include <string.h> + +#if __STDC__ +# include <stdarg.h> +#else +# include <varargs.h> +#endif + +#ifdef TEST +int global_total_width; +#endif + +unsigned long strtoul (); +char *malloc (); + +static int +int_vasprintf (result, format, args) + char **result; + const char *format; + va_list *args; +{ + const char *p = format; + /* Add one to make sure that it is never zero, which might cause malloc + to return NULL. */ + int total_width = strlen (format) + 1; + va_list ap; + + memcpy (&ap, args, sizeof (va_list)); + + while (*p != '\0') + { + if (*p++ == '%') + { + while (strchr ("-+ #0", *p)) + ++p; + if (*p == '*') + { + ++p; + total_width += abs (va_arg (ap, int)); + } + else + total_width += strtoul (p, &p, 10); + if (*p == '.') + { + ++p; + if (*p == '*') + { + ++p; + total_width += abs (va_arg (ap, int)); + } + else + total_width += strtoul (p, &p, 10); + } + while (strchr ("hlL", *p)) + ++p; + /* Should be big enough for any format specifier except %s. */ + total_width += 30; + switch (*p) + { + case 'd': + case 'i': + case 'o': + case 'u': + case 'x': + case 'X': + case 'c': + (void) va_arg (ap, int); + break; + case 'f': + case 'e': + case 'E': + case 'g': + case 'G': + (void) va_arg (ap, double); + break; + case 's': + total_width += strlen (va_arg (ap, char *)); + break; + case 'p': + case 'n': + (void) va_arg (ap, char *); + break; + } + } + } +#ifdef TEST + global_total_width = total_width; +#endif + *result = malloc (total_width); + if (*result != NULL) + return vsprintf (*result, format, *args); + else + return 0; +} + +int +vasprintf (result, format, args) + char **result; + const char *format; + va_list args; +{ + return int_vasprintf (result, format, &args); +} + +int +asprintf +#if __STDC__ + (char **result, const char *format, ...) +#else + (result, va_alist) + char **result; + va_dcl +#endif +{ + va_list args; + int done; + +#if __STDC__ + va_start (args, format); +#else + char *format; + va_start (args); + format = va_arg (args, char *); +#endif + done = vasprintf (result, format, args); + va_end (args); + + return done; +} + +#ifdef TEST +void +checkit +#if __STDC__ + (const char* format, ...) +#else + (va_alist) + va_dcl +#endif +{ + va_list args; + char *result; + +#if __STDC__ + va_start (args, format); +#else + char *format; + va_start (args); + format = va_arg (args, char *); +#endif + vasprintf (&result, format, args); + if (strlen (result) < global_total_width) + printf ("PASS: "); + else + printf ("FAIL: "); + printf ("%d %s\n", global_total_width, result); +} + +int +main () +{ + checkit ("%d", 0x12345678); + checkit ("%200d", 5); + checkit ("%.300d", 6); + checkit ("%100.150d", 7); + checkit ("%s", "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\ +777777777777777777333333333333366666666666622222222222777777777777733333"); + checkit ("%f%s%d%s", 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx"); +} +#endif /* TEST */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/xgetcwd.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/xgetcwd.c new file mode 100644 index 00000000..7ab22046 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/xgetcwd.c @@ -0,0 +1,79 @@ +/* xgetcwd.c -- return current directory with unlimited length + Copyright (C) 1992, 1996 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +/* Written by David MacKenzie <[email protected]>. */ + +#if HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdio.h> +#include <errno.h> +#ifndef errno +extern int errno; +#endif + +#include <sys/types.h> +#include "pathmax.h" + +#if HAVE_GETCWD +char *getcwd (); +#else +char *getwd (); +# define getcwd(Buf, Max) getwd (Buf) +#endif + +/* Amount to increase buffer size by in each try. */ +#define PATH_INCR 32 + +char *xmalloc (); +char *xrealloc (); +void free (); + +/* Return the current directory, newly allocated, arbitrarily long. + Return NULL and set errno on error. */ + +char * +xgetcwd () +{ + char *cwd; + char *ret; + unsigned path_max; + + errno = 0; + path_max = (unsigned) PATH_MAX; + path_max += 2; /* The getcwd docs say to do this. */ + + cwd = xmalloc (path_max); + + errno = 0; + while ((ret = getcwd (cwd, path_max)) == NULL && errno == ERANGE) + { + path_max += PATH_INCR; + cwd = xrealloc (cwd, path_max); + errno = 0; + } + + if (ret == NULL) + { + int save_errno = errno; + free (cwd); + errno = save_errno; + return NULL; + } + return cwd; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/xmalloc.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/xmalloc.c new file mode 100644 index 00000000..8217c992 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/xmalloc.c @@ -0,0 +1,129 @@ +/* xmalloc.c -- malloc with out of memory checking + Copyright (C) 1990, 91, 92, 93, 94, 95, 96 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +#if HAVE_CONFIG_H +# include <config.h> +#endif + +#if __STDC__ +# define VOID void +#else +# define VOID char +#endif + +#include <sys/types.h> + +#if STDC_HEADERS +# include <stdlib.h> +#else +VOID *calloc (); +VOID *malloc (); +VOID *realloc (); +void free (); +#endif + +#if ENABLE_NLS +# include <libintl.h> +# define _(Text) gettext (Text) +#else +# define textdomain(Domain) +# define _(Text) Text +#endif + +#include "error.h" + +#ifndef EXIT_FAILURE +# define EXIT_FAILURE 1 +#endif + +/* Prototypes for functions defined here. */ +#if defined (__STDC__) && __STDC__ +static VOID *fixup_null_alloc (size_t n); +VOID *xmalloc (size_t n); +VOID *xcalloc (size_t n, size_t s); +VOID *xrealloc (VOID *p, size_t n); +#endif + + +/* Exit value when the requested amount of memory is not available. + The caller may set it to some other value. */ +int xmalloc_exit_failure = EXIT_FAILURE; + +#if __STDC__ && (HAVE_VPRINTF || HAVE_DOPRNT) +void error (int, int, const char *, ...); +#else +void error (); +#endif + +static VOID * +fixup_null_alloc (n) + size_t n; +{ + VOID *p; + + p = 0; + if (n == 0) + p = malloc ((size_t) 1); + if (p == 0) + error (xmalloc_exit_failure, 0, _("Memory exhausted")); + return p; +} + +/* Allocate N bytes of memory dynamically, with error checking. */ + +VOID * +xmalloc (n) + size_t n; +{ + VOID *p; + + p = malloc (n); + if (p == 0) + p = fixup_null_alloc (n); + return p; +} + +/* Allocate memory for N elements of S bytes, with error checking. */ + +VOID * +xcalloc (n, s) + size_t n, s; +{ + VOID *p; + + p = calloc (n, s); + if (p == 0) + p = fixup_null_alloc (n); + return p; +} + +/* Change the size of an allocated block of memory P to N bytes, + with error checking. + If P is NULL, run xmalloc. */ + +VOID * +xrealloc (p, n) + VOID *p; + size_t n; +{ + if (p == 0) + return xmalloc (n); + p = realloc (p, n); + if (p == 0) + p = fixup_null_alloc (n); + return p; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/lib/xstrdup.c b/debian/gettext-kde/gettext-kde-0.10.35/lib/xstrdup.c new file mode 100644 index 00000000..46877964 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/lib/xstrdup.c @@ -0,0 +1,44 @@ +/* xstrdup.c -- copy a string with out of memory checking + Copyright (C) 1990, 1996, 1997 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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. */ + +#if HAVE_CONFIG_H +# include <config.h> +#endif + +#include <sys/types.h> + +#if defined(STDC_HEADERS) || defined(HAVE_STRING_H) +# include <string.h> +#else +# include <strings.h> +#endif + +#if defined (__STDC__) && __STDC__ +char *xmalloc (size_t n); +char *xstrdup (char *string); +#else +char *xmalloc (); +#endif + +/* Return a newly allocated copy of STRING. */ + +char * +xstrdup (string) + char *string; +{ + return strcpy (xmalloc (strlen (string) + 1), string); +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/ltconfig b/debian/gettext-kde/gettext-kde-0.10.35/ltconfig new file mode 100755 index 00000000..2347e694 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/ltconfig @@ -0,0 +1,1512 @@ +#! /bin/sh + +# ltconfig - Create a system-specific libtool. +# Copyright (C) 1996-1998 Free Software Foundation, Inc. +# Gordon Matzigkeit <[email protected]>, 1996 +# +# This file 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A lot of this script is taken from autoconf-2.10. + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi + +echo=echo +if test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then : +else + # The Solaris and AIX default echo program unquotes backslashes. + # This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # So, we emulate echo with printf '%s\n' + echo="printf %s\\n" + if test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then : + else + # Oops. We have no working printf. Try to find a not-so-buggy echo. + echo=echo + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" + for dir in $PATH /usr/ucb; do + if test -f $dir/echo && test "X`$dir/echo '\t'`" = 'X\t'; then + echo="$dir/echo" + break + fi + done + IFS="$save_ifs" + fi +fi + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' + +# The name of this program. +progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'` + +# Constants: +PROGRAM=ltconfig +PACKAGE=libtool +VERSION=1.2 +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.c $LIBS 1>&5' +rm="rm -f" + +help="Try \`$progname --help' for more information." + +# Global variables: +can_build_shared=yes +enable_shared=yes +# All known linkers require a `.a' archive for static linking. +enable_static=yes +ltmain= +silent= +srcdir= +ac_config_guess= +ac_config_sub= +host= +nonopt= +verify_host=yes +with_gcc=no +with_gnu_ld=no + +old_AR="$AR" +old_CC="$CC" +old_CFLAGS="$CFLAGS" +old_CPPFLAGS="$CPPFLAGS" +old_LD="$LD" +old_LN_S="$LN_S" +old_NM="$NM" +old_RANLIB="$RANLIB" + +# Parse the command line options. +args= +prev= +for option +do + case "$option" in + -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + eval "$prev=\$option" + prev= + continue + fi + + case "$option" in + --help) cat <<EOM +Usage: $progname [OPTION]... LTMAIN [HOST] + +Generate a system-specific libtool script. + + --disable-shared do not build shared libraries + --disable-static do not build static libraries + --help display this help and exit + --no-verify do not verify that HOST is a valid host type + --quiet same as \`--silent' + --silent do not print informational messages + --srcdir=DIR find \`config.guess' in DIR + --version output version information and exit + --with-gcc assume that the GNU C compiler will be used + --with-gnu-ld assume that the C compiler uses the GNU linker + +LTMAIN is the \`ltmain.sh' shell script fragment that provides basic libtool +functionality. + +HOST is the canonical host system name [default=guessed]. +EOM + exit 0 + ;; + + --disable-shared) enable_shared=no ;; + + --disable-static) enable_static=no ;; + + --quiet | --silent) silent=yes ;; + + --srcdir) prev=srcdir ;; + --srcdir=*) srcdir="$optarg" ;; + + --no-verify) verify_host=no ;; + + --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION"; exit 0 ;; + + --with-gcc) with_gcc=yes ;; + --with-gnu-ld) with_gnu_ld=yes ;; + + -*) + echo "$progname: unrecognized option \`$option'" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + + *) + if test -z "$ltmain"; then + ltmain="$option" + elif test -z "$host"; then +# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1 +# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then +# echo "$progname: warning \`$option' is not a valid host type" 1>&2 +# fi + host="$option" + else + echo "$progname: too many arguments" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac +done + +if test -z "$ltmain"; then + echo "$progname: you must specify a LTMAIN file" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + +if test -f "$ltmain"; then : +else + echo "$progname: \`$ltmain' does not exist" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + +# Quote any args containing shell metacharacters. +ltconfig_args= +for arg +do + case "$arg" in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ltconfig_args="$ltconfig_args '$arg'" ;; + *) ltconfig_args="$ltconfig_args $arg" ;; + esac +done + +# A relevant subset of AC_INIT. + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 5 compiler messages saved in config.log +# 6 checking for... messages and results +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>>./config.log + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LANG+set}" = set; then LANG=C; export LANG; fi + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says [email protected]. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + +if test -z "$srcdir"; then + # Assume the source directory is the same one as the path to ltmain.sh. + srcdir=`$echo "$ltmain" | $Xsed -e 's%/[^/]*$%%'` + test "$srcdir" = "$ltmain" && srcdir=. +fi + +trap "$rm conftest*; exit 1" 1 2 15 +if test "$verify_host" = yes; then + # Check for config.guess and config.sub. + ac_aux_dir= + for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/config.guess; then + ac_aux_dir=$ac_dir + break + fi + done + if test -z "$ac_aux_dir"; then + echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2 + echo "$help" 1>&2 + exit 1 + fi + ac_config_guess=$ac_aux_dir/config.guess + ac_config_sub=$ac_aux_dir/config.sub + + # Make sure we can run config.sub. + if $ac_config_sub sun4 >/dev/null 2>&1; then : + else + echo "$progname: cannot run $ac_config_sub" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + echo $ac_n "checking host system type""... $ac_c" 1>&6 + + host_alias=$host + case "$host_alias" in + "") + if host_alias=`$ac_config_guess`; then : + else + echo "$progname: cannot guess host type; you must specify one" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac + host=`$ac_config_sub $host_alias` + echo "$ac_t$host" 1>&6 + + # Make sure the host verified. + test -z "$host" && exit 1 + +elif test -z "$host"; then + echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2 + echo "$help" 1>&2 + exit 1 +else + host_alias=$host +fi + +# Transform linux* to *-*-linux-gnu*, to support old configure scripts. +case "$host_os" in +linux-gnu*) ;; +linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` +esac + +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +case "$host_os" in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "${COLLECT_NAMES+set}" != set; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR cru $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +# Set a sane default for `AR'. +test -z "$AR" && AR=ar + +# If RANLIB is not set, then run the test. +if test "${RANLIB+set}" != "set"; then + result=no + + echo $ac_n "checking for ranlib... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/ranlib; then + RANLIB="ranlib" + result="ranlib" + break + fi + done + IFS="$save_ifs" + + echo "$ac_t$result" 1>&6 +fi + +if test -n "$RANLIB"; then + old_archive_cmds="$old_archive_cmds;\$RANLIB \$oldlib" + old_postinstall_cmds="\$RANLIB \$oldlib;$old_postinstall_cmds" +fi + +# Check to see if we are using GCC. +if test "$with_gcc" != yes || test -z "$CC"; then + # If CC is not set, then try to find GCC or a usable CC. + if test -z "$CC"; then + echo $ac_n "checking for gcc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" + for dir in $PATH; do + IFS="$save_ifs" + test -z "$dir" && dir=. + if test -f $dir/gcc; then + CC="gcc" + break + fi + done + IFS="$save_ifs" + + if test -n "$CC"; then + echo "$ac_t$CC" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + fi + + # Not "gcc", so try "cc", rejecting "/usr/ucb/cc". + if test -z "$CC"; then + echo $ac_n "checking for cc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:" + cc_rejected=no + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/cc; then + if test "$dir/cc" = "/usr/ucb/cc"; then + cc_rejected=yes + continue + fi + CC="cc" + break + fi + done + IFS="$save_ifs" + if test $cc_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same name, so the bogon will be chosen + # first if we set CC to just the name; use the full file name. + shift + set dummy "$dir/cc" "$@" + shift + CC="$@" + fi + fi + + if test -n "$CC"; then + echo "$ac_t$CC" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + + if test -z "$CC"; then + echo "$progname: error: no acceptable cc found in \$PATH" 1>&2 + exit 1 + fi + fi + + # Now see if the compiler is really GCC. + with_gcc=no + echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6 + echo "$progname:424: checking whether we are using GNU C" >&5 + + $rm conftest.c + cat > conftest.c <<EOF +#ifdef __GNUC__ + yes; +#endif +EOF + if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:432: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + with_gcc=yes + fi + $rm conftest.c + echo "$ac_t$with_gcc" 1>&6 +fi + +# Allow CC to be a program name with arguments. +set dummy $CC +compiler="$2" + +echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6 +pic_flag= +special_shlib_compile_flags= +wl= +link_static_flag= +no_builtin_flag= + +if test "$with_gcc" = yes; then + wl='-Wl,' + link_static_flag='-static' + no_builtin_flag=' -fno-builtin' + + case "$host_os" in + aix3* | aix4* | irix5* | irix6* | osf3* | osf4*) + # PIC is the default for these OSes. + ;; + os2*) + # We can build DLLs from non-PIC. + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + pic_flag='-m68020 -resident32 -malways-restore-a4' + ;; + *) + pic_flag='-fPIC' + ;; + esac +else + # PORTME Check for PIC flags for the system compiler. + case "$host_os" in + aix3* | aix4*) + # All AIX code is PIC. + link_static_flag='-bnso -bI:/lib/syscalls.exp' + ;; + + hpux9* | hpux10*) + # Is there a better link_static_flag that works with the bundled CC? + wl='-Wl,' + link_static_flag="${wl}-a ${wl}archive" + pic_flag='+Z' + ;; + + irix5* | irix6*) + wl='-Wl,' + link_static_flag='-non_shared' + # PIC (with -KPIC) is the default. + ;; + + os2*) + # We can build DLLs from non-PIC. + ;; + + osf3* | osf4*) + # All OSF/1 code is PIC. + wl='-Wl,' + link_static_flag='-non_shared' + ;; + + sco3.2v5*) + pic_flag='-Kpic' + link_static_flag='-dn' + special_shlib_compile_flags='-belf' + ;; + + solaris2*) + pic_flag='-KPIC' + link_static_flag='-Bstatic' + wl='-Wl,' + ;; + + sunos4*) + pic_flag='-PIC' + link_static_flag='-Bstatic' + wl='-Qoption ld ' + ;; + + sysv4.2uw2*) + pic_flag='-KPIC' + link_static_flag='-Bstatic' + wl='-Wl,' + ;; + + uts4*) + pic_flag='-pic' + link_static_flag='-Bstatic' + ;; + + *) + can_build_shared=no + ;; + esac +fi + +if test -n "$pic_flag"; then + echo "$ac_t$pic_flag" 1>&6 + + # Check to make sure the pic_flag actually works. + echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6 + $rm conftest* + echo > conftest.c + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $pic_flag -DPIC" + echo "$progname:547: checking if $compiler PIC flag $pic_flag works" >&5 + if { (eval echo $progname:548: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then + # Append any warnings to the config.log. + cat conftest.err 1>&5 + + # On HP-UX, both CC and GCC only warn that PIC is supported... then they + # create non-PIC objects. So, if there were any warnings, we assume that + # PIC is not supported. + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + can_build_shared=no + pic_flag= + else + echo "$ac_t"yes 1>&6 + pic_flag=" $pic_flag" + fi + else + # Append any errors to the config.log. + cat conftest.err 1>&5 + can_build_shared=no + pic_flag= + echo "$ac_t"no 1>&6 + fi + CFLAGS="$save_CFLAGS" + $rm conftest* +else + echo "$ac_t"none 1>&6 +fi + +# Check for any special shared library compilation flags. +if test -n "$special_shlib_compile_flags"; then + echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2 + if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then : + else + echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2 + can_build_shared=no + fi +fi + +echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6 +$rm conftest* +echo 'main(){return(0);}' > conftest.c +save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS $link_static_flag" +echo "$progname:591: checking if $compiler static flag $link_static_flag works" >&5 +if { (eval echo $progname:592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + echo "$ac_t$link_static_flag" 1>&6 +else + echo "$ac_t"none 1>&6 + link_static_flag= +fi +LDFLAGS="$save_LDFLAGS" +$rm conftest* + +if test -z "$LN_S"; then + # Check to see if we can use ln -s, or we need hard links. + echo $ac_n "checking whether ln -s works... $ac_c" 1>&6 + $rm conftestdata + if ln -s X conftestdata 2>/dev/null; then + $rm conftestdata + LN_S="ln -s" + else + LN_S=ln + fi + if test "$LN_S" = "ln -s"; then + echo "$ac_t"yes 1>&6 + else + echo "$ac_t"no 1>&6 + fi +fi + +# Make sure LD is an absolute path. +if test -z "$LD"; then + ac_prog=ld + if test "$with_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6 + echo "$progname:624: checking for ld used by GCC" >&5 + ac_prog=`($CC -print-prog-name=ld) 2>&5` + case "$ac_prog" in + # Accept absolute paths. + /* | [A-Za-z]:\\*) + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we are not using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac + elif test "$with_gnu_ld" = yes; then + echo $ac_n "checking for GNU ld... $ac_c" 1>&6 + echo "$progname:642: checking for GNU ld" >&5 + else + echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 + echo "$progname:645: checking for non-GNU ld" >&5 + fi + + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog"; then + LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" + fi + + if test -n "$LD"; then + echo "$ac_t$LD" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + + if test -z "$LD"; then + echo "$progname: error: no acceptable ld found in \$PATH" 1>&2 + exit 1 + fi +fi + +# Check to see if it really is or is not GNU ld. +echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6 +# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then + with_gnu_ld=yes +else + with_gnu_ld=no +fi +echo "$ac_t$with_gnu_ld" 1>&6 + +# See if the linker supports building shared libraries. +echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6 + +allow_undefined_flag= +no_undefined_flag= +archive_cmds= +old_archive_from_new_cmds= +export_dynamic_flag_spec= +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no +hardcode_shlibpath_var=unsupported +runpath_var= + +case "$host_os" in +amigaos* | sunos4*) + # On these operating systems, we should treat GNU ld like the system ld. + gnu_ld_acts_native=yes + ;; +*) + gnu_ld_acts_native=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes && test "$gnu_ld_acts_native" != yes; then + + # See if GNU ld supports shared libraries. + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared ${wl}-soname $wl$soname -o $lib$libobjs' + runpath_var=LD_RUN_PATH + ld_shlibs=yes + else + ld_shlibs=no + fi + + if test "$ld_shlibs" = yes; then + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + fi +else + # PORTME fill in a description of your system's linker (not GNU ld) + case "$host_os" in + aix3*) + allow_undefined_flag=unsupported + archive_cmds='$NM$libobjs | $global_symbol_pipe | sed '\''s/.* //'\'' > $lib.exp;$LD -o $objdir/$soname$libobjs -bE:$lib.exp -T512 -H512 -bM:SRE;$AR cru $lib $objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$with_gcc" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4*) + allow_undefined_flag=unsupported + archive_cmds='$NM$libobjs | $global_symbol_pipe | sed '\''s/.* //'\'' > $lib.exp;$CC -o $objdir/$soname$libobjs ${wl}-bE:$lib.exp ${wl}-bM:SRE ${wl}-bnoentry;$AR cru $lib $objdir/$soname' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + + amigaos*) + archive_cmds='$rm $objdir/a2ixlibrary.data;$echo "#define NAME $libname" > $objdir/a2ixlibrary.data;$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data;$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data;$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data;$AR cru $lib$libobjs;$RANLIB $lib;(cd $objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib$libobjs /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib$libobjs' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3, at last, uses gcc -shared to do shared libraries. + freebsd3*) + archive_cmds='$CC -shared -o $lib$libobjs' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + archive_cmds='$rm $objdir/$soname;$LD -b +s +b $install_libdir -o $objdir/$soname$libobjs;mv $objdir/$soname $lib' + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + archive_cmds='$LD -b +h $soname +s +b $install_libdir -o $lib$libobjs' + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + irix5* | irix6*) + archive_cmds='$LD -shared -o $lib -soname $soname -set_version $verstring$libobjs' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + ;; + + netbsd*) + # Tested with NetBSD 1.2 ld + archive_cmds='$LD -Bshareable -o $lib$libobjs' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + openbsd*) + archive_cmds='$LD -Bshareable -o $lib$libobjs' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def;$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def;$echo DATA >> $objdir/$libname.def;$echo " SINGLE NONSHARED" >> $objdir/$libname.def;$echo EXPORTS >> $objdir/$libname.def;emxexp$libobjs >> $objdir/$libname.def;$CC -Zdll -Zcrtdll -o $lib$libobjs $objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def' + ;; + + osf3* | osf4*) + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} -o $lib -soname $soname -set_version $verstring$libobjs$deplibs' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + sco3.2v5*) + archive_cmds='$LD -G -o $lib$libobjs' + hardcode_direct=yes + ;; + + solaris2*) + no_undefined_flag=' -z text' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib$libobjs' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + + # Solaris 2 before 2.5 hardcodes -L paths. + case "$host_os" in + solaris2.[0-4]*) + hardcode_minus_L=yes + ;; + esac + ;; + + sunos4*) + if test "$with_gcc" = yes; then + archive_cmds='$CC -shared -o $lib$libobjs' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib$libobjs' + fi + + if test "$with_gnu_ld" = yes; then + export_dynamic_flag_spec='${wl}-export-dynamic' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib$libobjs' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=no + hardcode_minus_L=no + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + can_build_shared=no + ;; + esac +fi +echo "$ac_t$ld_shlibs" 1>&6 + +if test -z "$NM"; then + echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6 + case "$NM" in + /* | [A-Za-z]:\\*) ;; # Let the user override the test with a path. + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + NM="$ac_dir/nm -B" + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + NM="$ac_dir/nm -p" + else + NM="$ac_dir/nm" + fi + break + fi + done + IFS="$ac_save_ifs" + test -z "$NM" && NM=nm + ;; + esac + echo "$ac_t$NM" 1>&6 +fi + +# Check for command to grab the raw symbol name followed by C symbol from nm. +echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6 + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRSTU]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \1' + +# Define system-specific variables. +case "$host_os" in +aix*) + symcode='[BCDTU]' + ;; +irix*) + # Cannot use undefined symbols on IRIX because inlined functions mess us up. + symcode='[BCDEGRST]' + ;; +solaris2*) + symcode='[BDTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then + symcode='[ABCDGISTUW]' +fi + +# Write the raw and C identifiers. +global_symbol_pipe="sed -n -e 's/^.* $symcode $sympat$/$symxfrm/p'" + +# Check to see that the pipe works correctly. +pipe_works=no +$rm conftest* +cat > conftest.c <<EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(){} +#ifdef __cplusplus +} +#endif +main(){nm_test_var='a';nm_test_func();return(0);} +EOF + +echo "$progname:971: checking if global_symbol_pipe works" >&5 +if { (eval echo $progname:972: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.o; then + # Now try to grab the symbols. + nlist=conftest.nm + if { echo "$progname:975: eval \"$NM conftest.o | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.o | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then + + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + wcout=`wc "$nlist" 2>/dev/null` + count=`$echo "X$wcout" | $Xsed -e 's/^[ ]*\([0-9][0-9]*\).*$/\1/'` + (test "$count" -ge 0) 2>/dev/null || count=-1 + else + rm -f "$nlist"T + count=-1 + fi + + # Make sure that we snagged all the symbols we need. + if egrep ' nm_test_var$' "$nlist" >/dev/null; then + if egrep ' nm_test_func$' "$nlist" >/dev/null; then + cat <<EOF > conftest.c +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + sed 's/^.* \(.*\)$/extern char \1;/' < "$nlist" >> conftest.c + + cat <<EOF >> conftest.c +#if defined (__STDC__) && __STDC__ +# define __ptr_t void * +#else +# define __ptr_t char * +#endif + +/* The number of symbols in dld_preloaded_symbols, -1 if unsorted. */ +int dld_preloaded_symbol_count = $count; + +/* The mapping between symbol names and symbols. */ +struct { + char *name; + __ptr_t address; +} +dld_preloaded_symbols[] = +{ +EOF + sed 's/^\(.*\) \(.*\)$/ {"\1", (__ptr_t) \&\2},/' < "$nlist" >> conftest.c + cat <<\EOF >> conftest.c + {0, (__ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.o conftestm.o + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS='conftestm.o' + CFLAGS="$CFLAGS$no_builtin_flag" + if { (eval echo $progname:1033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + pipe_works=yes + else + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 + fi + LIBS="$save_LIBS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $global_symbol_pipe" >&5 + fi +else + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 +fi +$rm conftest* + +# Do not use the global_symbol_pipe unless it works. +echo "$ac_t$pipe_works" 1>&6 +test "$pipe_works" = yes || global_symbol_pipe= + +# Check hardcoding attributes. +echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var"; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && \ + test "$hardcode_minus_L" != no && \ + test "$hardcode_shlibpath_var" != no; then + + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +elif test "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" != yes; then + # We cannot hardcode anything. + hardcode_action=unsupported +else + # We can only hardcode existing directories. + hardcode_action=relink +fi +echo "$ac_t$hardcode_action" 1>&6 +test "$hardcode_action" = unsupported && can_build_shared=no + + +reload_flag= +reload_cmds='$LD$reload_flag -o $output$reload_objs' +echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6 +# PORTME Some linker may need a different reload flag. +reload_flag='-r' +echo "$ac_t$reload_flag" +test -n "$reload_flag" && reload_flag=" $reload_flag" + +# PORTME Fill in your ld.so characteristics +library_names_spec= +libname_spec='lib$name' +soname_spec= +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +version_type=none +dynamic_linker="$host_os ld.so" + +echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6 +case "$host_os" in +aix3* | aix4*) + version_type=linux + library_names_spec='${libname}${release}.so.$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}.so.$major' + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' + ;; + +freebsd2* | freebsd3*) + version_type=sunos + library_names_spec='${libname}${release}.so.$versuffix $libname.so' + finish_cmds='PATH="$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +gnu*) + version_type=sunos + library_names_spec='${libname}${release}.so.$versuffix' + shlibpath_var=LD_LIBRARY_PATH + ;; + +hpux9* | hpux10*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + dynamic_linker="$host_os dld.sl" + version_type=sunos + shlibpath_var=SHLIB_PATH + library_names_spec='${libname}${release}.sl.$versuffix ${libname}${release}.sl.$major $libname.sl' + soname_spec='${libname}${release}.sl.$major' + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6*) + version_type=osf + soname_spec='${libname}${release}.so' + library_names_spec='${libname}${release}.so.$versuffix $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux-gnu*) + version_type=linux + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' + soname_spec='${libname}${release}.so.$major' + finish_cmds='PATH="$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + + if test -f /lib/ld.so.1; then + dynamic_linker='GNU ld.so' + else + # Only the GNU ld.so supports shared libraries on MkLinux. + case "$host_cpu" in + powerpc*) dynamic_linker=no ;; + *) dynamic_linker='Linux ld.so' ;; + esac + fi + ;; + +netbsd* | openbsd*) + version_type=sunos + library_names_spec='${libname}${release}.so.$versuffix' + finish_cmds='PATH="$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +os2*) + libname_spec='$name' + library_names_spec='$libname.dll $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4*) + version_type=osf + soname_spec='${libname}${release}.so' + library_names_spec='${libname}${release}.so.$versuffix $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}.so.$major' + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris2*) + version_type=linux + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' + soname_spec='${libname}${release}.so.$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}.so.$versuffix' + finish_cmds='PATH="$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sysv4.2uw2*) + version_type=linux + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' + soname_spec='${libname}${release}.so.$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major $libname.so' + soname_spec='${libname}${release}.so.$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$ac_t$dynamic_linker" +test "$dynamic_linker" = no && can_build_shared=no + +# Report the final consequences. +echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6 + +echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds;\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; +esac + +echo "$ac_t$enable_shared" 1>&6 + +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes + +echo "checking whether to build static libraries... $enable_static" 1>&6 + +echo $ac_n "checking for objdir... $ac_c" 1>&6 +rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + objdir=_libs +fi +rmdir .libs 2>/dev/null +echo "$ac_t$objdir" 1>&6 + +# Copy echo and quote the copy, instead of the original, because it is +# used later. +ltecho="$echo" + +# Now quote all the things that may contain metacharacters. +for var in ltecho old_CC old_CFLAGS old_CPPFLAGS old_LD old_NM old_RANLIB \ + old_LN_S AR CC LD LN_S NM reload_flag reload_cmds wl pic_flag \ + link_static_flag no_builtin_flag export_dynamic_flag_spec \ + libname_spec library_names_spec soname_spec RANLIB \ + old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ + old_postuninstall_cmds archive_cmds postinstall_cmds postuninstall_cmds \ + allow_undefined_flag no_undefined_flag \ + finish_cmds finish_eval global_symbol_pipe \ + hardcode_libdir_flag_spec hardcode_libdir_separator; do + + case "$var" in + reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | archive_cmds | \ + postinstall_cmds | postuninstall_cmds | finish_cmds) + # Double-quote double-evaled strings. + eval "$var=\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\"\`" + ;; + *) + eval "$var=\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`" + ;; + esac +done + +ofile=libtool +trap "$rm $ofile; exit 1" 1 2 15 +echo creating $ofile +$rm $ofile +cat <<EOF > $ofile +#! /bin/sh + +# libtool - Provide generalized library-building support services. +# Generated automatically by $PROGRAM - GNU $PACKAGE $VERSION +# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh. +# +# Copyright (C) 1996-1998 Free Software Foundation, Inc. +# Gordon Matzigkeit <[email protected]>, 1996 +# +# 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This program was configured as follows, +# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# +# CC="$old_CC" CFLAGS="$old_CFLAGS" CPPFLAGS="$old_CPPFLAGS" \\ +# LD="$old_LD" NM="$old_NM" RANLIB="$old_RANLIB" LN_S="$old_LN_S" \\ +# $0$ltconfig_args +# +# Compiler and other test output produced by $progname, useful for +# debugging $progname, is in ./config.log if it exists. + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="sed -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "\${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi + +# An echo program that does not interpret backslashes. +echo="$ltecho" + +# The version of $progname that generated this script. +LTCONFIG_VERSION="$VERSION" + +# Shell to use when invoking shell scripts. +SHELL=${CONFIG_SHELL-/bin/sh} + +# Whether or not to build libtool libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build old-style libraries. +build_old_libs=$enable_static + +# The host system. +host_alias="$host_alias" +host="$host" + +# The archiver. +AR="$AR" + +# The default C compiler. +CC="$CC" + +# The linker used to build libraries. +LD="$LD" + +# Whether we need hard or soft links. +LN_S="$LN_S" + +# A BSD-compatible nm program. +NM="$NM" + +# The name of the directory that contains temporary libtool files. +objdir="$objdir" + +# How to create reloadable object files. +reload_flag="$reload_flag" +reload_cmds="$reload_cmds" + +# How to pass a linker flag through the compiler. +wl="$wl" + +# Additional compiler flags for building library objects. +pic_flag="$pic_flag" + +# Compiler flag to prevent dynamic linking. +link_static_flag="$link_static_flag" + +# Compiler flag to turn off builtin functions. +no_builtin_flag="$no_builtin_flag" + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="$export_dynamic_flag_spec" + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec="$libname_spec" + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec="$library_names_spec" + +# The coded name of the library, if different from the real name. +soname_spec="$soname_spec" + +# Commands used to build and install an old-style archive. +RANLIB="$RANLIB" +old_archive_cmds="$old_archive_cmds" +old_postinstall_cmds="$old_postinstall_cmds" +old_postuninstall_cmds="$old_postuninstall_cmds" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="$old_archive_from_new_cmds" + +# Commands used to build and install a shared archive. +archive_cmds="$archive_cmds" +postinstall_cmds="$postinstall_cmds" +postuninstall_cmds="$postuninstall_cmds" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="$allow_undefined_flag" + +# Flag that forces no undefined symbols. +no_undefined_flag="$no_undefined_flag" + +# Commands used to finish a libtool library installation in a directory. +finish_cmds="$finish_cmds" + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval="$finish_eval" + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe="$global_symbol_pipe" + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec="$hardcode_libdir_flag_spec" + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator="$hardcode_libdir_separator" + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +EOF + +case "$host_os" in +aix3*) + cat <<\EOF >> $ofile +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "${COLLECT_NAMES+set}" != set; then + COLLECT_NAMES= + export COLLECT_NAMES +fi + +EOF + ;; +esac + +# Append the ltmain.sh script. +cat "$ltmain" >> $ofile || (rm -f $ofile; exit 1) + +chmod +x $ofile +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/ltmain.sh b/debian/gettext-kde/gettext-kde-0.10.35/ltmain.sh new file mode 100644 index 00000000..e9350b3f --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/ltmain.sh @@ -0,0 +1,2453 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun ltconfig. +# +# Copyright (C) 1996-1998 Free Software Foundation, Inc. +# Gordon Matzigkeit <[email protected]>, 1996 +# +# 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# The name of this program. +progname=`$echo "$0" | sed 's%^.*/%%'` +modename="$progname" + +# Constants. +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=1.2 + +default_mode= +help="Try \`$progname --help' for more information." +magic="%%%MAGIC variable%%%" +mkdir="mkdir" +mv="mv -f" +rm="rm -f" + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LANG+set}" = set; then LANG=C; export LANG; fi + +if test "$LTCONFIG_VERSION" != "$VERSION"; then + echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + echo "$modename: not configured to build any kind of library" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= + +# Parse our command line options once, thoroughly. +while test $# -gt 0 +do + arg="$1" + shift + + case "$arg" in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case "$prev" in + execute_dlfiles) + eval "$prev=\"\$$prev \$arg\"" + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case "$arg" in + --help) + show_help=yes + ;; + + --version) + echo "$PROGRAM (GNU $PACKAGE) $VERSION" + exit 0 + ;; + + --dry-run | -n) + run=: + ;; + + --features) + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + exit 0 + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --quiet | --silent) + show=: + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 +fi + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + case "$nonopt" in + *cc | *++ | gcc* | *-gcc*) + mode=link + for arg + do + case "$arg" in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case "$mode" in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + lastarg= + srcfile="$nonopt" + suppress_output= + + for arg + do + # Accept any command-line options. + case "$arg" in + -o) + $echo "$modename: you cannot specify the output filename with \`-o'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + esac + + # Accept the current argument as the source file. + lastarg="$srcfile" + srcfile="$arg" + + # Aesthetically quote the previous argument. + + # Backslashify any backslashes, double quotes, and dollar signs. + # These are the only characters that are still specially + # interpreted inside of double-quoted scrings. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly in scan + # sets, so we specify it separately. + case "$lastarg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + lastarg="\"$lastarg\"" + ;; + esac + + # Add the previous argument to base_compile. + if test -z "$base_compile"; then + base_compile="$lastarg" + else + base_compile="$base_compile $lastarg" + fi + done + + # Get the name of the library object. + libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + + # Recognize several different file suffixes. + xform='[cCFSfms]' + case "$libobj" in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case "$libobj" in + *.lo) obj=`$echo "X$libobj" | $Xsed -e 's/\.lo$/.o/'` ;; + *) + $echo "$modename: cannot determine name of library object from \`$srcfile'" 1>&2 + exit 1 + ;; + esac + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + $run $rm $obj $libobj + trap "$run $rm $obj $libobj; exit 1" 1 2 15 + else + $run $rm $libobj + trap "$run $rm $libobj; exit 1" 1 2 15 + fi + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + # All platforms use -DPIC, to notify preprocessed assembler code. + $show "$base_compile$pic_flag -DPIC $srcfile" + if $run eval "$base_compile\$pic_flag -DPIC \$srcfile"; then : + else + test -n "$obj" && $run $rm $obj + exit 1 + fi + + # If we have no pic_flag, then copy the object into place and finish. + if test -z "$pic_flag"; then + $show "$LN_S $obj $libobj" + $run $LN_S $obj $libobj + exit $? + fi + + # Just move the object, then go on to compile the next one + $show "$mv $obj $libobj" + $run $mv $obj $libobj || exit 1 + + # Allow error messages only from the first compilation. + suppress_output=' >/dev/null 2>&1' + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + # Suppress compiler output if we already did a PIC compilation. + $show "$base_compile $srcfile$suppress_output" + if $run eval "$base_compile \$srcfile$suppress_output"; then : + else + $run $rm $obj $libobj + exit 1 + fi + fi + + # Create an invalid libtool object if no PIC, so that we do not + # accidentally link it into a program. + if test "$build_libtool_libs" != yes; then + $show "echo timestamp > $libobj" + $run eval "echo timestamp > \$libobj" || exit $? + fi + + exit 0 + ;; + + # libtool link mode + link) + modename="$modename: link" + CC="$nonopt" + allow_undefined=yes + compile_command="$CC" + finalize_command="$CC" + + compile_shlibpath= + finalize_shlibpath= + deplibs= + dlfiles= + dlprefiles= + export_dynamic=no + hardcode_libdirs= + libobjs= + link_against_libtool_libs= + ltlibs= + objs= + prev= + prevarg= + release= + rpath= + perm_rpath= + temp_rpath= + vinfo= + + # We need to know -static, to get the right output filenames. + for arg + do + case "$arg" in + -all-static | -static) + if test "X$arg" = "X-all-static" && test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 + fi + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + for arg + do + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case "$prev" in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case "$prev" in + dlfiles|dlprefiles) + case "$arg" in + *.la | *.lo) ;; # We handle these cases below. + *) + dlprefiles="$dlprefiles $arg" + test "$prev" = dlfiles && dlfiles="$dlfiles $arg" + prev= + ;; + esac + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath) + rpath="$rpath $arg" + prev= + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi + + prevarg="$arg" + + case "$arg" in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + if test "$export_dynamic" != yes; then + export_dynamic=yes + if test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + else + arg= + fi + + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + fi + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's%^-L\(.*\)$%\1%'` + case "$dir" in + /* | [A-Za-z]:\\*) + # Add the corresponding hardcode_libdir_flag, if it is not identical. + ;; + *) + $echo "$modename: \`-L$dir' cannot specify a relative directory" 1>&2 + exit 1 + ;; + esac + deplibs="$deplibs $arg" + ;; + + -l*) deplibs="$deplibs $arg" ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -o) prev=output ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -static) + # If we have no pic_flag, then this is the same as -all-static. + if test -z "$pic_flag" && test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + ;; + + *.o | *.a) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A library object. + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + if test "$build_libtool_libs" = yes; then + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e 's/\.lo$/\.o/'` + prev= + fi + libobjs="$libobjs $arg" + ;; + + *.la) + # A libtool-controlled library. + + dlname= + libdir= + library_names= + old_library= + + # Check to see that this really is a libtool archive. + if (sed -e '2q' $arg | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then : + else + $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2 + exit 1 + fi + + # If there is no directory component, then add one. + case "$arg" in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$libdir"; then + $echo "$modename: \`$arg' contains no -rpath information" 1>&2 + exit 1 + fi + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$arg'" 1>&2 + exit 1 + fi + + # Find the relevant object directory and library name. + name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'` + dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$arg"; then + dir="$objdir" + else + dir="$dir/$objdir" + fi + + # This library was specified with -dlopen. + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + if test -z "$dlname"; then + # If there is no dlname, we need to preload. + prev=dlprefiles + else + # We should not create a dependency on this library, but we + # may need any libraries it requires. + compile_command="$compile_command$dependency_libs" + finalize_command="$finalize_command$dependency_libs" + prev= + continue + fi + fi + + # The library was specified with -dlpreopen. + if test "$prev" = dlprefiles; then + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + dlprefiles="$dlprefiles $dir/$old_library" + else + dlprefiles="$dlprefiles $dir/$linklib" + fi + prev= + fi + + if test "$build_libtool_libs" = yes && test -n "$library_names"; then + link_against_libtool_libs="$link_against_libtool_libs $arg" + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + + # This is the magic to use -rpath. + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + # Put the magic libdir with the hardcode flag. + hardcode_libdirs="$libdir" + libdir="@HARDCODE_LIBDIRS@" + else + # Just accumulate the unique libdirs. + case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + libdir= + fi + fi + + if test -n "$libdir"; then + eval flag=\"$hardcode_libdir_flag_spec\" + + compile_command="$compile_command $flag" + finalize_command="$finalize_command $flag" + fi + elif test -n "$runpath_var"; then + # Do the same for the permanent run path. + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + + + case "$hardcode_action" in + immediate) + if test "$hardcode_direct" = no; then + compile_command="$compile_command $dir/$linklib" + elif test "$hardcode_minus_L" = no; then + compile_command="$compile_command -L$dir -l$name" + elif test "$hardcode_shlibpath_var" = no; then + compile_shlibpath="$compile_shlibpath$dir:" + compile_command="$compile_command -l$name" + fi + ;; + + relink) + # We need an absolute path. + case "$dir" in + /* | [A-Za-z]:\\*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + exit 1 + fi + dir="$absdir" + ;; + esac + + if test "$hardcode_direct" = yes; then + compile_command="$compile_command $dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + compile_command="$compile_command -L$dir -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + compile_shlibpath="$compile_shlibpath$dir:" + compile_command="$compile_command -l$name" + fi + ;; + + *) + $echo "$modename: \`$hardcode_action' is an unknown hardcode action" 1>&2 + exit 1 + ;; + esac + + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + finalize_command="$finalize_command $libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + finalize_command="$finalize_command -L$libdir -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + finalize_shlibpath="$finalize_shlibpath$libdir:" + finalize_command="$finalize_command -l$name" + else + # We cannot seem to hardcode it, guess we'll fake it. + finalize_command="$finalize_command -L$libdir -l$name" + fi + else + # Transform directly to old archives if we don't build new libraries. + if test -n "$pic_flag" && test -z "$old_library"; then + $echo "$modename: cannot find static library for \`$arg'" 1>&2 + exit 1 + fi + + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_command="$compile_command $dir/$linklib" + finalize_command="$finalize_command $dir/$linklib" + else + compile_command="$compile_command -L$dir -l$name" + finalize_command="$finalize_command -L$dir -l$name" + fi + fi + + # Add in any libraries that this one depends upon. + compile_command="$compile_command$dependency_libs" + finalize_command="$finalize_command$dependency_libs" + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + ;; + esac + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -n "$vinfo" && test -n "$release"; then + $echo "$modename: you cannot specify both \`-version-info' and \`-release'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + oldlib= + oldobjs= + case "$output" in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + */* | *\\*) + $echo "$modename: output file \`$output' must have no directory components" 1>&2 + exit 1 + ;; + + *.a) + # Now set the variables for building old libraries. + build_libtool_libs=no + build_old_libs=yes + oldlib="$output" + $show "$rm $oldlib" + $run $rm $oldlib + ;; + + *.la) + # Make sure we only generate libraries of the form `libNAME.la'. + case "$output" in + lib*) ;; + *) + $echo "$modename: libtool library \`$arg' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + name=`$echo "X$output" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval libname=\"$libname_spec\" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + current=0 + revision=0 + age=0 + + if test -n "$objs"; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 + exit 1 + fi + + # How the heck are we supposed to write a wrapper for a shared library? + if test -n "$link_against_libtool_libs"; then + $echo "$modename: libtool library \`$output' may not depend on uninstalled libraries:$link_against_libtool_libs" 1>&2 + exit 1 + fi + + if test -n "$dlfiles$dlprefiles"; then + $echo "$modename: warning: \`-dlopen' is ignored while creating libtool libraries" 1>&2 + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test -z "$rpath"; then + $echo "$modename: you must specify an installation directory with \`-rpath'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + set dummy $rpath + if test $# -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + # Parse the version information argument. + IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' + set dummy $vinfo + IFS="$save_ifs" + + if test -n "$5"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + test -n "$2" && current="$2" + test -n "$3" && revision="$3" + test -n "$4" && age="$4" + + # Check that each of the things are valid numbers. + case "$current" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$revision" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$age" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + if test $age -gt $current; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + fi + + # Calculate the version variables. + version_vars="version_type current age revision" + case "$version_type" in + none) ;; + + linux) + version_vars="$version_vars major versuffix" + major=`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + version_vars="$version_vars versuffix verstring" + major=`expr $current - $age` + versuffix="$current.$age.$revision" + verstring="$versuffix" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test $loop != 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + version_vars="$version_vars major versuffix" + major="$current" + versuffix="$current.$revision" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 + ;; + esac + + # Create the output directory, or remove our outputs if we need to. + if test -d $objdir; then + $show "$rm $objdir/$output $objdir/$libname.* $objdir/${libname}${release}.*" + $run $rm $objdir/$output $objdir/$libname.* $objdir/${libname}${release}.* + else + $show "$mkdir $objdir" + $run $mkdir $objdir + status=$? + if test $status -eq 0 || test -d $objdir; then : + else + exit $status + fi + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + # Add libc to deplibs on all systems. + dependency_libs="$deplibs" + deplibs="$deplibs -lc" + + if test "$build_libtool_libs" = yes; then + # Get the real and link names of the library. + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + lib="$objdir/$realname" + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are PIC. + test -z "$pic_flag" && libobjs=`$echo "X$libobjs " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//g'` + + # Do each of the archive commands. + eval cmds=\"$archive_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Create links to the real library. + for linkname in $linknames; do + $show "(cd $objdir && $LN_S $realname $linkname)" + $run eval '(cd $objdir && $LN_S $realname $linkname)' || exit $? + done + + # If -export-dynamic was specified, set the dlname. + if test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + + # Now set the variables for building old libraries. + oldlib="$objdir/$libname.a" + ;; + + *.lo | *.o) + if test -n "$link_against_libtool_libs"; then + $echo "$modename: error: cannot link libtool libraries into reloadable objects" 1>&2 + exit 1 + fi + + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored while creating objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles"; then + $echo "$modename: warning: \`-dlopen' is ignored while creating objects" 1>&2 + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored while creating objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored while creating objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored while creating objects" 1>&2 + fi + + case "$output" in + *.lo) + if test -n "$objs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit 1 + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e 's/\.lo$/.o/'` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Create the old-style object. + reload_objs="$objs"`$echo "X$libobjs " | $Xsed -e 's/[^ ]*\.a //g' -e 's/\.lo /.o /g' -e 's/ $//g'` + + output="$obj" + eval cmds=\"$reload_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + test -z "$libobj" && exit 0 + + if test "$build_libtool_libs" != yes; then + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + $show "echo timestamp > $libobj" + $run eval "echo timestamp > $libobj" || exit $? + exit 0 + fi + + if test -n "$pic_flag"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs" + output="$libobj" + eval cmds=\"$reload_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + else + # Just create a symlink. + $show "$LN_S $obj $libobj" + $run $LN_S $obj $libobj || exit 1 + fi + + exit 0 + ;; + + *) + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored while linking programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored while creating objects" 1>&2 + fi + + if test -n "$rpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + # Put the magic libdir with the hardcode flag. + hardcode_libdirs="$libdir" + libdir="@HARDCODE_LIBDIRS@" + else + # Just accumulate the unique libdirs. + case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + libdir= + fi + fi + + if test -n "$libdir"; then + eval flag=\"$hardcode_libdir_flag_spec\" + + compile_command="$compile_command $flag" + finalize_command="$finalize_command $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + fi + + # Substitute the hardcoded libdirs into the compile commands. + if test -n "$hardcode_libdir_separator"; then + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@HARDCODE_LIBDIRS@%$hardcode_libdirs%g"` + fi + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//'` + finalize_command=`$echo "X$finalize_command " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//'` + fi + + if test "$export_dynamic" = yes && test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${output}S.c" + else + dlsyms= + fi + + if test -n "$dlsyms"; then + # Add our own program objects to the preloaded list. + dlprefiles=`$echo "X$objs$dlprefiles " | $Xsed -e 's/\.lo /.o /g' -e 's/ $//'` + + # Discover the nlist of each of the dlfiles. + nlist="$objdir/${output}.nm" + + if test -d $objdir; then + $show "$rm $nlist ${nlist}T" + $run $rm "$nlist" "${nlist}T" + else + $show "$mkdir $objdir" + $run $mkdir $objdir + status=$? + if test $status -eq 0 || test -d $objdir; then : + else + exit $status + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + # Parse the name list into a source file. + $show "creating $objdir/$dlsyms" + if test -z "$run"; then + # Make sure we at least have an empty file. + test -f "$nlist" || : > "$nlist" + + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + wcout=`wc "$nlist" 2>/dev/null` + count=`echo "X$wcout" | $Xsed -e 's/^[ ]*\([0-9][0-9]*\).*$/\1/'` + (test "$count" -ge 0) 2>/dev/null || count=-1 + else + $rm "$nlist"T + count=-1 + fi + + case "$dlsyms" in + "") ;; + *.c) + $echo > "$objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$output' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define dld_preloaded_symbol_count some_other_symbol +#define dld_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test -f "$nlist"; then + sed -e 's/^.* \(.*\)$/extern char \1;/' < "$nlist" >> "$objdir/$dlsyms" + else + echo '/* NONE */' >> "$objdir/$dlsyms" + fi + + $echo >> "$objdir/$dlsyms" "\ + +#undef dld_preloaded_symbol_count +#undef dld_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define __ptr_t void * +#else +# define __ptr_t char * +#endif + +/* The number of symbols in dld_preloaded_symbols, -1 if unsorted. */ +int dld_preloaded_symbol_count = $count; + +/* The mapping between symbol names and symbols. */ +struct { + char *name; + __ptr_t address; +} +dld_preloaded_symbols[] = +{\ +" + + if test -f "$nlist"; then + sed 's/^\(.*\) \(.*\)$/ {"\1", (__ptr_t) \&\2},/' < "$nlist" >> "$objdir/$dlsyms" + fi + + $echo >> "$objdir/$dlsyms" "\ + {0, (__ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif\ +" + ;; + + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit 1 + ;; + esac + fi + + # Now compile the dynamic symbol file. + $show "(cd $objdir && $CC -c$no_builtin_flag \"$dlsyms\")" + $run eval '(cd $objdir && $CC -c$no_builtin_flag "$dlsyms")' || exit $? + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$objdir/${output}S.o%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$objdir/${output}S.o%"` + elif test "$export_dynamic" != yes; then + test -n "$dlfiles$dlprefiles" && $echo "$modename: warning: \`-dlopen' and \`-dlpreopen' are ignored without \`-export-dynamic'" 1>&2 + else + # We keep going just in case the user didn't refer to + # dld_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + finalize_command=`$echo "X$finalize_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + + # We have no uninstalled library dependencies, so finalize right now. + $show "$compile_command" + $run eval "$compile_command" + exit $? + fi + + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$objdir/$output"'%g'` + finalize_command=`$echo "X$finalize_command" | $Xsed -e 's%@OUTPUT@%'"$objdir/$output"'T%g'` + + # Create the binary in the object directory, then wrap it. + if test -d $objdir; then : + else + $show "$mkdir $objdir" + $run $mkdir $objdir + status=$? + if test $status -eq 0 || test -d $objdir; then : + else + exit $status + fi + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case "$dir" in + /* | [A-Za-z]:\\*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + # Delete the old output file. + $run $rm $output + + if test -n "$compile_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_command="$runpath_var=\"$rpath\$$runpath_var\" $compile_command" + finalize_command="$runpath_var=\"$rpath\$$runpath_var\" $finalize_command" + fi + + case "$hardcode_action" in + relink) + # AGH! Flame the AIX and HP-UX people for me, will ya? + $echo "$modename: warning: using a buggy system linker" 1>&2 + $echo "$modename: relinking will be required before \`$output' can be installed" 1>&2 + ;; + esac + + $show "$compile_command" + $run eval "$compile_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the finalize command for shipping. + finalize_command=`$echo "X$finalize_command" | $Xsed -e "$sed_quote_subst"` + + # Quote $echo for shipping. + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + $rm $output + trap "$rm $output; exit 1" 1 2 15 + + $echo > $output "\ +#! /bin/sh + +# $output - temporary wrapper script for $objdir/$output +# Generated by ltmain.sh - GNU $PACKAGE $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of \``pwd`'. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test \"\${CDPATH+set}\" = set; then CDPATH=; export CDPATH; fi + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + link_against_libtool_libs='$link_against_libtool_libs' + finalize_command=\"$finalize_command\" +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" = \"$magic\"; then : + else + echo=\"$qecho\" + file=\"\$0\" + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + /* | [A-Za-z]:\\*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" + + progdir=\"\$thisdir/$objdir\" + program='$output' + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/:*\$//'\` + + export $shlibpath_var +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + + # Export the path to the program. + PATH=\"\$progdir:\$PATH\" + export PATH + + exec \$program \${1+\"\$@\"} + + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit 1 + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" + chmod +x $output + fi + exit 0 + ;; + esac + + # See if we need to build an old-fashioned archive. + if test "$build_old_libs" = "yes"; then + # Transform .lo files to .o files. + oldobjs="$objs"`$echo "X$libobjs " | $Xsed -e 's/[^ ]*\.a //g' -e 's/\.lo /.o /g' -e 's/ $//g'` + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + eval cmds=\"$old_archive_from_new_cmds\" + else + eval cmds=\"$old_archive_cmds\" + fi + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Now create the libtool archive. + case "$output" in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.a" + + $show "creating $output" + + # Only create the output if not a dry run. + if test -z "$run"; then + $echo > $output "\ +# $output - a libtool library file +# Generated by ltmain.sh - GNU $PACKAGE $VERSION + +# The name that we can dlopen(3). +dlname='$dlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Directory that this library needs to be installed in: +libdir='$install_libdir'\ +" + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $objdir && $LN_S ../$output $output)" + $run eval "(cd $objdir && $LN_S ../$output $output)" || exit 1 + ;; + esac + exit 0 + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional /bin/sh argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL"; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir= + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case "$arg" in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit 1 + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test -n "$isdir"; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test $# -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + fi + case "$destdir" in + /* | [A-Za-z]:\\*) ;; + *) + for file in $files; do + case "$file" in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case "$file" in + *.a) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (sed -e '2q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + library_names= + old_library= + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/" + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$realname $destdir/$realname" + $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? + test "X$dlname" = "X$realname" && dlname= + + if test $# -gt 0; then + # Delete the old symlinks. + rmcmd="$rm" + for linkname + do + rmcmd="$rmcmd $destdir/$linkname" + done + $show "$rmcmd" + $run $rmcmd + + # ... and create new ones. + for linkname + do + test "X$dlname" = "X$linkname" && dlname= + $show "(cd $destdir && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $LN_S $realname $linkname)" + done + fi + + if test -n "$dlname"; then + # Install the dynamically-loadable library. + $show "$install_prog $dir/$dlname $destdir/$dlname" + $run eval "$install_prog $dir/$dlname $destdir/$dlname" || exit $? + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + eval cmds=\"$postinstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + $show "$install_prog $file $destdir/$name" + $run eval "$install_prog $file $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case "$destfile" in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e 's/\.lo$/\.o/'` + ;; + *.o) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e 's/\.lo$/\.o/'` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit 0 + ;; + + *) + # Do a test to see if this is really a libtool program. + if (sed -e '4q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then + link_against_libtool_libs= + finalize_command= + + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Check the variables that should have been set. + if test -z "$link_against_libtool_libs" || test -z "$finalize_command"; then + $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 + exit 1 + fi + + finalize=yes + for lib in $link_against_libtool_libs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case "$lib" in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`" + if test -z "$libdir"; then + $echo "$modename: warning: \`$lib' contains no -rpath information" 1>&2 + elif test -f "$libfile"; then : + else + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + if test "$hardcode_action" = relink; then + if test "$finalize" = yes; then + $echo "$modename: warning: relinking \`$file' on behalf of your buggy system linker" 1>&2 + $show "$finalize_command" + if $run eval "$finalize_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + continue + fi + file="$objdir/$file"T + else + $echo "$modename: warning: cannot relink \`$file' on behalf of your buggy system linker" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + $show "$install_prog$stripme $file $dest" + $run eval "$install_prog\$stripme \$file \$dest" || exit $? + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + # Do each command in the postinstall commands. + eval cmds=\"$old_postinstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec $SHELL $0 --finish$current_libdirs + exit 1 + fi + + exit 0 + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + eval cmds=\"$finish_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" + fi + done + fi + + echo "------------------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + echo " $libdir" + done + echo + echo "To link against installed libraries in a given directory, LIBDIR," + echo "you must use the \`-LLIBDIR' flag during linking." + echo + echo " You will also need to do one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + echo " - use the \`$flag' linker flag" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + echo "See any operating system documentation about shared libraries for" + echo "more information, such as the ld(1) and ld.so(8) manual pages." + echo "------------------------------------------------------------------------------" + exit 0 + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit 1 + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test -f "$file"; then : + else + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + dir= + case "$file" in + *.la) + # Check to see that this really is a libtool archive. + if (sed -e '2q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit 1 + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case "$file" in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (sed -e '4q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + + # Now actually exec the command. + eval "exec \$cmd$args" + + $echo "$modename: cannot exec \$cmd$args" + exit 1 + else + # Display what would be done. + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + $echo "$cmd$args" + exit 0 + fi + ;; + + # libtool uninstall mode + uninstall) + modename="$modename: uninstall" + rm="$nonopt" + files= + + for arg + do + case "$arg" in + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + rmfiles="$file" + + case "$name" in + *.la) + # Possibly a libtool archive, so verify it. + if (sed -e '2q' $file | egrep '^# Generated by ltmain\.sh') >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $dir/$n" + test "X$n" = "X$dlname" && dlname= + done + test -n "$dlname" && rmfiles="$rmfiles $dir/$dlname" + test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" + + $show "$rm $rmfiles" + $run $rm $rmfiles + + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + eval cmds=\"$postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + eval cmds=\"$old_postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS=';' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + + # FIXME: should reinstall the best remaining shared library. + fi + ;; + + *.lo) + if test "$build_old_libs" = yes; then + oldobj=`$echo "X$name" | $Xsed -e 's/\.lo$/\.o/'` + rmfiles="$rmfiles $dir/$oldobj" + fi + $show "$rm $rmfiles" + $run $rm $rmfiles + ;; + + *) + $show "$rm $rmfiles" + $run $rm $rmfiles + ;; + esac + done + exit 0 + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + ;; + esac + + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 +fi # test -z "$show_help" + +# We need to display help for each of the modes. +case "$mode" in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + +-n, --dry-run display commands without modifying any files + --features display configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --version print version information + +MODE must be one of the following: + + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE." + exit 0 + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to dld_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only +library objects (\`.lo' files) may be specified, and \`-rpath' is required. + +If OUTPUT-FILE ends in \`.a', then a standard library is created using \`ar' +and \`ranlib'. + +If OUTPUT-FILE ends in \`.lo' or \`.o', then a reloadable object file is +created, otherwise an executable program is created." + ;; + +uninstall) + $echo +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; +esac + +echo +$echo "Try \`$modename --help' for more information about other modes." + +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/m4/ChangeLog b/debian/gettext-kde/gettext-kde-0.10.35/m4/ChangeLog new file mode 100644 index 00000000..0939656f --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/m4/ChangeLog @@ -0,0 +1,19 @@ +1998-04-30 Ulrich Drepper <[email protected]> + + * gettext.m4: Add AC_OUTPUT_COMMANDS in AM_GNU_GETTEXT to rewrite + the po/Makefile. + +1998-04-29 Ulrich Drepper <[email protected]> + + * Makefile.am (EXTRA_DIST): No need to mention *.m4 files here. + + * gettext.m4: Fix test for gettext in libintl. + Patch by Guido Flohr <[email protected]>. + +1998-04-28 Ulrich Drepper <[email protected]> + + * gettext.m4: Don't test for values.h. + +1998-04-27 21:17 Ulrich Drepper <[email protected]> + + * gettext.m4, lcmessage.m4, progtest.m4: Moved to here from toplevel. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/m4/Makefile.am b/debian/gettext-kde/gettext-kde-0.10.35/m4/Makefile.am new file mode 100644 index 00000000..ca9d9c23 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/m4/Makefile.am @@ -0,0 +1,10 @@ +## Process this file with automake to produce Makefile.in -*-Makefile-*- + +aclocaldir = @aclocaldir@ +aclocal_DATA = gettext.m4 lcmessage.m4 progtest.m4 + +# Generate this list with +# find . -type f -name '*.m4' -printf '%f\n'|sort |fmt |tr '\012' @ \ +# |sed 's/@$/%/;s/@/ \\@/g' |tr @% '\012\012' +EXTRA_DIST = README \ +gettext.m4 lcmessage.m4 progtest.m4 diff --git a/debian/gettext-kde/gettext-kde-0.10.35/m4/Makefile.in b/debian/gettext-kde/gettext-kde-0.10.35/m4/Makefile.in new file mode 100644 index 00000000..0b17563a --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/m4/Makefile.in @@ -0,0 +1,217 @@ +# Makefile.in generated automatically by automake 1.3 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +ACLOCAL_VERSION = @ACLOCAL_VERSION@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +DATADIRNAME = @DATADIRNAME@ +EMACS = @EMACS@ +GENCAT = @GENCAT@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GT_NO = @GT_NO@ +GT_YES = @GT_YES@ +INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ +INSTOBJEXT = @INSTOBJEXT@ +INTLDEPS = @INTLDEPS@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +LD = @LD@ +LIBOBJS = @LIBOBJS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +NM = @NM@ +PACKAGE = @PACKAGE@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +YACC = @YACC@ +l = @l@ +lispdir = @lispdir@ + +aclocaldir = @aclocaldir@ +aclocal_DATA = gettext.m4 lcmessage.m4 progtest.m4 + +# Generate this list with +# find . -type f -name '*.m4' -printf '%f\n'|sort |fmt |tr '\012' @ \ +# |sed 's/@$/%/;s/@/ \\@/g' |tr @% '\012\012' +EXTRA_DIST = README \ +gettext.m4 lcmessage.m4 progtest.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +DATA = $(aclocal_DATA) + +DIST_COMMON = README ChangeLog Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP = --best +all: Makefile $(DATA) + +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps m4/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +install-aclocalDATA: $(aclocal_DATA) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(aclocaldir) + @list='$(aclocal_DATA)'; for p in $$list; do \ + if test -f $(srcdir)/$$p; then \ + echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(aclocaldir)/$$p"; \ + $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(aclocaldir)/$$p; \ + else if test -f $$p; then \ + echo " $(INSTALL_DATA) $$p $(DESTDIR)$(aclocaldir)/$$p"; \ + $(INSTALL_DATA) $$p $(DESTDIR)$(aclocaldir)/$$p; \ + fi; fi; \ + done + +uninstall-aclocalDATA: + @$(NORMAL_UNINSTALL) + list='$(aclocal_DATA)'; for p in $$list; do \ + rm -f $(DESTDIR)$(aclocaldir)/$$p; \ + done +tags: TAGS +TAGS: + + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = m4 + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done +info: +dvi: +check: all + $(MAKE) +installcheck: +install-exec: + @$(NORMAL_INSTALL) + +install-data: install-aclocalDATA + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: uninstall-aclocalDATA + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + $(mkinstalldirs) $(DATADIR)$(aclocaldir) + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-generic + +clean: clean-generic mostlyclean + +distclean: distclean-generic clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-generic distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: uninstall-aclocalDATA install-aclocalDATA tags distdir info dvi \ +installcheck install-exec install-data install uninstall all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/m4/README b/debian/gettext-kde/gettext-kde-0.10.35/m4/README new file mode 100644 index 00000000..ac32e284 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/m4/README @@ -0,0 +1,4 @@ +These files are used by a program called aclocal (part of the GNU automake +package). aclocal uses these files to create aclocal.m4 which is in turn +used by autoconf to create the configure script at the the top level in +this distribution. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/m4/gettext.m4 b/debian/gettext-kde/gettext-kde-0.10.35/m4/gettext.m4 new file mode 100644 index 00000000..06d58f98 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/m4/gettext.m4 @@ -0,0 +1,315 @@ +# Macro to add for using GNU gettext. +# Ulrich Drepper <[email protected]>, 1995. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +# serial 5 + +AC_DEFUN(AM_WITH_NLS, + [AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE(nls, + [ --disable-nls do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT($USE_NLS) + AC_SUBST(USE_NLS) + + USE_INCLUDED_LIBINTL=no + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + AC_DEFINE(ENABLE_NLS) + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH(included-gettext, + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If gettext or catgets are available (in this order) we + dnl use this. Else we have to fall back to GNU NLS library. + dnl catgets is only used if permitted by option --with-catgets. + nls_cv_header_intl= + nls_cv_header_libgt= + CATOBJEXT=NONE + + AC_CHECK_HEADER(libintl.h, + [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc, + [AC_TRY_LINK([#include <libintl.h>], [return (int) gettext ("")], + gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)]) + + if test "$gt_cv_func_gettext_libc" != "yes"; then + AC_CHECK_LIB(intl, bindtextdomain, + [AC_CACHE_CHECK([for gettext in libintl], + gt_cv_func_gettext_libintl, + [AC_CHECK_LIB(intl, gettext, + gt_cv_func_gettext_libintl=yes, + gt_cv_func_gettext_libintl=no)], + gt_cv_func_gettext_libintl=no)]) + fi + + if test "$gt_cv_func_gettext_libc" = "yes" \ + || test "$gt_cv_func_gettext_libintl" = "yes"; then + AC_DEFINE(HAVE_GETTEXT) + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl + if test "$MSGFMT" != "no"; then + AC_CHECK_FUNCS(dcgettext) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr], + [CATOBJEXT=.gmo + DATADIRNAME=share], + [CATOBJEXT=.mo + DATADIRNAME=lib]) + INSTOBJEXT=.mo + fi + fi + ]) + + if test "$CATOBJEXT" = "NONE"; then + AC_MSG_CHECKING([whether catgets can be used]) + AC_ARG_WITH(catgets, + [ --with-catgets use catgets functions if available], + nls_cv_use_catgets=$withval, nls_cv_use_catgets=no) + AC_MSG_RESULT($nls_cv_use_catgets) + + if test "$nls_cv_use_catgets" = "yes"; then + dnl No gettext in C library. Try catgets next. + AC_CHECK_LIB(i, main) + AC_CHECK_FUNC(catgets, + [AC_DEFINE(HAVE_CATGETS) + INTLOBJS="\$(CATOBJS)" + AC_PATH_PROG(GENCAT, gencat, no)dnl + if test "$GENCAT" != "no"; then + AC_PATH_PROG(GMSGFMT, gmsgfmt, no) + if test "$GMSGFMT" = "no"; then + AM_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no) + fi + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.cat + INSTOBJEXT=.cat + DATADIRNAME=lib + INTLDEPS='$(top_builddir)/intl/libintl.a' + INTLLIBS=$INTLDEPS + LIBS=`echo $LIBS | sed -e 's/-lintl//'` + nls_cv_header_intl=intl/libintl.h + nls_cv_header_libgt=intl/libgettext.h + fi]) + fi + fi + + if test "$CATOBJEXT" = "NONE"; then + dnl Neither gettext nor catgets in included in the C library. + dnl Fall back on GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + INTLOBJS="\$(GETTOBJS)" + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + AC_SUBST(MSGFMT) + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.gmo + INSTOBJEXT=.mo + DATADIRNAME=share + INTLDEPS='$(top_builddir)/intl/libintl.a' + INTLLIBS=$INTLDEPS + LIBS=`echo $LIBS | sed -e 's/-lintl//'` + nls_cv_header_intl=intl/libintl.h + nls_cv_header_libgt=intl/libgettext.h + fi + + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is no GNU xgettext we define it as : so that the + dnl Makefiles still can work. + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + AC_MSG_RESULT( + [found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + fi + + # We need to process the po/ directory. + POSUB=po + else + DATADIRNAME=share + nls_cv_header_intl=intl/libintl.h + nls_cv_header_libgt=intl/libgettext.h + fi + AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl) + AC_OUTPUT_COMMANDS( + [case "$CONFIG_FILES" in *po/Makefile.in*) + sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile + esac]) + + + # If this is used in GNU gettext we have to set USE_NLS to `yes' + # because some of the sources are only built for this goal. + if test "$PACKAGE" = gettext; then + USE_NLS=yes + USE_INCLUDED_LIBINTL=yes + fi + + dnl These rules are solely for the distribution goal. While doing this + dnl we only have to keep exactly one list of the available catalogs + dnl in configure.in. + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + dnl Make all variables we use known to autoconf. + AC_SUBST(USE_INCLUDED_LIBINTL) + AC_SUBST(CATALOGS) + AC_SUBST(CATOBJEXT) + AC_SUBST(DATADIRNAME) + AC_SUBST(GMOFILES) + AC_SUBST(INSTOBJEXT) + AC_SUBST(INTLDEPS) + AC_SUBST(INTLLIBS) + AC_SUBST(INTLOBJS) + AC_SUBST(POFILES) + AC_SUBST(POSUB) + ]) + +AC_DEFUN(AM_GNU_GETTEXT, + [AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_PROG_RANLIB])dnl + AC_REQUIRE([AC_ISC_POSIX])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + AC_REQUIRE([AC_C_CONST])dnl + AC_REQUIRE([AC_C_INLINE])dnl + AC_REQUIRE([AC_TYPE_OFF_T])dnl + AC_REQUIRE([AC_TYPE_SIZE_T])dnl + AC_REQUIRE([AC_FUNC_ALLOCA])dnl + AC_REQUIRE([AC_FUNC_MMAP])dnl + + AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \ +unistd.h sys/param.h]) + AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \ +strdup __argz_count __argz_stringify __argz_next]) + + if test "${ac_cv_func_stpcpy+set}" != "set"; then + AC_CHECK_FUNCS(stpcpy) + fi + if test "${ac_cv_func_stpcpy}" = "yes"; then + AC_DEFINE(HAVE_STPCPY) + fi + + AM_LC_MESSAGES + AM_WITH_NLS + + if test "x$CATOBJEXT" != "x"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + AC_MSG_CHECKING(for catalogs to be installed) + NEW_LINGUAS= + for lang in ${LINGUAS=$ALL_LINGUAS}; do + case "$ALL_LINGUAS" in + *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;; + esac + done + LINGUAS=$NEW_LINGUAS + AC_MSG_RESULT($LINGUAS) + fi + + dnl Construct list of names of catalog files to be constructed. + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + dnl The reference to <locale.h> in the installed <libintl.h> file + dnl must be resolved because we cannot expect the users of this + dnl to define HAVE_LOCALE_H. + if test $ac_cv_header_locale_h = yes; then + INCLUDE_LOCALE_H="#include <locale.h>" + else + INCLUDE_LOCALE_H="\ +/* The system does not provide the header <locale.h>. Take care yourself. */" + fi + AC_SUBST(INCLUDE_LOCALE_H) + + dnl Determine which catalog format we have (if any is needed) + dnl For now we know about two different formats: + dnl Linux libc-5 and the normal X/Open format + test -d intl || mkdir intl + if test "$CATOBJEXT" = ".cat"; then + AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen) + + dnl Transform the SED scripts while copying because some dumb SEDs + dnl cannot handle comments. + sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed + fi + dnl po2tbl.sed is always needed. + sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \ + $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed + + dnl In the intl/Makefile.in we have a special dependency which makes + dnl only sense for gettext. We comment this out for non-gettext + dnl packages. + if test "$PACKAGE" = "gettext"; then + GT_NO="#NO#" + GT_YES= + else + GT_NO= + GT_YES="#YES#" + fi + AC_SUBST(GT_NO) + AC_SUBST(GT_YES) + + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but ($top_srcdir). + dnl Try to locate is. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) + + dnl *** For now the libtool support in intl/Makefile is not for real. + l= + AC_SUBST(l) + + dnl Generate list of files to be processed by xgettext which will + dnl be included in po/Makefile. + test -d po || mkdir po + if test "x$srcdir" != "x."; then + if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then + posrcprefix="$srcdir/" + else + posrcprefix="../$srcdir/" + fi + else + posrcprefix="../" + fi + rm -f po/POTFILES + sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ + < $srcdir/po/POTFILES.in > po/POTFILES + ]) diff --git a/debian/gettext-kde/gettext-kde-0.10.35/m4/lcmessage.m4 b/debian/gettext-kde/gettext-kde-0.10.35/m4/lcmessage.m4 new file mode 100644 index 00000000..e31bb533 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/m4/lcmessage.m4 @@ -0,0 +1,19 @@ +# Check whether LC_MESSAGES is available in <locale.h>. +# Ulrich Drepper <[email protected]>, 1995. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +# serial 1 + +AC_DEFUN(AM_LC_MESSAGES, + [if test $ac_cv_header_locale_h = yes; then + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES], + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) + if test $am_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES) + fi + fi]) diff --git a/debian/gettext-kde/gettext-kde-0.10.35/m4/progtest.m4 b/debian/gettext-kde/gettext-kde-0.10.35/m4/progtest.m4 new file mode 100644 index 00000000..2482d4a9 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/m4/progtest.m4 @@ -0,0 +1,47 @@ +# Search path for a program which passes the given test. +# Ulrich Drepper <[email protected]>, 1996. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +# serial 1 + +dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN(AM_PATH_PROG_WITH_TEST, +[# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + /*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in ifelse([$5], , $PATH, [$5]); do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test -n "[$]$1"; then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) diff --git a/debian/gettext-kde/gettext-kde-0.10.35/misc/ChangeLog b/debian/gettext-kde/gettext-kde-0.10.35/misc/ChangeLog new file mode 100644 index 00000000..eac12f83 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/misc/ChangeLog @@ -0,0 +1,671 @@ +1998-03-30 Fran�ois Pinard <[email protected]> + + * po-mode.el (po-tags-search, po-mark-translatable, + po-select-mark-and-mark): Call interactive after the doc string, + instead of before. + Reported by Tom Tromey. + +1998-04-27 21:17 Ulrich Drepper <[email protected]> + + * po-mode.el: Update from most recent version. + + * gettextize.in: Use aclocaldir from configuration. + +1997-09-04 Fran�ois Pinard <[email protected]> + + * po-mode.el: Rename po-middle-of-entry to po-start-of-msgstr, add + variable po-start-of-msgid. Use it whenever appropriate. + + * po-mode.el (po-find-file-coding-system): New function. + Reported by Ken'ichi Handa. + + * po-mode.el: Normalise string= to string-equal. + + * po-mode.el (po-send-mail): Allow for mailing to the team. + (po-guess-team-address): New function. + +1997-09-02 Fran�ois Pinard <[email protected]> + + * po-mode.el (po-set-comment): Unused variable buffer. + (po-edit-string): Unused variables start, middle, end and obsolete. + (po-tags-search): Unused variable find-string. + + * po-mode.el (po-check-lock): Create the work buffer as required, to + avoid diagnostics about selecting a deleted buffer, after a user + explicitly killed the work buffer instead of exiting it normally. + Reported by Hrvoje Niksic. + + * po-mode.el: New variable po-mode-menu-layout. + (po-mode): Establish a bar mode menu if possible. + Reported by Nils Naumann. + + * po-mode.el: Decide set-translation-domain before using it. + This avoids a byte-compilation warning. + + * po-mode.el (po-set-comment): Rearrange wrong conditional flow. + Translator comments were duplicated, when contents were unchanged. + Reported by Enrique Melero. + +1997-09-01 Fran�ois Pinard <[email protected]> + + * po-mode.el (po-highlight, po-dehighlight): New functions. + New globals: po-highlight-p, po-highlight-face and po-overlay. + (po-edit-msgstr): Highlight the msgid string while editing. + (po-tags-search): Highlight found string. + (po-mark-found-string): Unhilight string before replacing it. + Reported by Jim Meyering, Michel Robitaille and Ulrich Drepper. + + * po-mode.el (po-set-field): Tells if buffer was modified. + (po-edit-msgstr): Never make fuzzy an entry which is unmodified. + + * po-mode.el: Add M command, and variables po-compose-mail-function, + po-translation-project-address and po-gzip-uuencode-command. + (po-guess-archive-name, po-send-mail): New functions. + Reported by Karl Eichwalder. + +1997-08-31 Fran�ois Pinard <[email protected]> + + * po-mode.el (po-replace-revision-date): Enforce ISO 8601 zones. + Reported by Enrique Melero G�mez, Karl Eichwalder, Max de + Mendizabal and Santiago Vila Doncel. + + * po-mode.el (po-edit-string): Expand tabs while editing + translations. Reported by G�ran Uddeborg. + + * po-mode.el: Accept C-c C-k to abort recursive edits. + Reported by G�ran Uddeborg and Hrvoje Niksic. + +1997-06-02 Ben Pfaff <[email protected]> + + * po-mode.el (po-find-c-string, po-extract-unquoted): Process ANSI + string concatenation and K&R escaped newlines. + +1997-03-02 Hrvoje Niksic <[email protected]> + + * po-mode.el (po-help): To continue, also accept things like a + mouse press or an arrow key. + +1996-11-12 Fran�ois Pinard <[email protected]> + + * po-mode.el: Alter po-font-lock-keywords to properly highlight C + formats, when using an upper case letter as formatting functor. + + * po-mode.el: If available, prefer force-mode-line-update builtin. + + * po-mode.el: Use our own buffer-substring, defining it as + buffer-substring-no-properties if available. Because of text + properties, buffer-substring does not always return a string. + + * po-mode.el (po-consider-source-path): Ensure a trailing slash. + +1996-05-13 Andreas Schwab <[email protected]> + + * po-mode.el (po-eval-requoted, po-extract-unquoted): Correct + missing or spurious backslashes in some regexps. + +1997-08-01 15:49 Ulrich Drepper <[email protected]> + + * Makefile.am (AUTOMAKE_OPTIONS): Require version 1.2. + +1997-04-12 Hrvoje Niksic <[email protected]> + + * po-mode.el: Customize. + +1997-03-10 06:56 Ulrich Drepper <[email protected]> + + * elisp-comp: Use EMACS environment variable is available instead + of always executing emacs. + +1996-12-03 23:24 Ulrich Drepper <[email protected]> + + * gettextize.in: Update --help and --version texts. + +1996-11-22 04:45 Ulrich Drepper <[email protected]> + + * Makefile.am (EXTRA_DIST): Add locale.alias. + +1996-11-21 23:11 Ulrich Drepper <[email protected]> + + * Makefile.am: Remove rules for ELisp handling. Automake now + knows what to do. + +1996-10-28 23:09 Ulrich Drepper <[email protected]> + + * gettextize.in: Remove -v from help message. Change format of + --version text according to last GNU coding standard. Don't print + help message for unknown option. Instead print "Try `..." + message. + +1996-10-19 17:41 1996 Ulrich Drepper <[email protected]> + + * locale.alias: Language for czech entry must be cs. + +1996-09-18 00:29 Fran�ois Pinard <[email protected]> + + * po-mode.el (po-font-lock-keywords): Correct highlighting of + formats like %3d. + +1996-08-19 Fran�ois Pinard <[email protected]> + + * po-mode.el: Restructured to avoid all byte-compilation warnings. + Highlighting using `hilit19' is being deprecated, font lock code + should now automatically be activated whenever available. + +1996-07-15 Fran�ois Pinard <[email protected]> + + * po-mode.el: po-mode.el (po-kill-msgstr): Ensure po-entry-type is + always defined before decreasing counter. + +1996-07-15 01:08 Ulrich Drepper <[email protected]> + + * gettextize.in (gettext_dir): Remove warning that files will be + removed. It's not really necessary since the -f option is + necessary. Suggested by Fran�ois Pinard. + +1996-06-26 18:40 Ulrich Drepper <[email protected]> + + * po-mode.el: Added ELisp support. Patch by Fran�ois Pinard. + +1996-06-18 15:12 Ulrich Drepper <[email protected]> + + * gettextize.in (aclocal_version): new variable. Value determined + by configure. This finally makes the check of the aclocal.m4 + version number correct because this number need not be the same as + the version number of the package. + +1996-06-06 02:02 Ulrich Drepper <[email protected]> + + * gettextize.in: Rewrite copying now that files are kept in + different directories and don't use funny prefixes anymore. + +1996-06-05 16:36 Ulrich Drepper <[email protected]> + + * Makefile.am (DISTCLEANFILES): Renamed from CLEANFILES and + changed $(lisp_DATA) to $(ELCFILES). + +1996-06-03 00:46 Ulrich Drepper <[email protected]> + + * Makefile.am (elc_DATA): Rename to elc_SCRIPTS so that + distribution wents smooth. + +1996-06-02 21:16 Ulrich Drepper <[email protected]> + + * Makefile.am (SUFFIXES): New variable. Automake wants it this + way to introduce new suffixes. + + * Makefile.am: Initial revision. + +1996-06-01 18:20 Ulrich Drepper <[email protected]> + + * Makefile.in (default): Add default rule because AIX' make does + not understand multiple goals in default rule. + + * Makefile.in (DISTFILES): Rename README-TCL to README-Tcl. + + * gettextize.in: Implement test for correct aclocal.m4 version. + +1996-04-06 02:40 Ulrich Drepper <drepper@myware> + + * po-mode.el: Apply Fran�ois' patch for new default values of + configuration variables and new header entry format. + +1996-04-02 18:56 Ulrich Drepper <drepper@myware> + + * Makefile.in (all-gettext): New goal. Same as all. + +1996-04-02 03:18 Fran�ois Pinard <[email protected]> + + * po-mode.el: * Let po-show-source-context update + po-reference-cursor itself, and display to the minibuffer the + relative and maximum position of the shown reference in the list + of collected references. Callers adjusted accordingly. + . Do not generate tildes while reconstructing non-obsolete + comments. + . Do merge attributes on a single `#,' line. Using the non-regexp + version of the search was causing the generation of another one. + . Remove a spurious trailing comma while removing the last + attribute. + . Limit the search for source references to the msgstr line. This + does not correct any bug, but is more consistent. + +1996-03-31 23:32 Fran�ois Pinard <[email protected]> + + * po-mode.el: * Small corrections to the help page. Reported by + Karl Eichwalder. + + * Change po-edit-mode-map to po-subedit-mode-map and + po-mode-edit-hook to po-subedit-mode-hook. The previous names + were not consistent. Reported by Karl Eichwalder. + + * Repair RET, completely broken for multi-lines, maybe showing a + regexp bug in Emacs(?). See the FIXME in po-extract-unquoted. + Reported by Karl Eichwalder. + +1996-03-31 22:36 Ulrich Drepper <drepper@myware> + + * gettextize.in (prefix): Define from @prefix@. Is used in + gettext_dir definition. Reported by Jim Meyering. + +1996-03-28 19:11 Karl Eichwalder <[email protected]> + + * gettextize.in (gettext_dir): Set to @datadir@/gettext. + +1996-03-26 21:27 Ulrich Drepper <drepper@myware> + + * Makefile.in (datadir): Initialize from @datadir@. Reported by + Karl Eichwalder. + +1996-03-25 09:52 Fran�ois Pinard <[email protected]> + + * po-mode.el: * Correct documentation mistakes in short help. + + * Accept both # and #~ for obsolete comments, but use #~ when + generating them. + + * Recognize \NNN octal notation for characters in PO file strings, + however, never produce such horror. + +1996-03-25 03:51 Ulrich Drepper <drepper@myware> + + * po-mode.el: Some last minute changes by Fran�ois Pinard. + +1996-03-24 18:51 Ulrich Drepper <drepper@myware> + + * po-mode.el (po-confirm-and-quit): Recognize both #, and #! but + prefer producing #,. + + * Rephrase messages about location stack contents + * Clear out message when user refuses quitting. + +1996-03-23 14:34 Fran�ois Pinard <[email protected]> + + * Implement po-default-file-header. + Reported by Karl Eichwalder. + + * Rename po-auto-select to po-auto-select-entry. + + * Revise text of all disruptive questions, try to alleviate + them, avoid them if possible. Clear the message area sometimes. + + * Correct a bug by which `#! fuzzy' was inserted before the + white line, instead of after, for PO files having no `#' line + of any kind. + + * Correct the message count updating in po-kill-msgstr and + po-yank-msgstr. + + * Allow for po-auto-edit-with-msgid to work, when + po-edit-msgstr was called on an untranslated immediately after + loading a PO file. + + * po-quit may select all kind of not fully processed entries, + rather than just untranslate ones. + + Rebound commands: + * TAB moves to LFD for po-msgid-to-msgstr. + * z moves to DEL for po-fade-out-entry. + + New commands: + * TAB is po-unfuzzy. + * SPC is po-auto-select. + * t is po-next-translated entry. + * M-t is po-previous-translated-entry. + * E is po-edit-out-full. + + Improved commands: + * DEL (po-fade-out-entry) makes the entry fuzzy as first step, + and request confirmation for some transitions. + * LFD (po-msgid-to-msgstr) requests confirmation if entry was + already translated. + * v (po-validate): Pass the -v flag to msgfmt. + * q (po-confirm-and-quit): Use milder confirmation. + * Implemented variables po-auto-edit-with-msgid, + po-auto-fuzzy-on-edit, po-auto-select-on-unfuzzy, and + po-auto-replace-revision-date. + + PO header management: + * PO-Revision-Date might be automatically updated. + Reported by Karl Eichwalder. + * A normalized PO file header is automatically created if it + not exists. Any previous PO file header is kept, obsoleted. + + Various internal cleanups: + * Revised the PO mode summary display. + * ...-hooks renamed ...-hook, per word of Richard Stallman. + * po-obsolete-flag replaced by more general po-entry-type. + * po-appropriate-counter, po-increase-appropriate-counter and + po-decrease-appropriate-counter are replaced by po-type-counter, + po-decrease-type-counter and po-increase-type-counter. + Overall counting logic revised and cleaned up. + * The concept of being after last entry disappears. Being + after last entry is equivalent to being on last entry. And + since there is at least the PO header entry, and an empty PO + file is not possible anymore: simplified code accordingly. + * po-add-attribute, po-delete-attribute: New functions. + * po-offer-validation disappears, as (buffer-modified-p) may + be used instead. + +1996-03-14 16:55 Fran�ois Pinard <[email protected]> + + * po-mode.el: Inexact entries are now called fuzzy. Change + regular expression and function names. + +1996-03-14 11:38 Fran�ois Pinard <[email protected]> + + * po-mode.el: Rename po-mode-hooks to po-mode-edit-hooks. + + * po-mode.el: Suggest accepting .pot and embedded .po. as triggers + for PO editing mode, besides .po and .pox. + * PO mode help display has been revised to fit in 23 lines, + and present some more yet unimplemented commands. PO mode + initially suggests using `h' or `?' for documentation. + * Many variables and functions have been renamed for more + clarity and consistency, too numerous to be detailed here. + * Reorganization of key-bindings. This restores to M-w and M-y + their usual meaning, and free some keys for to-be-implemented + commands: the a/M-a/A/M-A series for auxiliary files, c/M-c + for compendium files, and l/M-l/L/M-L series for lexicon files. + . Commands u, v, o and q have been renamed U, V, O and Q + (po-undo, po-validate, po-other-window and po-quit). + . Command v replaces old command V (po-mode-version). + . u and SPC replace e (po-next-untranslated-entry). + M-u replaces M-e (po-previous-untranslated-entry). + . o replaces M-n and M-SPC (po-next-obsolete-entry). + M-o replaces M-p and M-DEL (po-previous-obsolete-entry). + . SPC, DEL, and M-RET are no more po-next-entry, + po-previous-entry and po-edit-comment. + . r replaces l (po-pop-location). + . s (po-cycle-source-reference) replaces c (po-cycle-reference). + M-s (po-select-source-reference) replaces M-c (po-select-reference). + S (po-consider-source-path) replaces d (po-add-path). + M-S (po-ignore-source-path) replaces M-d (po-delete-path). + . K, W and Y replace M-k, M-w and M-y (po-kill-comment, + po-kill-ring-save-comment and po-yank-comment). + * New command q (po-confirm-and-quit). + +1996-03-13 13:16 Karl Eichwalder <[email protected]> + + * po-mode.el (po-edit-string): run hook `po-edit-hooks'. + +1996-03-09 12:39 Ulrich Drepper <drepper@myware> + + * po-mode.el (po-keywords): Add N_. + +1996-01-15 02:58 Fran�ois Pinard <[email protected]> + + * gettextize.in: Better message about aclocal.m4 change. + +1995-12-19 22:41 Ulrich Drepper <drepper@myware> + + * README-TCL, tcl_gettext.c: Initial revision. + + * Makefile.in (DISTFILES): Add tcl_gettext and README-TCL. + +1995-12-19 22:12 Ulrich Drepper <drepper@myware> + + * Makefile.in (Makefile, gettextize): Explicitly use $(SHELL) for + running shell scripts. + +1995-12-16 15:31 Ulrich Drepper <drepper@myware> + + * gettextize.in: Implement -c option: always copy files. + Requested by Roland McGrath. + +1995-12-05 11:41 Larry Schwimmer <[email protected]> + + * Makefile.in (install-data): Make sure $(localedir) exists. + +1995-11-27 02:50 Sakai Kiyotaka <[email protected]> + + * locale.alias: New entry for Japanese. + +1995-11-24 23:53 Ulrich Drepper <drepper@myware> + + * po-mode.el (po-quit): Always clear the message area after y-or-n-p. + +1995-11-11 16:30 Ulrich Drepper <drepper@myware> + + * po-mode.el: Implement searching of inexact entries. + + * po-mode.el: Implement po-version. + +1995-11-08 01:46 Ulrich Drepper <drepper@myware> + + * po-mode.el: + Hilit file names and line numbers in #: with function-name face. + + * po-mode.el: Add support for XEmacs' font-lock.el. + + * po-mode.el: + Patches by Franc,ois: enable hilit, handle multi-line #: lines, and + don't pass -v argument to msgfmt. + +1995-11-06 15:52 Ulrich Drepper <drepper@myware> + + * po-mode.el: msgfmt behaves now well again. Return to use + /dev/null as output file for verification. + +1995-11-05 19:39 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist-gettext): Make synonym for dist. + +1995-11-05 15:40 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist): Suppress error message when ln failed. + Get files from $(srcdir) explicitly. + +1995-11-01 10:39 Ulrich Drepper <drepper@myware> + + * gettextize.in: + Don't use "!" as negation; not all versions of sh support it. Patch + by Tom Tromey. + +1995-10-31 20:46 Ulrich Drepper <drepper@myware> + + * po-mode.el (po-msgfmt-program): + Variable which contains name of the msgfmt program. + (po-validate): Use above variable. + +1995-10-31 19:12 Tom Tromey <[email protected]> + + * gettextize.in: Don't use "!" as negation; not all versions of sh + support it. + +1995-10-30 22:22 Ulrich Drepper <drepper@myware> + + * po-mode.el (po-validate): + Protect the previous value of compile-command. + Change by Franc,ois Pinard. + +1995-10-29 12:11 Ulrich Drepper <drepper@myware> + + * gettextize.in: + Change text of trailing message about aclocal.m4 changing. Suggested + by Franc,ois Pinard. + + * Makefile.in (INSTALL_PROGRAM): Not used anymore. + (INSTALL_SCRIPT): New variable, + (install-exec): Install gettextize using INSTALL_SCRIPT. + + * po-mode.el (po-eval-requoted): Add space in description. + + * Makefile.in: Remove Emacs local variable setting. + +1995-10-28 22:09 Ulrich Drepper <drepper@myware> + + * Makefile.in (install-src): Move some rules from install-data. + (install-data): Add installation of locale.alias. + + * locale.alias: Initial revision + +1995-10-28 18:08 Ulrich Drepper <drepper@myware> + + * po-mode.el: Apply latest patch by Franc,ois. + +1995-09-23 14:34 Ulrich Drepper <drepper@myware> + + * gettextize.in: + Run config.status shell script if this is exists and is selected. This + is always necessary if one updates the intl/ dir. + +1995-09-20 22:26 Ulrich Drepper <drepper@myware> + + * gettextize.in: + Try to remove files in root and po/ dir before linking. If this is + not done re-linking to the same file will cause an error. + +1995-09-07 00:21 Ulrich Drepper <drepper@myware> + + * gettext-sh: Protect IFS assignments. + +1995-08-22 22:12 Ulrich Drepper <drepper@myware> + + * gettextize.in (usage): + Rearrange help message. Now describe -f option. + Reported by Franc,ois Pinard. + +1995-08-19 23:32 Ulrich Drepper <drepper@myware> + + * gettextize.in: Add missing terminating quotes. + + * Makefile.in (INSTALL_PROGRAM): + *Do* use -m 755. Autoconf does not set any mode. + + * Makefile.in (install-src): + Make behave like install. I.e. really install + gettextize and the .elc files. + +1995-08-19 15:08 Ulrich Drepper <drepper@myware> + + * gettextize.in: + Some nicety changes of shell programming by Franc,ois Pinard. + + * po-mode.el (po-search-path): Extend by "../". + + * gettextize.in: Protect against relative source paths. + Avoid exit an second level shell. + + * gettext-sh: Better comments: By Franc,ois Pinard. + + * Makefile.in (INSTALL_PRG): Don't define mode ourself. + (uninstall) Remove gettextize. + + * gettextize.in: + intl/VERSION is now a real file and must not be generated here. + +1995-08-18 12:05 Ulrich Drepper <drepper@myware> + + * gettext-sh: Use -s option for gettext instead of --shell-script. + +1995-08-15 10:49 Ulrich Drepper <drepper@myware> + + * Makefile.in (all, check): + Add gettextize to dependencies, so that install need not + build anything. + +1995-08-15 07:13 Ulrich Drepper <drepper@myware> + + * gettextize.in: Add intl/VERSION file. + + * gettextize.in: Remove target file for root- and po- file first. + + * gettextize.in: + Files installed in top directory of package are now preceded by root-. + All other are ignore (esp aclocal.m4). + +1995-08-14 23:50 Ulrich Drepper <drepper@myware> + + * Makefile.in (exec_prefix, bindir): + Directories needed for installing gettextize. + (transform): Standard GNU program name transformation. + (INSTALL_PROGRAM): Program to install gettextize as executable. + (DISTFILES): Remove makelinks.in. Distribute gettextize.in instead. + (install-src): Install gettextize in selected binary directory. + + * gettextize.in: Initial revision + +1995-08-10 22:18 Ulrich Drepper <drepper@myware> + + * gettext-sh: Fix typos. Reported by Franc,ois Pinard. + (TEXTDOMAIN): Set value from ${PACKAGE-NAME} variable and document it. + +1995-08-08 21:45 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Add locale.alias. + +1995-08-07 23:48 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): gettext.perl moved from intl/. + gettext-sh: New file. + + * gettext-sh: Initial revision. + + * elisp-comp: + Use `rm -fr $tempdir' instead of `rm -f $tempdir/*; rmdir $tempdir' + because some NFS implementation create .nfsxxx files which are + not caught be the *. Reported by Paul Nevai. + +1995-08-04 22:38 Ulrich Drepper <drepper@myware> + + * Makefile.in (.el.elc): + Include Franc,ois' wonderful pun to highlight warning text. + + * Makefile.in (distclean): Remove makelinks. + + * Makefile.in (dist): Remove `copying instead' message. + +1995-08-02 19:44 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): makelinks.in instead of makelinks-sh. + + * makelinks.in: First try making symbolic links. + Rename to makelinks.in because it will be configure by + config.status. + +1995-08-01 15:54 Ulrich Drepper <drepper@myware> + + * po-mode.el: Fixes to run on DEMACS. + Provided by Franc,ois Pinard. + + * Makefile.in (check): Make same as all. + +1995-08-01 10:32 Ulrich Drepper <drepper@myware> + + * makelinks-sh: Implement option handling. + When intl/ subdir exist give warning and exit unless option -f + is given. + Use ${echo} in place where translations will be necessary. + +1995-07-26 01:24 Ulrich Drepper <drepper@myware> + + * makelinks-sh: Update for correct intl_files list. + Handle existing directories. + Handle non-existing ln and/or ln -s. + Mostly by Franc,ois Pinard. + +1995-07-22 01:14 Ulrich Drepper <drepper@myware> + + * Makefile.in (prefix,datadir,lispdir): New definitions. + (SITELISPDIR): Remove variable. + (all): Now build *.elc files. + (install,uninstall): Specify complete path of files to delete. + +1995-07-20 00:03 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): elisp-comp was missing. + +1995-07-18 23:53 Ulrich Drepper <drepper@myware> + + * po-mode.el: Latest version by Franc,ois. This version allows + scanning C source code for translatable strings and interactive + construction of the .po file. The string matching heuristic is + due to Richard Stallman. + +1995-07-18 01:32 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Add magic.add. Comes from ../. + + * po-mode.el, makelinks, combine-sh: Moved to here from ../intl/. + magic.add: Moved to here from ../. + + * Makefile.in: Initial revision diff --git a/debian/gettext-kde/gettext-kde-0.10.35/misc/Makefile.am b/debian/gettext-kde/gettext-kde-0.10.35/misc/Makefile.am new file mode 100644 index 00000000..aaf822dc --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/misc/Makefile.am @@ -0,0 +1,31 @@ +## Makefile for the misc subdirectory of the GNU NLS Utilities +## Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, 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. + +## Process this file with automake to produce Makefile.in. + +AUTOMAKE_OPTIONS = 1.2 gnits + +localedir = $(datadir)/locale + +EXTRA_DIST = combine-sh gettext.perl gettext-sh magic.add tcl_gettext.c \ +README-Tcl po-mode.el locale.alias +DISTCLEANFILES = gettextize +lisp_LISP = po-mode.el + +bin_SCRIPTS = gettextize + +locale_DATA = locale.alias diff --git a/debian/gettext-kde/gettext-kde-0.10.35/misc/Makefile.in b/debian/gettext-kde/gettext-kde-0.10.35/misc/Makefile.in new file mode 100644 index 00000000..90955b2a --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/misc/Makefile.in @@ -0,0 +1,288 @@ +# Makefile.in generated automatically by automake 1.3 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +ACLOCAL_VERSION = @ACLOCAL_VERSION@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +DATADIRNAME = @DATADIRNAME@ +EMACS = @EMACS@ +GENCAT = @GENCAT@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GT_NO = @GT_NO@ +GT_YES = @GT_YES@ +INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ +INSTOBJEXT = @INSTOBJEXT@ +INTLDEPS = @INTLDEPS@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +LD = @LD@ +LIBOBJS = @LIBOBJS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +NM = @NM@ +PACKAGE = @PACKAGE@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +YACC = @YACC@ +aclocaldir = @aclocaldir@ +l = @l@ +lispdir = @lispdir@ + +AUTOMAKE_OPTIONS = 1.2 gnits + +localedir = $(datadir)/locale + +EXTRA_DIST = combine-sh gettext.perl gettext-sh magic.add tcl_gettext.c \ +README-Tcl po-mode.el locale.alias +DISTCLEANFILES = gettextize +lisp_LISP = po-mode.el + +bin_SCRIPTS = gettextize + +locale_DATA = locale.alias +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = gettextize +SCRIPTS = $(bin_SCRIPTS) + +LISP = $(lisp_LISP) + +ELCFILES = po-mode.elc +DATA = $(locale_DATA) + +DIST_COMMON = ChangeLog Makefile.am Makefile.in elisp-comp \ +gettextize.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP = --best +all: Makefile $(SCRIPTS) $(LISP) $(ELCFILES) $(DATA) + +.SUFFIXES: +.SUFFIXES: .el .elc +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnits --include-deps misc/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +gettextize: $(top_builddir)/config.status gettextize.in + cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= ./config.status + +install-binSCRIPTS: $(bin_SCRIPTS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_SCRIPTS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ + $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ + else if test -f $(srcdir)/$$p; then \ + echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ + $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ + else :; fi; fi; \ + done + +uninstall-binSCRIPTS: + @$(NORMAL_UNINSTALL) + list='$(bin_SCRIPTS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ + done + +install-lispLISP: $(lisp_LISP) $(ELCFILES) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(lispdir) + @list='$(lisp_LISP)'; for p in $$list; do \ + if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ + echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(lispdir)/$$p"; \ + $(INSTALL_DATA) $$d$$p $(DESTDIR)$(lispdir)/$$p; \ + if test -f $${p}c; then \ + echo " $(INSTALL_DATA) $${p}c $(DESTDIR)$(lispdir)/$${p}c"; \ + $(INSTALL_DATA) $${p}c $(DESTDIR)$(lispdir)/$${p}c; \ + else : ; fi; \ + done + +uninstall-lispLISP: + @$(NORMAL_UNINSTALL) + list='$(lisp_LISP)'; for p in $$list; do \ + rm -f $(lispdir)/$$p $(DESTDIR)$(lispdir)/$${p}c; \ + done +.el.elc: + @echo 'WARNING: Warnings can be ignored. :-)' + if test $(EMACS) != no; then \ + EMACS=$(EMACS) $(SHELL) $(srcdir)/elisp-comp $<; \ + fi + +mostlyclean-lisp: + +clean-lisp: + -test -z "$(ELCFILES)" || rm -f $(ELCFILES) + +distclean-lisp: + +maintainer-clean-lisp: + +install-localeDATA: $(locale_DATA) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(localedir) + @list='$(locale_DATA)'; for p in $$list; do \ + if test -f $(srcdir)/$$p; then \ + echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(localedir)/$$p"; \ + $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(localedir)/$$p; \ + else if test -f $$p; then \ + echo " $(INSTALL_DATA) $$p $(DESTDIR)$(localedir)/$$p"; \ + $(INSTALL_DATA) $$p $(DESTDIR)$(localedir)/$$p; \ + fi; fi; \ + done + +uninstall-localeDATA: + @$(NORMAL_UNINSTALL) + list='$(locale_DATA)'; for p in $$list; do \ + rm -f $(DESTDIR)$(localedir)/$$p; \ + done +tags: TAGS +TAGS: + + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = misc + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done +info: +dvi: +check: all + $(MAKE) +installcheck: +install-exec: install-binSCRIPTS + @$(NORMAL_INSTALL) + +install-data: install-lispLISP install-localeDATA + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: uninstall-binSCRIPTS uninstall-lispLISP uninstall-localeDATA + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + $(mkinstalldirs) $(DATADIR)$(bindir) $(DATADIR)$(lispdir) \ + $(DATADIR)$(localedir) + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-lisp mostlyclean-generic + +clean: clean-lisp clean-generic mostlyclean + +distclean: distclean-lisp distclean-generic clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-lisp maintainer-clean-generic \ + distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: uninstall-binSCRIPTS install-binSCRIPTS uninstall-lispLISP \ +install-lispLISP mostlyclean-lisp distclean-lisp clean-lisp \ +maintainer-clean-lisp uninstall-localeDATA install-localeDATA tags \ +distdir info dvi installcheck install-exec install-data install \ +uninstall all installdirs mostlyclean-generic distclean-generic \ +clean-generic maintainer-clean-generic clean mostlyclean distclean \ +maintainer-clean + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/misc/README-Tcl b/debian/gettext-kde/gettext-kde-0.10.35/misc/README-Tcl new file mode 100644 index 00000000..7b9f6f95 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/misc/README-Tcl @@ -0,0 +1,52 @@ + Gettext support for Tcl + ======================= + +The file `tcl_gettext.c' contains the first attempt to provide an +interface for Tcl. I know that TclX already supports `catgets', but +because GNU uses `gettext' and because I think `gettext' is the better +concept I wrote this file. + + +Unlike many other interpreter extension I haven't provided a +`tclAppInit.c' file. I have three reason: it's easy to write (see +Ousterhout's book), It will probably combined with other extensions +and so would be more or less useless. But the most important reason +is that I don't find Tcl useful without the dynamic loading introduced +in version 7.5. + +The way I think you should use this module is to build a dynamic +object and load it at runtime with the command `load'. The following +transcript shows the way I work on my Linux/ELF box. Consult other +Tcl modules or a local wizard to see how it works for your system. + + +1. Compile the file to position independent object code: + + gcc -fPIC -O3 -c tcl_gettext.c + + (The file `tcl.h' from tcl7.5 or up and `libintl.h' as installed + from GNU gettext must be found in the path.) + +2. Link the file to a shared object: + + gcc -shared -o gettext.so tcl_gettext.o -lintl + + (The system's or GNU gettext libintl.a must be found in the path + of the linker.) + +3. Now we are ready to run: + +bash> tclsh7.5 +% load ./gettext.so Gettext +% textdomain "xxx" +% gettext "some string" +The translated form +% exit +bash> + + +If you have some ideas how to improve this or you found a bug, please +let me know. + +Ulrich Drepper <[email protected]>, 18. December 1995. + diff --git a/debian/gettext-kde/gettext-kde-0.10.35/misc/combine-sh b/debian/gettext-kde/gettext-kde-0.10.35/misc/combine-sh new file mode 100755 index 00000000..b26fb4fa --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/misc/combine-sh @@ -0,0 +1,141 @@ +#!/bin/sh + +TMPDIR=/tmp +TMPNAME=/tmp/combine1.$$.sed + +trap 'rm -fr $TMPNAME combine; exit 1' 1 2 15 + +rm -f $TMPNAME +cat > $TMPNAME <<EOF +/@@ end of prolog @@/,/@@ begin of epilog @@/!d +/@@ end of prolog @@/ { + = + d +} +/@@ begin of epilog @@/d +EOF + + +rm -fr combine +mkdir combine +cat > combine/libintl.c <<EOF +/* Combined sources of GNU gettext library + Copyright (C) 1995 Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#define USE_COMBINED_HEADER 1 +#include "libintlP.h" + +#if HAVE_CATGETS + +#include <stdlib.h> + +#ifdef HAVE_LOCALE_H +# include <locale.h> +#endif + +#ifdef HAVE_NL_TYPES_H +# include <nl_types.h> +#endif + +EOF + +CATCFILES=cat-compat.c +GETCFILES="bindtextdom.c dcgettext.c dgettext.c finddomain.c gettext.c \ +loadmsgcat.c textdomain.c" + +for file in $CATCFILES; do + sed -f $TMPNAME < $file \ + | sed -e '1s/.*/#line & "'$file'"/' >> combine/libintl.c +done +cat >> combine/libintl.c <<EOF + +#else /* !HAVE_CATGETS */ + +#include <alloca.h> +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/stat.h> + +#ifdef HAVE_LOCALE_H +# include <locale.h> +#endif + +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif + +#ifdef HAVE_MMAP +# include <sys/mman.h> +#endif + +EOF +for file in $GETCFILES; do + sed -f $TMPNAME < $file \ + | sed -e '1s/.*/#line & "'$file'"/' >> combine/libintl.c +done +cat >> combine/libintl.c <<EOF +#endif /* HAVE_CATGETS */ +EOF + +cat > combine/libintlP.h <<EOF +/* Combined header files of GNU gettext library + Copyright (C) 1995 Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, 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. */ + +EOF + +PUBHEAD=libgettext.h +PRIVHEAD="gettext.h gettextP.h hash-string.h" + +for file in $PUBHEAD; do + sed -f $TMPNAME < $file \ + | sed -e '1s/.*/#line & "'$file'"/' >> combine/libintlP.h +done +cat >> combine/libintlP.h <<EOF + +#ifdef USE_COMBINED_HEADER +EOF +for file in $PRIVHEAD; do + sed -f $TMPNAME < $file \ + | sed -e '1s/.*/#line & "'$file'"/' >> combine/libintlP.h +done +cat >> combine/libintlP.h <<EOF +#endif /* USE_COMBINED_HEADER */ +EOF + + +rm -f $TMPNAME +exit 0 diff --git a/debian/gettext-kde/gettext-kde-0.10.35/misc/elisp-comp b/debian/gettext-kde/gettext-kde-0.10.35/misc/elisp-comp new file mode 100755 index 00000000..ddd15f65 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/misc/elisp-comp @@ -0,0 +1,42 @@ +#!/bin/sh +# Copyright (C) 1995, 1997 Free Software Foundation, Inc. +# Fran�ois Pinard <[email protected]>, 1995. +# +# 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, 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. + +# This script byte-compiles all `.el' files which are part of its +# arguments, using GNU Emacs, and put the resulting `.elc' files into +# the current directory, so disregarding the original directories used +# in `.el' arguments. +# +# This script manages in such a way that all Emacs LISP files to +# be compiled are made visible between themselves, in the event +# they require or load-library one another. + +if test $# = 0; then + echo 1>&2 "No files given to $0" +else + tempdir=elc.$$ + mkdir $tempdir + cp $* $tempdir + cd $tempdir + + echo "(setq load-path (cons nil load-path))" > script + ${EMACS-emacs} -batch -l script -f batch-byte-compile *.el + mv *.elc .. + + cd .. + rm -fr $tempdir +fi diff --git a/debian/gettext-kde/gettext-kde-0.10.35/misc/gettext-sh b/debian/gettext-kde/gettext-kde-0.10.35/misc/gettext-sh new file mode 100644 index 00000000..ee15babd --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/misc/gettext-sh @@ -0,0 +1,63 @@ +# Copyright (C) 1995 Free Software Foundation, Inc. +# Written by Ulrich Drepper <[email protected]>, August 1995 +# +# 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, 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. +# +# Shell script excerpt to be inserted in shell scripts which are intended +# to be internationalized using GNU gettext. +# +# Precondition: +# ${PACKAGE-IDENT} is the name of one program of the package which +# understands the --print-text-domain-dir option +# ${PACKAGE-NAME} is the name of the message domain the package uses +# ${PATH} should list all directories which should be searched +# for either `gettext' or ${PACKAGE-IDENT}. +# +# Postcondition: +# ${echo} command to use like Un*x echo command which translates +# its arguments when a translation is available. +# +save_IFS="${IFS}" +IFS="${IFS}:" +gettext_dir=FAILED +locale_dir=FAILED +for dir in ${PATH} +do + if test "${gettext_dir}" = "FAILED" && test -x ${dir}/gettext \ + && (${dir}/gettext --version >/dev/null 2>&1) + then + set `${dir}/gettext --version 2>&1` + if test "$3" = "GNU" + then + gettext_dir=${dir} + fi + fi + if test "${locale_dir}" = "FAILED" && test -x ${dir}/${PACKAGE-IDENT} \ + && (${dir}/${PACKAGE-IDENT} --print-text-domain-dir >/dev/null 2>&1) + then + locale_dir=`${dir}/${PACKAGE-IDENT} --print-text-domain-dir` + fi +done +IFS="${save_IFS}" +if test "${locale_dir}" = "FAILED" || test "${gettext_dir}" = "FAILED" +then + echo=echo +else + TEXTDOMAINDIR=${locale_dir} + export TEXTDOMAINDIR + TEXTDOMAIN=${PACKAGE-NAME} + export TEXTDOMAIN + echo="${gettext_dir}/gettext -s" +fi diff --git a/debian/gettext-kde/gettext-kde-0.10.35/misc/gettext.perl b/debian/gettext-kde/gettext-kde-0.10.35/misc/gettext.perl new file mode 100644 index 00000000..7bd1ee83 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/misc/gettext.perl @@ -0,0 +1,86 @@ +# Toying at an interface between Perl and GNU gettext .mo format. +# Copyright (C) 1995 Free Software Foundation, Inc. +# Fran�ois Pinard <[email protected]>, 1995. + +textdomain ("tar"); +print &_("Try \`%s --help\' for more information.\n"); +exit 0; + +## --------------------------------------------------------------- ## +## The `&textdomain (DOMAIN_NAME)' routine reads the given domain ## +## into an associative array %_, able to later translate strings. ## +## --------------------------------------------------------------- ## + +sub textdomain +{ + local ($language, $catalog, $domain, $buffer); + local ($reverse); + local ($magic, $revision, $nstrings, $orig_tab_offset, $trans_tab_offset); + local ($orig_length, $orig_pointer, $trans_length, $trans_pointer); + + %_ = (); + + $language = $ENV{"LANG"}; + return if ! $language; + $domain = $_[0]; + $catalog = "/usr/local/share/locale/$language/LC_MESSAGES/$domain.mo"; + + open (CATALOG, $catalog) || return; + sysread (CATALOG, $buffer, (stat CATALOG)[7]); + close CATALOG; + + $magic = unpack ("I", $buffer); + if (sprintf ("%x", $magic) eq "de120495") + { + $reverse = 1; + } + elsif (sprintf ("%x", $magic) ne "950412de") + { + die "Not a catalog file\n"; + } + + $revision = &mo_format_value (4); + $nstrings = &mo_format_value (8); + $orig_tab_offset = &mo_format_value (12); + $trans_tab_offset = &mo_format_value (16); + + while ($nstrings-- > 0) + { + $orig_length = &mo_format_value ($orig_tab_offset); + $orig_pointer = &mo_format_value ($orig_tab_offset + 4); + $orig_tab_offset += 8; + + $trans_length = &mo_format_value ($trans_tab_offset); + $trans_pointer = &mo_format_value ($trans_tab_offset + 4); + $trans_tab_offset += 8; + + $_{substr ($buffer, $orig_pointer, $orig_length)} + = substr ($buffer, $trans_pointer, $trans_length); + } +} + +## ----------------------------------------------------------------- ## +## The `&mo_format_value (ADDRESS)' routine returns the value at a ## +## given address in the .mo format catalog, once read into $buffer ## +## by `&textdomain'. This is a service routine of `&textdomain', ## +## which uses $buffer and $reverse variables local in that routine. ## +## ----------------------------------------------------------------- ## + +sub mo_format_value +{ + unpack ("i", + $reverse + ? pack ("c4", reverse unpack ("c4", substr ($buffer, $_[0], 4))) + : substr ($buffer, $_[0], 4)); +} + +## ------------------------------------------------------------ ## +## The `&_(STRING)' routine translates STRING if there is some ## +## translation offered for it in the `%_' associative array, or ## +## return STRING itself, otherwize. ## +## ------------------------------------------------------------ ## + +sub _ +{ + defined $_{$_[0]} ? $_{$_[0]} : $_[0]; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/misc/gettextize.in b/debian/gettext-kde/gettext-kde-0.10.35/misc/gettextize.in new file mode 100644 index 00000000..0803ef31 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/misc/gettextize.in @@ -0,0 +1,238 @@ +#! /bin/sh +# +# Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, 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. +# + +# This file is meant for authors or maintainers which want to +# internationalize their package with the help of GNU gettext. For +# further information how to use it consult the GNU gettext manual. + +echo=echo +progname=$0 +force=0 +configstatus=0 +origdir=`pwd` +usage="\ +Usage: gettextize [OPTION]... [package-dir] + --help print this help and exit + --version print version information and exit + -c, --copy copy files instead of making symlinks + -f, --force force writing of new files even if old exist +Report bugs to <[email protected]>." +package=@PACKAGE@ +version=@VERSION@ +aclocal_version=@ACLOCAL_VERSION@ +try_ln_s=: + +while test $# -gt 0; do + case "$1" in + -c | --copy | --c* ) + shift + try_ln_s=false ;; + -f | --force | --f* ) + shift + force=1 ;; + -r | --run | --r* ) + shift + configstatus=1 ;; + --help | --h* ) + $echo "$usage"; exit 0 ;; + --version | --v* ) + echo "$progname (GNU $package) $version" + $echo "Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + $echo "Written by" "Ulrich Drepper" + exit 0 ;; + -- ) # Stop option prcessing + shift; break ;; + -* ) + $echo "gettextize: unknown option $1" + $echo "Try \`gettextize --help' for more information."; exit 1 ;; + * ) + break ;; + esac +done + +if test $# -gt 1; then + $echo "$usage" + exit 1 +fi + +# Fill in the command line options value. +if test $# -eq 1; then + srcdir=$1 + if cd $srcdir; then + srcdir=`pwd` + else + $echo "Cannot change directory to \`$srcdir'" + exit 1 + fi +else + srcdir=$origdir +fi + +# Directory where the sources are stored. +prefix=@prefix@ +gettext_dir=@datadir@/gettext +aclocal_dir=@aclocaldir@ + +test -f configure.in || { + $echo "Missing configure.in, please cd to your package first." + exit 1 +} + +if test -d intl && test $force -eq 0; then + $echo "\ +intl/ subdirectory exists: use option -f if you really want to delete it." + exit 1 +fi + +if test -f po/Makefile.in.in && test $force -eq 0; then + $echo "\ +po/Makefile.in.in exists: use option -f if you really want to delete it." + exit 1 +fi + +if test -f NLS && test $force -eq 0; then + $echo "NLS exists: use option -f if you really want to delete it." + exit 1 +fi + +rm -fr intl +mkdir intl || { + $echo "failed to create intl/ subdirectory" + exit 1; +} + +test -d po || mkdir po || { + $echo "failed to create po/ subdirectory" + exit 1 +} + +# For simplicity we changed to the gettext source directory. +cd $gettext_dir + +# Now copy all files. Take care for the destination directories. +for file in *; do + case $file in + intl | po | demo) + ;; + *) + rm -f $srcdir/$file + ($try_ln_s && ln -s $gettext_dir/$file $srcdir/$file) 2>/dev/null || + cp $file $srcdir/$file + ;; + esac +done + +# Copy files to intl/ subdirectory. +cd intl +for file in *; do + rm -f $srcdir/intl/$file + ($try_ln_s && ln -s $gettext_dir/intl/$file $srcdir/intl/$file) 2>/dev/null || + cp $file $srcdir/intl/$file +done + +# Copy files to po/ subdirectory. +cd ../po +for file in *; do + rm -f $srcdir/po/$file + ($try_ln_s && ln -s $gettext_dir/po/$file $srcdir/po/$file) 2>/dev/null || + cp $file $srcdir/po/$file +done + + +# Check whether we can run config.status to produce intl/Makefile.in. +cd $origdir +if test -f ./config.status; then + if test $configstatus -eq 0; then + echo "Shall I run config.status? (y/N)" + read ans + case "$ans" in + y* | Y* | 1* ) + configstatus=1 ;; + * ) + ;; + esac + fi + + test $configstatus -ne 0 && + (CONFIG_FILES=intl/Makefile CONFIG_HEADERS= ./config.status) +fi + +merge=no +OLD_IFS="$IFS" +IFS="." +cntr=0 +major=0; minor=0; subminor=0 +for num in $aclocal_version; do + case $cntr in + 0) major=$num;; + 1) minor=$num;; + 2) subminor=$num;; + esac + cntr=`expr $cntr + 1` +done +IFS="$OLD_IFS" + +set `sed -e 's/.*Last updated for gettext-\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]\)*.*/\1 \2 \3/p' -e d aclocal.m4` >/dev/null + + +if test $# -lt 2 || test $# -gt 3; then + merge=yes +else + here_major=$1; here_minor=$2 + if test $# -eq 2; then + here_subminor=0 + else + here_subminor=$3 + fi + + if test $major -eq $here_major; then + if test $minor -eq $here_minor; then + if test $subminor -lt $here_subminor; then + merge=gettext + elif test $subminor -gt $here_subminor; then + merge=yes + fi + else + if test $minor -lt $here_minor; then + merge=gettext + else + merge=yes + fi + fi + else + if test $major -lt $here_major; then + merge=gettext + else + merge=yes + fi + fi +fi + +if test "$merge" = "yes"; then + $echo "You should update your own \`aclocal.m4' by adding the necessary" + $echo "macro packages gettext.m4, lcmessage.m4 and progtest.m4 from" + $echo "the directory \`$aclocal_dir'" +elif test "$merge" = "gettext"; then + $echo "Your \`aclocal.m4' file is newer than the installed gettext" + $echo "program. Consider upgrading to a recent GNU gettext version." +fi + +exit 0 diff --git a/debian/gettext-kde/gettext-kde-0.10.35/misc/locale.alias b/debian/gettext-kde/gettext-kde-0.10.35/misc/locale.alias new file mode 100644 index 00000000..c3666fc0 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/misc/locale.alias @@ -0,0 +1,52 @@ +# Locale name alias data base +# Copyright (C) 1995 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, 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. + +# The format of this file is the same as for the corresponding file of +# the X Window System, which normally can be found in +# /usr/lib/X11/locale/locale.alias +# A single line contains two fields: an alias and a substitution value. +# All entries are case independent. + +# Note: This file is far from being complete. If you have a value for +# your own site which you think might be useful for others too, share it +# with the rest of us. Send it to [email protected]. + +czech cs_CZ.ISO-8859-2 +danish da_DK.ISO-8859-1 +dansk da_DK.ISO-8859-1 +deutsch de_DE.ISO-8859-1 +dutch nl_NL.ISO-8859-1 +finnish fi_FI.ISO-8859-1 +fran�ais fr_FR.ISO-8859-1 +french fr_FR.ISO-8859-1 +german de_DE.ISO-8859-1 +greek el_GR.ISO-8859-7 +hebrew iw_IL.ISO-8859-8 +hungarian hu_HU.ISO-8859-2 +icelandic is_IS.ISO-8859-1 +italian it_CH.ISO-8859-1 +japanese ja_JP.EUC +norwegian no_NO.ISO-8859-1 +polish pl_PL.ISO-8859-2 +portuguese pt_PT.ISO-8859-1 +rumanian ro_RO.ISO-8859-2 +russian ru_SU.ISO-8859-5 +slovak sk_SK.ISO-8859-2 +slovene sl_CS.ISO-8859-2 +spanish es_ES.ISO-8859-1 +swedish sv_SE.ISO-8859-1 +turkish tr_TR.ISO-8859-9 diff --git a/debian/gettext-kde/gettext-kde-0.10.35/misc/magic.add b/debian/gettext-kde/gettext-kde-0.10.35/misc/magic.add new file mode 100644 index 00000000..85af5670 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/misc/magic.add @@ -0,0 +1,9 @@ +# +# GNU nlsutils message catalog file format +# +0 string \336\22\4\225 GNU message catalog (little endian), +>4 lelong x revision %d, +>8 lelong x %d messages +0 string \225\4\22\336 GNU message catalog (big endian), +>4 belong x revision %d, +>8 belong x %d messages diff --git a/debian/gettext-kde/gettext-kde-0.10.35/misc/po-mode.el b/debian/gettext-kde/gettext-kde-0.10.35/misc/po-mode.el new file mode 100644 index 00000000..38fbba7e --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/misc/po-mode.el @@ -0,0 +1,2599 @@ +;;; po-mode.el -- for helping GNU gettext lovers to edit PO files. +;;; Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +;;; Fran�ois Pinard <[email protected]>, 1995. +;;; Helped by Greg McGary <[email protected]>. + +;; This file is part of GNU gettext. + +;; GNU gettext 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, or (at your option) +;; any later version. + +;; GNU gettext 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 GNU Emacs; see the file COPYING. If not, write to the +;; Free Software Foundation, 59 Temple Place - Suite 330, Boston, +;; MA 02111-1307, USA. + +;;; This package provides the tools meant to help editing PO files, +;;; as documented in the GNU gettext user's manual. See this manual +;;; for user documentation, which is not repeated here. + +;;; To install, merely put this file somewhere GNU Emacs will find it, +;;; then add the following lines to your .emacs file: +;;; +;;; (autoload 'po-mode "po-mode") +;;; (setq auto-mode-alist (cons '("\\.po[tx]?\\'\\|\\.po\\." . po-mode) +;;; auto-mode-alist)) +;;; +;;; To automatically use proper fonts under Emacs 20, also add: +;;; +;;; (autoload 'po-find-file-coding-system "po-mode") +;;; (modify-coding-system-alist 'file "\\.po[tx]?\\'\\|\\.po\\." +;;; 'po-find-file-coding-system) +;;; +;;; You may also adjust some variables, below, by defining them in your +;;; `.emacs' file, either directly or through command `M-x customize'. + +;;; Emacs portability matters. + +;;; Most portability matters are addressed in this page. All other cases +;;; involve one of `eval-and-compile' or `fboundp', just search for these. + +;; Identify which Emacs variety is being used. +(eval-and-compile + (cond ((string-match "Lucid\\|XEmacs" emacs-version) + (setq po-EMACS20 nil po-XEMACS t)) + ((and (string-lessp "19" emacs-version) (featurep 'faces)) + (setq po-EMACS20 t po-XEMACS nil)) + (t (setq po-EMACS20 nil po-XEMACS nil)))) + +;; Experiment with Emacs LISP message internationalisation. +(eval-and-compile + (or (fboundp 'set-translation-domain) + (defsubst set-translation-domain (string) nil)) + (or (fboundp 'translate-string) + (defsubst translate-string (string) string))) +(defsubst _ (string) (translate-string string)) +(defsubst N_ (string) string) + +;; Handle missing `customs' package. +(eval-and-compile + (condition-case () + (require 'custom) + (error nil)) + (if (and (featurep 'custom) (fboundp 'custom-declare-variable)) + nil + (defmacro defgroup (&rest args) + nil) + (defmacro defcustom (var value doc &rest args) + (` (defvar (, var) (, value) (, doc)))))) + +;; Protect string comparisons from text properties. +(eval-and-compile + (fset 'po-buffer-substring + (symbol-function (if (fboundp 'buffer-substring-no-properties) + 'buffer-substring-no-properties + 'buffer-substring)))) + +;; Handle missing `with-temp-buffer' function. +(eval-and-compile + (if nil ; FIXME: just testing... (fboundp 'with-temp-buffer) + + (fset 'po-with-temp-buffer (symbol-function 'with-temp-buffer)) + + (defmacro po-with-temp-buffer (&rest forms) + "Create a temporary buffer, and evaluate FORMS there like `progn'." + (let ((curr-buffer (make-symbol "curr-buffer")) + (temp-buffer (make-symbol "temp-buffer"))) + `(let ((,curr-buffer (current-buffer)) + (,temp-buffer (get-buffer-create + (generate-new-buffer-name " *po-temp*")))) + (unwind-protect + (progn + (set-buffer ,temp-buffer) + ,@forms) + (set-buffer ,curr-buffer) + (and (buffer-name ,temp-buffer) + (kill-buffer ,temp-buffer)))))))) + +;; Handle missing `kill-new' function. +(eval-and-compile + (if (fboundp 'kill-new) + + (fset 'po-kill-new (symbol-function 'kill-new)) + + (defun po-kill-new (string) + "Push STRING onto the kill ring, for Emacs 18 where kill-new is missing." + (po-with-temp-buffer + (insert string) + (kill-region (point-min) (point-max)))))) + +;; Handle missing `read-event' function. +(eval-and-compile + (fset 'po-read-event + (cond ((fboundp 'read-event) + ;; GNU Emacs. + 'read-event) + ((fboundp 'next-command-event) + ;; XEmacs. + 'next-command-event) + (t + ;; Older Emacses. + 'read-char)))) + +;; Handle missing `force-mode-line-update' function. +(eval-and-compile + (if (fboundp 'force-mode-line-update) + + (fset 'po-force-mode-line-update + (symbol-function 'force-mode-line-update)) + + (defun po-force-mode-line-update () + "Force the mode-line of the current buffer to be redisplayed." + (set-buffer-modified-p (buffer-modified-p))))) + +;; Handle portable highlighting. Code has been adapted (OK... stolen! :-) +;; from `ispell.el'. +(eval-and-compile + (cond + (po-EMACS20 + + (defun po-create-overlay () + "Create and return a deleted overlay structure. +The variable `po-highlight-face' selects the face to use for highlighting." + (let ((overlay (make-overlay (point) (point)))) + (overlay-put overlay 'face po-highlight-face) + ;; The fun thing is that a deleted overlay retains its face, and is + ;; movable. + (delete-overlay overlay) + overlay)) + + (defun po-highlight (overlay start end &optional buffer) + "Use OVERLAY to highlight the string from START to END. +If limits are not relative to the current buffer, use optional BUFFER." + (move-overlay overlay start end (or buffer (current-buffer)))) + + (defun po-rehighlight (overlay) + "Ensure OVERLAY is highlighted." + ;; There is nothing to do, as GNU Emacs allows multiple highlights. + nil) + + (defun po-dehighlight (overlay) + "Display normally the last string which OVERLAY highlighted. +The current buffer should be in PO mode, when this function is called." + (delete-overlay overlay))) + + (po-XEMACS + + (defun po-create-overlay () + "Create and return a deleted overlay structure." + (cons (make-marker) (make-marker))) + + (defun po-highlight (overlay start end &optional buffer) + "Use OVERLAY to highlight the string from START to END. +If limits are not relative to the current buffer, use optional BUFFER." + (if buffer + (save-excursion + (set-buffer buffer) + (isearch-highlight start end)) + (isearch-highlight start end)) + (set-marker (car overlay) start (or buffer (current-buffer))) + (set-marker (cdr overlay) end (or buffer (current-buffer)))) + + (defun po-rehighlight (overlay) + "Ensure OVERLAY is highlighted." + (let ((buffer (marker-buffer (car overlay))) + (start (marker-position (car overlay))) + (end (marker-position (cdr overlay)))) + (and buffer + (name-buffer buffer) + (po-highlight overlay start end buffer)))) + + (defun po-dehighlight (overlay) + "Display normally the last string which OVERLAY highlighted." + (isearch-dehighlight t) + (setcar overlay (make-marker)) + (setcdr overlay (make-marker)))) + + (t + + (defun po-create-overlay () + "Create and return a deleted overlay structure." + (cons (make-marker) (make-marker))) + + (defun po-highlight (overlay start end &optional buffer) + "Use OVERLAY to highlight the string from START to END. +If limits are not relative to the current buffer, use optional BUFFER. +No doubt that highlighting, when Emacs does not allow it, is a kludge." + (save-excursion + (and buffer (set-buffer buffer)) + (let ((modified (buffer-modified-p)) + (buffer-read-only nil) + (inhibit-quit t) + (buffer-undo-list t) + (text (buffer-substring start end))) + (goto-char start) + (delete-region start end) + (insert-char ? (- end start)) + (sit-for 0) + (setq inverse-video (not inverse-video)) + (delete-region start end) + (insert text) + (sit-for 0) + (setq inverse-video (not inverse-video)) + (set-buffer-modified-p modified))) + (set-marker (car overlay) start (or buffer (current-buffer))) + (set-marker (cdr overlay) end (or buffer (current-buffer)))) + + (defun po-rehighlight (overlay) + "Ensure OVERLAY is highlighted." + (let ((buffer (marker-buffer (car overlay))) + (start (marker-position (car overlay))) + (end (marker-position (cdr overlay)))) + (and buffer + (name-buffer buffer) + (po-highlight overlay start end buffer)))) + + (defun po-dehighlight (overlay) + "Display normally the last string which OVERLAY highlighted." + (let ((buffer (marker-buffer (car overlay))) + (start (marker-position (car overlay))) + (end (marker-position (cdr overlay)))) + (if buffer + (save-excursion + (set-buffer buffer) + (let ((modified (buffer-modified-p)) + (buffer-read-only nil) + (inhibit-quit t) + (buffer-undo-list t)) + (let ((text (buffer-substring start end))) + (goto-char start) + (delete-region start end) + (insert-char ? (- end start)) + (sit-for 0) + (delete-region start end) + (insert text) + (sit-for 0) + (set-buffer-modified-p modified))))) + (setcar overlay (make-marker)) + (setcdr overlay (make-marker)))) + + ))) + +;;; Customisation. + +(defgroup po nil + "Major mode for editing PO files" + :group 'i18n) + +(defcustom po-auto-edit-with-msgid nil + "*Automatically use msgid when editing untranslated entries." + :type 'boolean + :group 'po) + +(defcustom po-auto-fuzzy-on-edit nil + "*Automatically mark entries fuzzy when being edited." + :type 'boolean + :group 'po) + +(defcustom po-auto-select-on-unfuzzy nil + "*Automatically select some new entry while making an entry not fuzzy." + :type 'boolean + :group 'po) + +(defcustom po-auto-replace-revision-date 'ask + "*Automatically revise date in headers. Value is nil, t, or ask." + :type '(choice (const nil) + (const t) + (const ask)) + :group 'po) + +(defcustom po-default-file-header "\ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid \"\" +msgstr \"\" +\"Project-Id-Version: PACKAGE VERSION\\n\" +\"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\\n\" +\"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n\" +\"Language-Team: LANGUAGE <[email protected]>\\n\" +\"MIME-Version: 1.0\\n\" +\"Content-Type: text/plain; charset=CHARSET\\n\" +\"Content-Transfer-Encoding: ENCODING\\n\" +" + "*Default PO file header." + :type 'string + :group 'po) + +(defcustom po-highlighting (or po-EMACS20 po-XEMACS) + "*Highlight text whenever appropriate, when non-nil. However, on older +Emacses, a yet unexplained highlighting bug causes files to get mangled." + :type 'boolean + :group 'po) + +(defcustom po-highlight-face 'highlight + "*The face used for PO mode highlighting. For Emacses with overlays. +Possible values are `highlight', `modeline', `secondary-selection', +`region', and `underline'. +This variable can be set by the user to whatever face they desire. +It's most convenient if the cursor color and highlight color are +slightly different." + :type 'face + :group 'po) + +(defcustom po-gzip-uuencode-command "gzip -9 | uuencode -m" + "*The filter to use for preparing a mail invoice of the PO file. +Normally \"gzip -9 | uuencode -m\", remove the -9 for lesser compression, +or remove the -m if you are not using the GNU version of `uuencode'." + :type 'string + :group 'po) + +;;; The following block of declarations has the main purpose of avoiding +;;; byte compiler warnings. It also introduces some documentation for +;;; each of these variables, all meant to be local to PO mode buffers. + +;; Flag telling that MODE-LINE-STRING should be displayed. See `Window' +;; page below. Exceptionally, this variable is local to *all* buffers. + +(defvar po-mode-flag) + +;; PO buffers are kept read-only to prevent random modifications. READ-ONLY +;; holds the value of the read-only flag before PO mode was entered. + +(defvar po-read-only) + +;; The current entry extends from START-OF-ENTRY to END-OF-ENTRY, it +;; includes preceding whitespace and excludes following whitespace. The +;; start of keyword lines are START-OF-MSGID and START-OF-MSGSTR. +;; ENTRY-TYPE classifies the entry. + +(defvar po-start-of-entry) +(defvar po-start-of-msgid) +(defvar po-start-of-msgstr) +(defvar po-end-of-entry) +(defvar po-entry-type) + +;; A few counters are usefully shown in the Emacs mode line. + +(defvar po-translated-counter) +(defvar po-fuzzy-counter) +(defvar po-untranslated-counter) +(defvar po-obsolete-counter) +(defvar po-mode-line-string) + +;; PO mode keeps track of fields being edited, for one given field should +;; have one editing buffer at most, and for exiting a PO buffer properly +;; should offer to close all pending edits. Variable EDITED-FIELDS holds an +;; an list of "slots" of the form: (ENTRY-MARKER EDIT-BUFFER OVERLAY-INFO). +;; To allow simultaneous edition of the comment and the msgstr of an entry, +;; ENTRY-MARKER points to the msgid line if a comment is being edited, or to +;; the msgstr line if the msgstr is being edited. EDIT-BUFFER is the +;; temporary Emacs buffer used to edit the string. OVERLAY-INFO, when not +;; nil, holds an overlay (or if overlays are not supported, a cons of two +;; markers) for this msgid string which became highlighted for the edit. + +(defvar po-edited-fields) + +;; We maintain a set of movable pointers for returning to entries. + +(defvar po-marker-stack) + +;; SEARCH path contains a list of directories where files may be found, +;; in a format suitable for read completion. Each directory includes +;; its trailing slash. PO mode starts with "./" and "../". + +(defvar po-search-path) + +;; The following variables are meaningful only when REFERENCE-CHECK +;; is identical to START-OF-ENTRY, else they should be recomputed. +;; REFERENCE-ALIST contains all known references for the current +;; entry, each list element is (PROMPT FILE LINE), where PROMPT may +;; be used for completing read, FILE is a string and LINE is a number. +;; REFERENCE-CURSOR is a cycling cursor into REFERENCE-ALIST. + +(defvar po-reference-alist) +(defvar po-reference-cursor) +(defvar po-reference-check) + +;; The following variables are for marking translatable strings in program +;; sources. KEYWORDS is the list of keywords for marking translatable +;; strings, kept in a format suitable for reading with completion. +;; NEXT-FILE-LIST is the list of source files to visit, gotten from the tags +;; table. STRING-START is the position for the beginning of the last found +;; string, or nil if the string is invalidated. STRING-END is the position +;; for the end of the string and indicates where the search should be +;; resumed, or nil for the beginning of the current file. MARKING-OVERLAY, +;; if not `nil', holds the overlay which highlight the last found string; +;; for older Emacses, it holds the cons of two markers around the +;; highlighted region. + +(defvar po-keywords) +(defvar po-next-file-list) +(defvar po-string-start) +(defvar po-string-end) +(defvar po-marking-overlay) + +;;; PO mode variables and constants (usually not to customize). + +;; The textdomain should really be "gettext", only trying it for now. +;; All this requires more thinking, we cannot just do this like that. +(set-translation-domain "po-mode") + +(defun po-mode-version () + "Show Emacs PO mode version." + (interactive) + (message (_"Emacs PO mode, version %s") (substring "$Revision: 1.42 $" 11 -2))) + +(defconst po-help-display-string + (_"\ +PO Mode Summary Next Previous Miscellaneous +*: Later, /: Docum n p Any type . Redisplay + /t /M-t Translated /v Version info +Moving around f M-f Fuzzy ?, h This help +< First if any o M-o Obsolete = Current index +> Last if any u M-u Untranslated O Other window +/SPC Auto select V Validate + Msgstr Comments M Mail officially +Modifying entries RET # Call editor U Undo +TAB Remove fuzzy mark k K Kill to E Edit out full +/DEL Fuzzy or fade out w W Copy to Q Forceful quit +LFD Init with msgid y Y Yank from q Confirm and quit + +gettext Keyword Marking Position Stack +, Find next string Compendiums m Mark and push current +M-, Mark translatable *c To compendium r Pop and return +M-. Change mark, mark *M-C Select, save x Exchange current/top + +Program Sources Auxiliary Files Lexicography +s Cycle reference a Cycle file *l Lookup translation +M-s Select reference M-a Select file *M-l Add/edit translation +S Consider path A Consider PO file *L Consider lexicon +M-S Ignore path M-A Ignore PO file *M-L Ignore lexicon +") + "Help page for PO mode.") + +(defconst po-mode-menu-layout + '("PO" + ("Moving around" + ["Auto select" po-auto-select-entry t] + "---" + "Forward" + ["Any next" po-next-entry t] + ["Next translated" po-next-translated-entry t] + ["Next fuzzy" po-next-fuzzy-entry t] + ["Next obsolete" po-next-obsolete-entry t] + ["Next untranslated" po-next-untranslated-entry t] + ["Last file entry" po-last-entry t] + "---" + "Backward" + ["Any previous" po-previous-entry t] + ["Previous translated" po-previous-translated-entry t] + ["Previous fuzzy" po-previous-fuzzy-entry t] + ["Previous obsolete" po-previous-obsolete-entry t] + ["Previous untranslated" po-previous-untranslated-entry t] + ["First file entry" po-first-entry t] + "---" + "Position stack" + ["Mark and push current" po-push-location t] + ["Pop and return" po-pop-location t] + ["Exchange current/top" po-exchange-location t] + "---" + ["Redisplay" po-current-entry t] + ["Current index" po-statistics t]) + ("Modifying entries" + ["Undo" po-undo t] + "---" + "Msgstr" + ["Edit msgstr" po-edit-msgstr t] + ["Kill msgstr" po-kill-msgstr t] + ["Save msgstr" po-kill-ring-save-msgstr t] + ["Yank msgstr" po-yank-msgstr t] + "---" + "Comments" + ["Edit comment" po-edit-comment t] + ["Kill comment" po-kill-comment t] + ["Save comment" po-kill-ring-save-comment t] + ["Yank comment" po-yank-comment t] + "---" + ["Remove fuzzy mark" po-unfuzzy t] + ["Fuzzy or fade out" po-fade-out-entry t] + ["Init with msgid" po-msgid-to-msgstr t]) + ("Other files" + ["Other window" po-other-window t] + "---" + "Program sources" + ["Cycle reference" po-cycle-source-reference t] + ["Select reference" po-select-source-reference t] + ["Consider path" po-consider-source-path t] + ["Ignore path" po-ignore-source-path t] + "---" + "Compendiums" + ["To compendium" po-save-entry nil] + ["Select, save" po-select-and-save-entry nil] + "---" + "Auxiliary files" + ["Cycle file" po-cycle-auxiliary nil] + ["Select file" po-select-auxiliary nil] + ["Consider file" po-consider-as-auxiliary nil] + ["Ignore file" po-ignore-as-auxiliary nil] + "---" + "Lexicography" + ["Lookup translation" po-lookup-lexicons nil] + ["Add/edit translation" po-edit-lexicon-entry nil] + ["Consider lexicon" po-consider-lexicon-file nil] + ["Ignore lexicon" po-ignore-lexicon-file nil]) + "---" + "Source marking" + ["Find first string" (po-tags-search '(nil)) t] + ["Prefer keyword" (po-select-mark-and-mark '(nil)) t] + ["Find next string" po-tags-search t] + ["Mark preferred" po-mark-translatable t] + ["Mark with keyword" po-select-mark-and-mark t] + "---" + ["Version info" po-mode-version t] + ["Help page" po-help t] + ["Validate" po-validate t] + ["Mail officially" po-send-mail t] + ["Edit out full" po-edit-out-full t] + "---" + ["Forceful quit" po-quit t] + ["Soft quit" po-confirm-and-quit t]) + "Menu layout for PO mode.") + +(defconst po-subedit-message + (_"Type `C-c C-c' once done, or `C-c C-k' to abort edit") + "Message to post in the minibuffer when an edit buffer is displayed.") + +(defconst po-content-type-charset-alist + '((euc . japanese-iso-8bit)) + "How to convert Content-Type into a Mule coding system.") + +(defvar po-auxiliary-list nil + "List of auxiliary PO files, in completing read format.") + +(defvar po-auxiliary-cursor nil + "Cursor into the `po-auxiliary-list'.") + +(defvar po-translation-project-address + "Electronic mail address of the Translation Project.") + +(defvar po-compose-mail-function + (let ((functions '(compose-mail-other-window + message-mail-other-window + compose-mail + message-mail)) + result) + (while (and (not result) functions) + (if (fboundp (car functions)) + (setq result (car functions)) + (setq functions (cdr functions)))) + (cond (result) + ((fboundp 'mail-other-window) + (function (lambda (to subject) + (mail-other-window nil to subject)))) + ((fboundp 'mail) + (function (lambda (to subject) + (mail nil to subject)))) + (t (function (lambda (to subject) + (error (_"I do not know how to mail to `%s'") to)))))) + "Function to start composing an electronic message.") + +(defvar po-any-msgid-regexp + "^\\(#~?[ \t]*\\)?msgid.*\n\\(\\(#~?[ \t]*\\)?\".*\n\\)*" + "Regexp matching a whole msgid field, whether obsolete or not.") + +(defvar po-any-msgstr-regexp + "^\\(#~?[ \t]*\\)?msgstr.*\n\\(\\(#~?[ \t]*\\)?\".*\n\\)*" + "Regexp matching a whole msgstr field, whether obsolete or not.") + +(defvar po-msgfmt-program "msgfmt" + "Path to msgfmt program from GNU gettext package.") + +;; Font lock based highlighting code. +(defconst po-font-lock-keywords + '( + ("^\\(msgid \\|msgstr \\)?\"\\|\"$" . font-lock-keyword-face) + ("\\\\.\\|%[-.0-9ul]*[a-zA-Z]" . font-lock-variable-name-face) + ("^# .*\\|^#[:,]?" . font-lock-comment-face) + ("^#:\\(.*\\)" 1 font-lock-reference-face) + ;; The following line does not work, and I wonder why. + ;;("^#,\\(.*\\)" 1 font-function-name-reference-face) + ) + "Additional expressions to highlight in PO mode.") + +;; Old activator for `font lock'. Is it still useful? I don't think so. +;; +;;(if (boundp 'font-lock-keywords) +;; (put 'po-mode 'font-lock-keywords 'po-font-lock-keywords)) + +;; `hilit19' based highlighting code has been disabled, as most probably +;; nobody really needs it (it also generates ugly byte-compiler warnings). +;; +;;(if (fboundp 'hilit-set-mode-patterns) +;; (hilit-set-mode-patterns 'po-mode +;; '(("^# .*\\|^#$" nil comment) +;; ("^#[.,:].*" nil include) +;; ("^\\(msgid\\|msgstr\\) *\"" nil keyword) +;; ("^\"\\|\"$" nil keyword)))) + +;;; Mode activation. + +(eval-and-compile + (if po-EMACS20 + + (defun po-find-file-coding-system (arg-list) + "Return a Mule (DECODING . ENCODING) pair, according to PO file charset. +Called through file-coding-system-alist, before the file is visited for real." + (and (eq (car arg-list) 'insert-file-contents) + (with-temp-buffer + (let ((coding-system-for-read 'no-conversion)) + ;; Is 4096 enough? FIXME: See archives to decide! Some + ;; translators insert looong comments for the header entry. + (insert-file-contents (nth 1 arg-list) nil 0 4096) + (if (re-search-forward + "^\"Content-Type: text/plain;[ \t]*charset=\\([^\\]+\\)" + nil t) + (let* ((charset (intern (downcase (buffer-substring + (match-beginning 1) + (match-end 1))))) + (slot (assq charset + po-content-type-charset-alist))) + (list (cond (slot (cdr slot)) + ((memq charset (coding-system-list)) charset) + (t 'no-conversion)))) + '(no-conversion)))))) + + )) + +(defvar po-mode-map nil + "Keymap for PO mode.") +(if po-mode-map + () + ;; The following line because (make-sparse-keymap) does not work on Demacs. + (setq po-mode-map (make-keymap)) + (suppress-keymap po-mode-map) + (define-key po-mode-map "\C-i" 'po-unfuzzy) + (define-key po-mode-map "\C-j" 'po-msgid-to-msgstr) + (define-key po-mode-map "\C-m" 'po-edit-msgstr) + (define-key po-mode-map " " 'po-auto-select-entry) + (define-key po-mode-map "?" 'po-help) + (define-key po-mode-map "#" 'po-edit-comment) + (define-key po-mode-map "," 'po-tags-search) + (define-key po-mode-map "." 'po-current-entry) + (define-key po-mode-map "<" 'po-first-entry) + (define-key po-mode-map "=" 'po-statistics) + (define-key po-mode-map ">" 'po-last-entry) + (define-key po-mode-map "a" 'po-cycle-auxiliary) +;;;; (define-key po-mode-map "c" 'po-save-entry) + (define-key po-mode-map "f" 'po-next-fuzzy-entry) + (define-key po-mode-map "h" 'po-help) + (define-key po-mode-map "k" 'po-kill-msgstr) +;;;; (define-key po-mode-map "l" 'po-lookup-lexicons) + (define-key po-mode-map "m" 'po-push-location) + (define-key po-mode-map "n" 'po-next-entry) + (define-key po-mode-map "o" 'po-next-obsolete-entry) + (define-key po-mode-map "p" 'po-previous-entry) + (define-key po-mode-map "q" 'po-confirm-and-quit) + (define-key po-mode-map "r" 'po-pop-location) + (define-key po-mode-map "s" 'po-cycle-source-reference) + (define-key po-mode-map "t" 'po-next-translated-entry) + (define-key po-mode-map "u" 'po-next-untranslated-entry) + (define-key po-mode-map "v" 'po-mode-version) + (define-key po-mode-map "w" 'po-kill-ring-save-msgstr) + (define-key po-mode-map "x" 'po-exchange-location) + (define-key po-mode-map "y" 'po-yank-msgstr) + (define-key po-mode-map "A" 'po-consider-as-auxiliary) + (define-key po-mode-map "E" 'po-edit-out-full) + (define-key po-mode-map "K" 'po-kill-comment) +;;;; (define-key po-mode-map "L" 'po-consider-lexicon-file) + (define-key po-mode-map "M" 'po-send-mail) + (define-key po-mode-map "O" 'po-other-window) + (define-key po-mode-map "Q" 'po-quit) + (define-key po-mode-map "S" 'po-consider-source-path) + (define-key po-mode-map "U" 'po-undo) + (define-key po-mode-map "V" 'po-validate) + (define-key po-mode-map "W" 'po-kill-ring-save-comment) + (define-key po-mode-map "Y" 'po-yank-comment) + (define-key po-mode-map "\177" 'po-fade-out-entry) + (define-key po-mode-map "\M-," 'po-mark-translatable) + (define-key po-mode-map "\M-." 'po-select-mark-and-mark) + (define-key po-mode-map "\M-a" 'po-select-auxiliary) +;;;; (define-key po-mode-map "\M-c" 'po-select-and-save-entry) + (define-key po-mode-map "\M-f" 'po-previous-fuzzy-entry) +;;;; (define-key po-mode-map "\M-l" 'po-edit-lexicon-entry) + (define-key po-mode-map "\M-o" 'po-previous-obsolete-entry) + (define-key po-mode-map "\M-t" 'po-previous-translated-entry) + (define-key po-mode-map "\M-u" 'po-previous-untranslated-entry) + (define-key po-mode-map "\M-s" 'po-select-source-reference) + (define-key po-mode-map "\M-A" 'po-ignore-as-auxiliary) +;;;; (define-key po-mode-map "\M-L" 'po-ignore-lexicon-file) + (define-key po-mode-map "\M-S" 'po-ignore-source-path) + ) + +(defun po-mode () + "Major mode for translators when they edit PO files. +Special commands:\\{po-mode-map} +Turning on PO mode calls the value of the variable `po-mode-hook', +if that value is non-nil. Behaviour may be adjusted through some variables, +all reachable through `M-x customize', in group `Emacs.Editing.I18n.Po'." + + (interactive) + (kill-all-local-variables) + (setq major-mode 'po-mode + mode-name "PO") + (use-local-map po-mode-map) + (if (fboundp 'easy-menu-define) + (easy-menu-define po-mode-menu po-mode-map "" po-mode-menu-layout)) + (make-local-variable 'font-lock-defaults) + (setq font-lock-defaults '(po-font-lock-keywords t)) + + (make-local-variable 'po-read-only) + (setq po-read-only buffer-read-only + buffer-read-only t) + + (make-local-variable 'po-start-of-entry) + (make-local-variable 'po-start-of-msgid) + (make-local-variable 'po-start-of-msgstr) + (make-local-variable 'po-end-of-entry) + (make-local-variable 'po-entry-type) + + (make-local-variable 'po-translated-counter) + (make-local-variable 'po-fuzzy-counter) + (make-local-variable 'po-untranslated-counter) + (make-local-variable 'po-obsolete-counter) + (make-local-variable 'po-mode-line-string) + + (setq po-mode-flag t) + + (po-check-file-header) + (po-compute-counters nil) + + (make-local-variable 'po-edited-fields) + (setq po-edited-fields nil) + + (make-local-variable 'po-marker-stack) + (setq po-marker-stack nil) + + (make-local-variable 'po-search-path) + (setq po-search-path '(("./") ("../"))) + + (make-local-variable 'po-reference-alist) + (make-local-variable 'po-reference-cursor) + (make-local-variable 'po-reference-check) + (setq po-reference-alist nil + po-reference-cursor nil + po-reference-check 0) + + (make-local-variable 'po-keywords) + (make-local-variable 'po-next-file-list) + (make-local-variable 'po-string-start) + (make-local-variable 'po-string-end) + (make-local-variable 'po-marking-overlay) + (setq po-keywords '(("gettext") ("gettext_noop") ("_") ("N_")) + po-next-file-list nil + po-string-start nil + po-string-end nil + po-marking-overlay (po-create-overlay)) + + (message (_"You may type `h' or `?' for a short PO mode reminder.")) + (run-hooks 'po-mode-hook)) + +;;; Window management. + +(make-variable-buffer-local 'po-mode-flag) + +(defvar po-mode-line-entry '(po-mode-flag (" " po-mode-line-string)) + "Mode line format entry displaying MODE-LINE-STRING.") + +;; Insert MODE-LINE-ENTRY in mode line, but on first load only. +(or (member po-mode-line-entry mode-line-format) + (let ((entry (member 'global-mode-string mode-line-format))) + (setcdr entry (cons po-mode-line-entry (cdr entry))))) + +(defun po-update-mode-line-string () + "Compute a new statistics string to display in mode line." + (setq po-mode-line-string + (concat (format "%dt" po-translated-counter) + (if (> po-fuzzy-counter 0) + (format "+%df" po-fuzzy-counter)) + (if (> po-untranslated-counter 0) + (format "+%du" po-untranslated-counter)) + (if (> po-obsolete-counter 0) + (format "+%do" po-obsolete-counter)))) + (po-force-mode-line-update)) + +(defun po-type-counter () + "Return the symbol name of the counter appropriate for the current entry." + (cond ((eq po-entry-type 'obsolete) 'po-obsolete-counter) + ((eq po-entry-type 'fuzzy) 'po-fuzzy-counter) + ((eq po-entry-type 'translated) 'po-translated-counter) + ((eq po-entry-type 'untranslated) 'po-untranslated-counter) + (t (error (_"Unknown entry type"))))) + +(defun po-decrease-type-counter () + "Decrease the counter corresponding to the nature of the current entry." + (let ((counter (po-type-counter))) + (set counter (1- (eval counter))))) + +(defun po-increase-type-counter () + "Increase the counter corresponding to the nature of the current entry. +Then, update the mode line counters." + (let ((counter (po-type-counter))) + (set counter (1+ (eval counter)))) + (po-update-mode-line-string)) + +;; Avoid byte compiler warnings. +(defvar po-fuzzy-regexp) +(defvar po-untranslated-regexp) + +(defun po-compute-counters (flag) + "Prepare counters for mode line display. If FLAG, also echo entry position." + (and flag (po-find-span-of-entry)) + (setq po-translated-counter 0 + po-fuzzy-counter 0 + po-untranslated-counter 0 + po-obsolete-counter 0) + (let ((position 0) (total 0) here) + (save-excursion + (goto-char (point-min)) + (while (re-search-forward po-any-msgstr-regexp nil t) + (and (= (% total 20) 0) + (if flag + (message (_"Position %d/%d") position total) + (message (_"Position %d") total))) + (setq here (point)) + (goto-char (match-beginning 0)) + (setq total (1+ total)) + (and flag (eq (point) po-start-of-msgstr) (setq position total)) + (cond ((eq (following-char) ?#) + (setq po-obsolete-counter (1+ po-obsolete-counter))) + ((looking-at po-untranslated-regexp) + (setq po-untranslated-counter (1+ po-untranslated-counter))) + (t (setq po-translated-counter (1+ po-translated-counter)))) + (goto-char here)) + + ;; Make another pass just for the fuzzy entries, kind of kludgey. + ;; FIXME: Counts will be wrong if untranslated entries are fuzzy, yet + ;; this should not normally happen. + (goto-char (point-min)) + (while (re-search-forward po-fuzzy-regexp nil t) + (setq po-fuzzy-counter (1+ po-fuzzy-counter))) + (setq po-translated-counter (- po-translated-counter po-fuzzy-counter))) + + ;; Push the results out. + (if flag + (message (_"\ +Position %d/%d; %d translated, %d fuzzy, %d untranslated, %d obsolete") + position total po-translated-counter po-fuzzy-counter + po-untranslated-counter po-obsolete-counter) + (message ""))) + (po-update-mode-line-string)) + +(defun po-redisplay () + "Redisplay the current entry." + ;; FIXME: Should try to fit the whole entry on the window. If this is not + ;; possible, should try to fit the comment and the msgid. Otherwise, + ;; should try to fit the msgid. Else, the first line of the msgid should + ;; be at the top of the window. + (goto-char po-start-of-msgid)) + +(defun po-other-window () + "Get the cursor into another window, out of PO mode." + (interactive) + (if (one-window-p t) + (progn + (split-window) + (switch-to-buffer (other-buffer))) + (other-window 1))) + +;;; Processing the PO file header entry. + +(defun po-check-file-header () + "Create a missing PO mode file header, or replace an oldish one." + (save-excursion + (let ((buffer-read-only po-read-only) + insert-flag end-of-header) + (goto-char (point-min)) + (if (re-search-forward po-any-msgstr-regexp nil t) + (progn + + ;; There is at least one entry. + (goto-char (match-beginning 0)) + (previous-line 1) + (setq end-of-header (match-end 0)) + (if (looking-at "msgid \"\"\n") + + ;; There is indeed a PO file header. + (if (re-search-forward "\n\"PO-Revision-Date: " + end-of-header t) + nil + + ;; This is an oldish header. Replace it all. + (goto-char end-of-header) + (while (> (point) (point-min)) + (previous-line 1) + (insert "#~ ") + (beginning-of-line)) + (beginning-of-line) + (setq insert-flag t)) + + ;; The first entry is not a PO file header, insert one. + (setq insert-flag t))) + + ;; Not a single entry found. + (setq insert-flag t)) + + (goto-char (point-min)) + (and insert-flag (insert po-default-file-header "\n"))))) + +(defun po-replace-revision-date () + "Replace the revision date by current time in the PO file header." + (if (fboundp 'format-time-string) + (if (or (eq po-auto-replace-revision-date t) + (and (eq po-auto-replace-revision-date 'ask) + (y-or-n-p (_"May I set PO-Revision-Date? ")))) + (save-excursion + (goto-char (point-min)) + (if (re-search-forward "^\"PO-Revision-Date:.*" nil t) + (let* ((buffer-read-only po-read-only) + (time (current-time)) + (seconds (or (car (current-time-zone time)) 0)) + (minutes (/ (abs seconds) 60)) + (zone (format "%c%02d:%02d" + (if (< seconds 0) ?- ?+) + (/ minutes 60) + (% minutes 60)))) + (replace-match + (concat "\"PO-Revision-Date: " + (format-time-string "%Y-%m-%d %H:%M" time) + zone "\\n\"") + t t)))) + (message "")) + (message (_"PO-Revision-Date should be adjusted...")))) + +;;; Handling span of entry, entry type and entry attributes. + +(defun po-find-span-of-entry () + "Find the extent of the PO file entry where the cursor is. Set variables +PO-START-OF-ENTRY, PO-START-OF-MSGID, PO-START-OF-MSGSTR, PO-END-OF-ENTRY +and PO-ENTRY-TYPE to meaningful values. Decreasing priority of type +interpretation is: obsolete, fuzzy, untranslated or translated." + (let ((here (point))) + (if (re-search-backward po-any-msgstr-regexp nil t) + (progn + + ;; After a backward match, (match-end 0) will not extend + ;; beyond point, in case point was *inside* the regexp. We + ;; need a dependable (match-end 0), so we redo the match in + ;; the forward direction. + (re-search-forward po-any-msgstr-regexp) + (if (<= (match-end 0) here) + (progn + + ;; We most probably found the msgstr of the previous + ;; entry. The current entry then starts just after + ;; its end, save this information just in case. + (setq po-start-of-entry (match-end 0)) + + ;; However, it is also possible that we are located in + ;; the crumb after the last entry in the file. If + ;; yes, we know the middle and end of last PO entry. + (setq po-start-of-msgstr (match-beginning 0) + po-end-of-entry (match-end 0)) + + (if (re-search-forward po-any-msgstr-regexp nil t) + (progn + + ;; We definitely were not in the crumb. + (setq po-start-of-msgstr (match-beginning 0) + po-end-of-entry (match-end 0))) + + ;; We were in the crumb. The start of the last PO + ;; file entry is the end of the previous msgstr if + ;; any, or else, the beginning of the file. + (goto-char po-start-of-msgstr) + (setq po-start-of-entry + (if (re-search-backward po-any-msgstr-regexp nil t) + (match-end 0) + (point-min))))) + + ;; The cursor was inside msgstr of the current entry. + (setq po-start-of-msgstr (match-beginning 0) + po-end-of-entry (match-end 0)) + ;; The start of this entry is the end of the previous + ;; msgstr if any, or else, the beginning of the file. + (goto-char po-start-of-msgstr) + (setq po-start-of-entry + (if (re-search-backward po-any-msgstr-regexp nil t) + (match-end 0) + (point-min))))) + + ;; The cursor was before msgstr in the first entry in the file. + (setq po-start-of-entry (point-min)) + (goto-char po-start-of-entry) + ;; There is at least the PO file header, so this should match. + (re-search-forward po-any-msgstr-regexp) + (setq po-start-of-msgstr (match-beginning 0) + po-end-of-entry (match-end 0))) + + ;; Find start of msgid. + (goto-char po-start-of-entry) + (re-search-forward po-any-msgid-regexp) + (setq po-start-of-msgid (match-beginning 0)) + + ;; Classify the entry. + (setq po-entry-type + (if (eq (following-char) ?#) + 'obsolete + (goto-char po-start-of-entry) + (if (re-search-forward po-fuzzy-regexp po-start-of-msgid t) + 'fuzzy + (goto-char po-start-of-msgstr) + (if (looking-at po-untranslated-regexp) + 'untranslated + 'translated)))) + + ;; Put the cursor back where it was. + (goto-char here))) + +(defun po-add-attribute (name) + "Add attribute NAME to the current entry, unless it is already there." + (save-excursion + (let ((buffer-read-only po-read-only)) + (goto-char po-start-of-entry) + (if (re-search-forward "\n#[,!] .*" po-start-of-msgid t) + (save-restriction + (narrow-to-region (match-beginning 0) (match-end 0)) + (goto-char (point-min)) + (if (re-search-forward (concat "\\b" name "\\b") nil t) + nil + (goto-char (point-max)) + (insert ", " name))) + (skip-chars-forward "\n") + (while (eq (following-char) ?#) + (next-line 1)) + (insert "#, " name "\n"))))) + +(defun po-delete-attribute (name) + "Delete attribute NAME from the current entry, if any." + (save-excursion + (let ((buffer-read-only po-read-only)) + (goto-char po-start-of-entry) + (if (re-search-forward "\n#[,!] .*" po-start-of-msgid t) + (save-restriction + (narrow-to-region (match-beginning 0) (match-end 0)) + (goto-char (point-min)) + (if (re-search-forward + (concat "\\(\n#[,!] " name "$\\|, " name "$\\| " name ",\\)") + nil t) + (replace-match "" t t))))))) + +;;; Entry positionning. + +(defun po-say-location-depth () + "Tell how many entries in the entry location stack." + (let ((depth (length po-marker-stack))) + (cond ((= depth 0) (message (_"Empty location stack"))) + ((= depth 1) (message (_"One entry in location stack"))) + (t (message (_"%d entries in location stack") depth))))) + +(defun po-push-location () + "Stack the location of the current entry, for later return." + (interactive) + (po-find-span-of-entry) + (save-excursion + (goto-char po-start-of-msgid) + (setq po-marker-stack (cons (point-marker) po-marker-stack))) + (po-say-location-depth)) + +(defun po-pop-location () + "Unstack a saved location, and return to the corresponding entry." + (interactive) + (if po-marker-stack + (progn + (goto-char (car po-marker-stack)) + (setq po-marker-stack (cdr po-marker-stack)) + (po-current-entry) + (po-say-location-depth)) + (error (_"The entry location stack is empty")))) + +(defun po-exchange-location () + "Exchange the location of the current entry with the top of stack." + (interactive) + (if po-marker-stack + (progn + (po-find-span-of-entry) + (goto-char po-start-of-msgid) + (let ((location (point-marker))) + (goto-char (car po-marker-stack)) + (setq po-marker-stack (cons location (cdr po-marker-stack)))) + (po-current-entry) + (po-say-location-depth)) + (error (_"The entry location stack is empty")))) + +(defun po-current-entry () + "Display the current entry." + (interactive) + (po-find-span-of-entry) + (po-redisplay)) + +(defun po-first-entry-with-regexp (regexp) + "Display the first entry in the file which msgstr matches REGEXP." + (let ((here (point))) + (goto-char (point-min)) + (if (re-search-forward regexp nil t) + (progn + (goto-char (match-beginning 0)) + (po-current-entry)) + (goto-char here) + (error (_"There is no such entry"))))) + +(defun po-last-entry-with-regexp (regexp) + "Display the last entry in the file which msgstr matches REGEXP." + (let ((here (point))) + (goto-char (point-max)) + (if (re-search-backward regexp nil t) + (po-current-entry) + (goto-char here) + (error (_"There is no such entry"))))) + +(defun po-next-entry-with-regexp (regexp wrap) + "Display the entry following the current entry which msgstr matches REGEXP. +If WRAP is not nil, the search may wrap around the buffer." + (po-find-span-of-entry) + (let ((here (point))) + (goto-char po-end-of-entry) + (if (re-search-forward regexp nil t) + (progn + (goto-char (match-beginning 0)) + (po-current-entry)) + (if (and wrap + (progn + (goto-char (point-min)) + (re-search-forward regexp po-start-of-entry t))) + (progn + (goto-char (match-beginning 0)) + (po-current-entry) + (message (_"Wrapping around the buffer"))) + (goto-char here) + (error (_"There is no such entry")))))) + +(defun po-previous-entry-with-regexp (regexp wrap) + "Redisplay the entry preceding the current entry which msgstr matches REGEXP. +If WRAP is not nil, the search may wrap around the buffer." + (po-find-span-of-entry) + (let ((here (point))) + (goto-char po-start-of-entry) + (if (re-search-backward regexp nil t) + (po-current-entry) + (if (and wrap + (progn + (goto-char (point-max)) + (re-search-backward regexp po-end-of-entry t))) + (progn + (po-current-entry) + (message (_"Wrapping around the buffer"))) + (goto-char here) + (error (_"There is no such entry")))))) + +;; Any entries. + +(defun po-first-entry () + "Display the first entry." + (interactive) + (po-first-entry-with-regexp po-any-msgstr-regexp)) + +(defun po-last-entry () + "Display the last entry." + (interactive) + (po-last-entry-with-regexp po-any-msgstr-regexp)) + +(defun po-next-entry () + "Display the entry following the current entry." + (interactive) + (po-next-entry-with-regexp po-any-msgstr-regexp nil)) + +(defun po-previous-entry () + "Display the entry preceding the current entry." + (interactive) + (po-previous-entry-with-regexp po-any-msgstr-regexp nil)) + +;; Untranslated entries. + +(defvar po-after-entry-regexp + "\\(\\'\\|\\(#[ \t]*\\)?[^\"]\\)" + "Regexp which should be true after a full msgstr string matched.") + +(defvar po-untranslated-regexp + (concat "^msgstr[ \t]*\"\"\n" po-after-entry-regexp) + "Regexp matching a whole msgstr field, but only if active and empty.") + +(defun po-next-untranslated-entry () + "Find the next untranslated entry, wrapping around if necessary." + (interactive) + (po-next-entry-with-regexp po-untranslated-regexp t)) + +(defun po-previous-untranslated-entry () + "Find the previous untranslated entry, wrapping around if necessary." + (interactive) + (po-previous-entry-with-regexp po-untranslated-regexp t)) + +(defun po-msgid-to-msgstr () + "Use another window to edit msgstr reinitialized with msgid." + (interactive) + (po-find-span-of-entry) + (if (or (eq po-entry-type 'untranslated) + (eq po-entry-type 'obsolete) + (y-or-n-p (_"Really loose previous translation? "))) + (po-set-msgstr (po-get-msgid nil))) + (message "")) + +;; Obsolete entries. + +(defvar po-obsolete-msgstr-regexp + "^#~?[ \t]*msgstr.*\n\\(#~?[ \t]*\".*\n\\)*" + "Regexp matching a whole msgstr field of an obsolete entry.") + +(defun po-next-obsolete-entry () + "Find the next obsolete entry, wrapping around if necessary." + (interactive) + (po-next-entry-with-regexp po-obsolete-msgstr-regexp t)) + +(defun po-previous-obsolete-entry () + "Find the previous obsolete entry, wrapping around if necessary." + (interactive) + (po-previous-entry-with-regexp po-obsolete-msgstr-regexp t)) + +;; Fuzzy entries. + +(defvar po-fuzzy-regexp "^#[,!] .*fuzzy" + "Regexp matching the string inserted by msgmerge for translations +which does not match exactly.") + +(defun po-next-fuzzy-entry () + "Find the next fuzzy entry, wrapping around if necessary." + (interactive) + (po-next-entry-with-regexp po-fuzzy-regexp t)) + +(defun po-previous-fuzzy-entry () + "Find the next fuzzy entry, wrapping around if necessary." + (interactive) + (po-previous-entry-with-regexp po-fuzzy-regexp t)) + +(defun po-unfuzzy () + "Remove the fuzzy attribute for the current entry." + (interactive) + (po-find-span-of-entry) + (cond ((eq po-entry-type 'fuzzy) + (po-decrease-type-counter) + (po-delete-attribute "fuzzy") + (po-current-entry) + (po-increase-type-counter))) + (if po-auto-select-on-unfuzzy + (po-auto-select-entry)) + (po-update-mode-line-string)) + +;; Translated entries. + +(defun po-next-translated-entry () + "Find the next untranslated entry, wrapping around if necessary." + (interactive) + (if (= po-translated-counter 0) + (error (_"There is no such entry")) + (po-next-entry-with-regexp po-untranslated-regexp t) + (po-find-span-of-entry) + (while (not (eq po-entry-type 'translated)) + (po-next-entry-with-regexp po-any-msgstr-regexp t) + (po-find-span-of-entry)))) + +(defun po-previous-translated-entry () + "Find the previous untranslated entry, wrapping around if necessary." + (interactive) + (if (= po-translated-counter 0) + (error (_"There is no such entry")) + (po-previous-entry-with-regexp po-any-msgstr-regexp t) + (po-find-span-of-entry) + (while (not (eq po-entry-type 'translated)) + (po-previous-entry-with-regexp po-untranslated-regexp t) + (po-find-span-of-entry)))) + +;; Auto-selection feature. + +(defun po-auto-select-entry () + "Select the next entry having the same type as the current one. +If none, wrap from the beginning of the buffer with another type, +going from untranslated to fuzzy, and from fuzzy to obsolete. +Plain translated entries are always disregarded unless there are +no entries of the other types." + (interactive) + (po-find-span-of-entry) + (goto-char po-end-of-entry) + (if (and (= po-untranslated-counter 0) + (= po-fuzzy-counter 0) + (= po-obsolete-counter 0)) + + ;; All entries are plain translated. Next entry will do, or + ;; wrap around if there is none. + (if (re-search-forward po-any-msgstr-regexp nil t) + (goto-char (match-beginning 0)) + (goto-char (point-min))) + + ;; If over a translated entry, look for an untranslated one first. + ;; Else, look for an entry of the same type first. + (let ((goal (if (eq po-entry-type 'translated) + 'untranslated + po-entry-type))) + (while goal + + ;; Find an untranslated entry, or wrap up for a fuzzy entry. + (if (eq goal 'untranslated) + (if (and (> po-untranslated-counter 0) + (re-search-forward po-untranslated-regexp nil t)) + (progn + (goto-char (match-beginning 0)) + (setq goal nil)) + (goto-char (point-min)) + (setq goal 'fuzzy))) + + ;; Find a fuzzy entry, or wrap up for an obsolete entry. + (if (eq goal 'fuzzy) + (if (and (> po-fuzzy-counter 0) + (re-search-forward po-fuzzy-regexp nil t)) + (progn + (goto-char (match-beginning 0)) + (setq goal nil)) + (goto-char (point-min)) + (setq goal 'obsolete))) + + ;; Find an obsolete entry, or wrap up for an untranslated entry. + (if (eq goal 'obsolete) + (if (and (> po-obsolete-counter 0) + (re-search-forward po-obsolete-msgstr-regexp nil t)) + (progn + (goto-char (match-beginning 0)) + (setq goal nil)) + (goto-char (point-min)) + (setq goal 'untranslated)))))) + + ;; Display this entry nicely. + (po-current-entry)) + +;;; Killing and yanking fields. + +(defun po-extract-unquoted (buffer start end) + "Extract and return the unquoted string in BUFFER going from START to END. +Crumb preceding or following the quoted string is ignored." + (po-with-temp-buffer + (insert-buffer-substring buffer start end) + ;; Remove preceding crumb. + (goto-char (point-min)) + (search-forward "\"") + (delete-region (point-min) (point)) + ;; Remove following crumb. + (goto-char (point-max)) + (search-backward "\"") + (delete-region (point) (point-max)) + ;; Glue concatenated strings. + (goto-char (point-min)) + (while (re-search-forward "\"[ \t]*\\\\?\n\\(#~?\\)?[ \t]*\"" nil t) + (replace-match "" t t)) + ;; Remove escaped newlines. + (goto-char (point-min)) + (while (re-search-forward "\\\\[ \t]*\n" nil t) + (replace-match "" t t)) + ;; Unquote individual characters. + (goto-char (point-min)) + (while (re-search-forward "\\\\[\"abfnt\\0-7]" nil t) + (cond ((eq (preceding-char) ?\") (replace-match "\"" t t)) + ((eq (preceding-char) ?a) (replace-match "\a" t t)) + ((eq (preceding-char) ?b) (replace-match "\b" t t)) + ((eq (preceding-char) ?f) (replace-match "\f" t t)) + ((eq (preceding-char) ?n) (replace-match "\n" t t)) + ((eq (preceding-char) ?t) (replace-match "\t" t t)) + ((eq (preceding-char) ?\\) (replace-match "\\" t t)) + (t (let ((value (- (preceding-char) ?0))) + (replace-match "" t t) + (while (looking-at "[0-7]") + (setq value (+ (* 8 value) (- (following-char) ?0))) + (replace-match "" t t)) + (insert value))))) + (buffer-string))) + +(defun po-eval-requoted (form prefix obsolete) + "Eval FORM, which inserts a string, and return the string fully requoted. +If PREFIX, precede the result with its contents. If OBSOLETE, comment all +generated lines in the returned string. Evaluating FORM should insert the +wanted string in the buffer which is current at the time of evaluation. +If FORM is itself a string, then this string is used for insertion." + (po-with-temp-buffer + (if (stringp form) + (insert form) + (push-mark) + (eval form)) + (goto-char (point-min)) + (let ((multi-line (re-search-forward "[^\n]\n+[^\n]" nil t))) + (goto-char (point-min)) + (while (re-search-forward "[\"\a\b\f\n\t\\]" nil t) + (cond ((eq (preceding-char) ?\") (replace-match "\\\"" t t)) + ((eq (preceding-char) ?\a) (replace-match "\\a" t t)) + ((eq (preceding-char) ?\b) (replace-match "\\b" t t)) + ((eq (preceding-char) ?\f) (replace-match "\\f" t t)) + ((eq (preceding-char) ?\n) + (replace-match (if (or (not multi-line) (eobp)) + "\\n" + "\\n\"\n\"") + t t)) + ((eq (preceding-char) ?\t) (replace-match "\\t" t t)) + ((eq (preceding-char) ?\\) (replace-match "\\\\" t t)))) + (goto-char (point-min)) + (if prefix (insert prefix " ")) + (insert (if multi-line "\"\"\n\"" "\"")) + (goto-char (point-max)) + (insert "\"") + (if prefix (insert "\n")) + (if obsolete + (progn + (goto-char (point-min)) + (while (not (eobp)) + (or (eq (following-char) ?\n) (insert "#~ ")) + (search-forward "\n")))) + (buffer-string)))) + +(defun po-get-msgid (kill) + "Extract and return the unquoted msgid string. +If KILL, then add the unquoted string to the kill ring." + (let ((string (po-extract-unquoted (current-buffer) + po-start-of-msgid po-start-of-msgstr))) + (if kill (po-kill-new string)) + string)) + +(defun po-get-msgstr (kill) + "Extract and return the unquoted msgstr string. +If KILL, then add the unquoted string to the kill ring." + (let ((string (po-extract-unquoted (current-buffer) + po-start-of-msgstr po-end-of-entry))) + (if kill (po-kill-new string)) + string)) + +(defun po-set-msgid (form) + "Replace the current msgid, using FORM to get a string. +Evaluating FORM should insert the wanted string in the current buffer. If +FORM is itself a string, then this string is used for insertion. The string +is properly requoted before the replacement occurs. + +Returns `nil' if the buffer has not been modified, for if the new msgid +described by FORM is merely identical to the msgid already in place." + (let ((string (po-eval-requoted form "msgid" (eq po-entry-type 'obsolete)))) + (save-excursion + (goto-char po-start-of-entry) + (re-search-forward po-any-msgid-regexp po-start-of-msgstr) + (and (not (string-equal (po-buffer-substring (match-beginning 0) + (match-end 0)) + string)) + (let ((buffer-read-only po-read-only)) + (replace-match string t t) + (goto-char po-start-of-msgid) + (po-find-span-of-entry) + t))))) + +(defun po-set-msgstr (form) + "Replace the current msgstr, using FORM to get a string. +Evaluating FORM should insert the wanted string in the current buffer. If +FORM is itself a string, then this string is used for insertion. The string +is properly requoted before the replacement occurs. + +Returns `nil' if the buffer has not been modified, for if the new msgstr +described by FORM is merely identical to the msgstr already in place." + (let ((string (po-eval-requoted form "msgstr" (eq po-entry-type 'obsolete)))) + (save-excursion + (goto-char po-start-of-entry) + (re-search-forward po-any-msgstr-regexp po-end-of-entry) + (and (not (string-equal (po-buffer-substring (match-beginning 0) + (match-end 0)) + string)) + (let ((buffer-read-only po-read-only)) + (po-decrease-type-counter) + (replace-match string t t) + (goto-char po-start-of-msgid) + (po-find-span-of-entry) + (po-increase-type-counter) + t))))) + +(defun po-kill-ring-save-msgstr () + "Push the msgstr string from current entry on the kill ring." + (interactive) + (po-find-span-of-entry) + (po-get-msgstr t)) + +(defun po-kill-msgstr () + "Empty the msgstr string from current entry, pushing it on the kill ring." + (interactive) + (po-kill-ring-save-msgstr) + (po-set-msgstr "")) + +(defun po-yank-msgstr () + "Replace the current msgstr string by the top of the kill ring." + (interactive) + (po-find-span-of-entry) + (po-set-msgstr (if (eq last-command 'yank) '(yank-pop 1) '(yank))) + (setq this-command 'yank)) + +(defun po-fade-out-entry () + "Mark an active entry as fuzzy; obsolete a fuzzy or untranslated entry; +or completely delete an obsolete entry, saving its msgstr on the kill ring." + (interactive) + (po-find-span-of-entry) + + (cond ((eq po-entry-type 'translated) + (po-decrease-type-counter) + (po-add-attribute "fuzzy") + (po-current-entry) + (po-increase-type-counter)) + + ((or (eq po-entry-type 'fuzzy) + (eq po-entry-type 'untranslated)) + (if (yes-or-no-p (_"Should I really obsolete this entry? ")) + (progn + (po-decrease-type-counter) + (save-excursion + (save-restriction + (narrow-to-region po-start-of-entry po-end-of-entry) + (let ((buffer-read-only po-read-only)) + (goto-char (point-min)) + (skip-chars-forward "\n") + (while (not (eobp)) + (insert "#~ ") + (search-forward "\n"))))) + (po-current-entry) + (po-increase-type-counter))) + (message "")) + + ((and (eq po-entry-type 'obsolete) + (po-check-for-pending-edit po-start-of-msgid) + (po-check-for-pending-edit po-start-of-msgstr)) + (po-decrease-type-counter) + (po-update-mode-line-string) + (po-get-msgstr t) + (let ((buffer-read-only po-read-only)) + (delete-region po-start-of-entry po-end-of-entry)) + (goto-char po-start-of-entry) + (if (re-search-forward po-any-msgstr-regexp nil t) + (goto-char (match-beginning 0)) + (re-search-backward po-any-msgstr-regexp nil t)) + (po-current-entry) + (message "")))) + +;;; Killing and yanking comments. + +(defvar po-active-comment-regexp + "^\\(#\n\\|# .*\n\\)+" + "Regexp matching the whole editable comment part of an active entry.") + +(defvar po-obsolete-comment-regexp + "^\\(#~? #\n\\|#~? # .*\n\\)+" + "Regexp matching the whole editable comment part of an obsolete entry.") + +(defun po-get-comment (kill-flag) + "Extract and return the editable comment string, uncommented. +If KILL-FLAG, then add the unquoted comment to the kill ring." + (let ((buffer (current-buffer)) + (obsolete (eq po-entry-type 'obsolete))) + (save-excursion + (goto-char po-start-of-entry) + (if (re-search-forward (if obsolete po-obsolete-comment-regexp + po-active-comment-regexp) + po-end-of-entry t) + (po-with-temp-buffer + (insert-buffer-substring buffer (match-beginning 0) (match-end 0)) + (goto-char (point-min)) + (while (not (eobp)) + (if (looking-at (if obsolete "#~? # ?" "#~? ?")) + (replace-match "" t t)) + (forward-line 1)) + (and kill-flag (copy-region-as-kill (point-min) (point-max))) + (buffer-string)) + "")))) + +(defun po-set-comment (form) + "Using FORM to get a string, replace the current editable comment. +Evaluating FORM should insert the wanted string in the current buffer. +If FORM is itself a string, then this string is used for insertion. +The string is properly recommented before the replacement occurs." + (let ((obsolete (eq po-entry-type 'obsolete)) + string) + (po-with-temp-buffer + (if (stringp form) + (insert form) + (push-mark) + (eval form)) + (if (not (or (bobp) (= (preceding-char) ?\n))) + (insert "\n")) + (goto-char (point-min)) + (while (not (eobp)) + (insert (if (= (following-char) ?\n) + (if obsolete "#~ #" "#") + (if obsolete "#~ # " "# "))) + (search-forward "\n")) + (setq string (buffer-string))) + (goto-char po-start-of-entry) + (if (re-search-forward + (if obsolete po-obsolete-comment-regexp po-active-comment-regexp) + po-end-of-entry t) + (if (not (string-equal (po-buffer-substring (match-beginning 0) + (match-end 0)) + string)) + (let ((buffer-read-only po-read-only)) + (replace-match string t t))) + (skip-chars-forward " \t\n") + (let ((buffer-read-only po-read-only)) + (insert string)))) + (po-current-entry)) + +(defun po-kill-ring-save-comment () + "Push the msgstr string from current entry on the kill ring." + (interactive) + (po-find-span-of-entry) + (po-get-comment t)) + +(defun po-kill-comment () + "Empty the msgstr string from current entry, pushing it on the kill ring." + (interactive) + (po-kill-ring-save-comment) + (po-set-comment "") + (po-redisplay)) + +(defun po-yank-comment () + "Replace the current comment string by the top of the kill ring." + (interactive) + (po-find-span-of-entry) + (po-set-comment (if (eq last-command 'yank) '(yank-pop 1) '(yank))) + (setq this-command 'yank) + (po-redisplay)) + +;;; Editing management and submode. + +;; In a string edit buffer, BACK-POINTER points to one of the slots of the +;; list EDITED-FIELDS kept in the PO buffer. See its description elsewhere. +;; Reminder: slots have the form (ENTRY-MARKER EDIT-BUFFER OVERLAY-INFO). + +(defvar po-subedit-back-pointer) + +(defun po-clean-out-killed-edits () + "From EDITED-FIELDS, clean out any edit having a killed edit buffer." + (while (and po-edited-fields + (null (buffer-name (nth 1 (car po-edited-fields))))) + (let ((overlay (nth 2 (car po-edited-fields)))) + (and overlay (po-dehighlight overlay))) + (setq po-edited-fields (cdr po-edited-fields))) + (let ((cursor po-edited-fields)) + (while cursor + (let ((slot (car cursor))) + (setq cursor (cdr cursor)) + (if (buffer-name (nth 1 slot)) + nil + (let ((overlay (nth 2 slot))) + (and overlay (po-dehighlight overlay))) + (setq po-edited-fields (delete slot po-edited-fields))))))) + +(defun po-check-all-pending-edits () + "Resume any pending edit. Return nil if some remains." + (po-clean-out-killed-edits) + (or (null po-edited-fields) + (let ((slot (car po-edited-fields))) + (goto-char (nth 0 slot)) + (pop-to-buffer (nth 1 slot)) + (let ((overlay (nth 2 slot))) + (and overlay (po-rehighlight overlay))) + (message po-subedit-message) + nil))) + +(defun po-check-for-pending-edit (position) + "Resume any pending edit at POSITION. Return nil if such edit exists." + (po-clean-out-killed-edits) + (let ((marker (make-marker))) + (set-marker marker position) + (let ((slot (assoc marker po-edited-fields))) + (if slot + (progn + (goto-char marker) + (pop-to-buffer (nth 1 slot)) + (let ((overlay (nth 2 slot))) + (and overlay (po-rehighlight overlay))) + (message po-subedit-message))) + (not slot)))) + +(defun po-edit-out-full () + "Get out of PO mode, leaving PO file buffer in fundamental mode." + (interactive) + (if (and (po-check-all-pending-edits) + (yes-or-no-p (_"Should I let you edit the whole PO file? "))) + (progn + (setq buffer-read-only po-read-only) + (fundamental-mode) + (message (_"Type `M-x po-mode RET' once done"))))) + +(defvar po-subedit-mode-map nil + "Keymap while editing a PO mode entry (or the full PO file).") +(if po-subedit-mode-map + () + (setq po-subedit-mode-map (make-sparse-keymap)) + (define-key po-subedit-mode-map "\C-c\C-a" 'po-subedit-cycle-auxiliary) + (define-key po-subedit-mode-map "\C-c\C-c" 'po-subedit-exit) + (define-key po-subedit-mode-map "\C-c\C-k" 'po-subedit-abort)) + +(defun po-subedit-abort () + "Exit the subedit buffer, merely discarding its contents." + (interactive) + (let* ((edit-buffer (current-buffer)) + (back-pointer po-subedit-back-pointer) + (marker (nth 0 back-pointer)) + (overlay (nth 2 back-pointer)) + (buffer (marker-buffer marker))) + (if (null buffer) + (error (_"Corresponding PO buffer does not exist anymore")) + (or (one-window-p) (delete-window)) + (switch-to-buffer buffer) + (goto-char marker) + (and overlay (po-dehighlight overlay)) + (kill-buffer edit-buffer) + (setq po-edited-fields (delete back-pointer po-edited-fields))))) + +(defun po-subedit-exit () + "Exit the subedit buffer, replacing the string in the PO buffer." + (interactive) + (goto-char (point-max)) + (skip-chars-backward " \t\n") + (if (eq (preceding-char) ?<) + (delete-region (1- (point)) (point-max))) + (let ((string (buffer-string))) + (po-subedit-abort) + (po-find-span-of-entry) + (cond ((= (point) po-start-of-msgid) + (po-set-comment string) + (po-redisplay)) + ((= (point) po-start-of-msgstr) + (let ((replaced (po-set-msgstr string))) + (if (and replaced + po-auto-fuzzy-on-edit + (eq po-entry-type 'translated)) + (progn + (po-decrease-type-counter) + (po-add-attribute "fuzzy") + (po-current-entry) + (po-increase-type-counter))))) + (t (debug))))) + +(defun po-edit-string (string type expand-tabs) + "Prepare a pop up buffer for editing STRING, which is of a given TYPE. +TYPE may be 'comment or 'msgstr. If EXPAND-TABS, expand tabs to spaces. +Run functions on po-subedit-mode-hook." + (let ((marker (make-marker))) + (set-marker marker (cond ((eq type 'comment) po-start-of-msgid) + ((eq type 'msgstr) po-start-of-msgstr))) + (if (po-check-for-pending-edit marker) + (let ((edit-buffer (generate-new-buffer + (concat "*" (buffer-name) "*"))) + (buffer (current-buffer)) + overlay slot) + (if (and (eq type 'msgstr) po-highlighting) + ;; ;; Try showing all of msgid in the upper window while editing. + ;; (goto-char (1- po-start-of-msgstr)) + ;; (recenter -1) + (save-excursion + (goto-char po-start-of-entry) + (re-search-forward po-any-msgid-regexp nil t) + (let ((end (1- (match-end 0)))) + (goto-char (match-beginning 0)) + (re-search-forward "msgid +" nil t) + (setq overlay (po-create-overlay)) + (po-highlight overlay (point) end buffer)))) + (setq slot (list marker edit-buffer overlay) + po-edited-fields (cons slot po-edited-fields)) + (pop-to-buffer edit-buffer) + (make-local-variable 'po-subedit-back-pointer) + (setq po-subedit-back-pointer slot) + (erase-buffer) + (insert string "<") + (goto-char (point-min)) + (and expand-tabs (setq indent-tabs-mode nil)) + (use-local-map po-subedit-mode-map) + (run-hooks 'po-subedit-mode-hook) + (message po-subedit-message))))) + +(defun po-edit-comment () + "Use another window to edit the current translator comment." + (interactive) + (po-find-span-of-entry) + (po-edit-string (po-get-comment nil) 'comment nil)) + +(defun po-edit-msgstr () + "Use another window to edit the current msgstr." + (interactive) + (po-find-span-of-entry) + (po-edit-string (if (and po-auto-edit-with-msgid + (eq po-entry-type 'untranslated)) + (po-get-msgid nil) + (po-get-msgstr nil)) + 'msgstr + t)) + +;;; String normalization and searching. + +(defun po-normalize-old-style (explain) + "Normalize old gettext style fields using K&R C multiline string syntax. +To minibuffer messages sent while normalizing, add the EXPLAIN string." + (let ((here (point-marker)) + (counter 0) + (buffer-read-only po-read-only)) + (goto-char (point-min)) + (message (_"Normalizing %d, %s") counter explain) + (while (re-search-forward + "\\(^#?[ \t]*msg\\(id\\|str\\)[ \t]*\"\\|[^\" \t][ \t]*\\)\\\\\n" + nil t) + (if (= (% counter 10) 0) + (message (_"Normalizing %d, %s") counter explain)) + (replace-match "\\1\"\n\"" t nil) + (setq counter (1+ counter))) + (goto-char here) + (message (_"Normalizing %d...done") counter))) + +(defun po-normalize-field (field explain) + "Normalize FIELD of all entries. FIELD is either the symbol msgid or msgstr. +To minibuffer messages sent while normalizing, add the EXPLAIN string." + (let ((here (point-marker)) + (counter 0)) + (goto-char (point-min)) + (while (re-search-forward po-any-msgstr-regexp nil t) + (if (= (% counter 10) 0) + (message (_"Normalizing %d, %s") counter explain)) + (goto-char (match-beginning 0)) + (po-find-span-of-entry) + (cond ((eq field 'msgid) (po-set-msgid (po-get-msgid nil))) + ((eq field 'msgstr) (po-set-msgstr (po-get-msgstr nil)))) + (goto-char po-end-of-entry) + (setq counter (1+ counter))) + (goto-char here) + (message (_"Normalizing %d...done") counter))) + +;; Normalize, but the British way! :-) +(defsubst po-normalise () (po-normalize)) + +(defun po-normalize () + "Normalize all entries in the PO file." + (interactive) + (po-normalize-old-style (_"pass 1/3")) + (po-normalize-field t (_"pass 2/3")) + (po-normalize-field nil (_"pass 3/3")) + ;; The last PO file entry has just been processed. + (if (not (= po-end-of-entry (point-max))) + (let ((buffer-read-only po-read-only)) + (kill-region po-end-of-entry (point-max)))) + ;; A bizarre format might have fooled the counters, so recompute + ;; them to make sure their value is dependable. + (po-compute-counters nil)) + +;;; Multiple PO files. + +(defun po-show-auxiliary-list () + "Echo the current auxiliary list in the message area." + (if po-auxiliary-list + (let ((cursor po-auxiliary-cursor) + string) + (while cursor + (setq string (concat string (if string " ") (car (car cursor))) + cursor (cdr cursor))) + (setq cursor po-auxiliary-list) + (while (not (eq cursor po-auxiliary-cursor)) + (setq string (concat string (if string " ") (car (car cursor))) + cursor (cdr cursor))) + (message string)) + (message (_"No auxiliary files.")))) + +(defun po-consider-as-auxiliary () + "Add the current PO file to the list of auxiliary files." + (interactive) + (if (member (list buffer-file-name) po-auxiliary-list) + nil + (setq po-auxiliary-list + (nconc po-auxiliary-list (list (list buffer-file-name)))) + (or po-auxiliary-cursor + (setq po-auxiliary-cursor po-auxiliary-list))) + (po-show-auxiliary-list)) + +(defun po-ignore-as-auxiliary () + "Delete the current PO file from the list of auxiliary files." + (interactive) + (setq po-auxiliary-list (delete (list buffer-file-name) po-auxiliary-list) + po-auxiliary-cursor po-auxiliary-list) + (po-show-auxiliary-list)) + +(defun po-seek-equivalent-translation (name string) + "Search a PO file NAME for a `msgid' STRING having a non-empty `msgstr'. +STRING is the full quoted msgid field, including the `msgid' keyword. When +found, display the file over the current window, with the `msgstr' field +possibly highlighted, the cursor at start of msgid, then return `t'. +Otherwise, move nothing, and just return `nil'." + (let ((current (current-buffer)) + (buffer (find-file-noselect name))) + (set-buffer buffer) + (let ((start (point)) + found) + (goto-char (point-min)) + (while (and (not found) (search-forward string nil t)) + ;; Screen out longer `msgid's. + (if (looking-at "^msgstr ") + (progn + (po-find-span-of-entry) + ;; Ignore an untranslated entry. + (or (string-equal + (buffer-substring po-start-of-msgstr po-end-of-entry) + "msgstr \"\"\n") + (setq found t))))) + (if found + (progn + (switch-to-buffer buffer) + (po-find-span-of-entry) + (if po-highlighting + (progn + (goto-char po-start-of-entry) + (re-search-forward po-any-msgstr-regexp nil t) + (let ((end (1- (match-end 0)))) + (goto-char (match-beginning 0)) + (re-search-forward "msgstr +" nil t) + ;; FIXME: + (po-highlight (point) end)))) + (goto-char po-start-of-msgid)) + (goto-char start) + (po-find-span-of-entry) + (select-buffer current)) + found))) + +(defun po-cycle-auxiliary () + "Select the next auxiliary file having an entry with same `msgid'." + (interactive) + (po-find-span-of-entry) + (if po-auxiliary-list + (let ((string (buffer-substring po-start-of-msgid po-start-of-msgstr)) + (cursor po-auxiliary-cursor) + found name) + (while (and (not found) cursor) + (setq name (car (car cursor))) + (if (and (not (string-equal buffer-file-name name)) + (po-seek-equivalent-translation name string)) + (setq found t + po-auxiliary-cursor cursor)) + (setq cursor (cdr cursor))) + (setq cursor po-auxiliary-list) + (while (and (not found) cursor) + (setq name (car (car cursor))) + (if (and (not (string-equal buffer-file-name name)) + (po-seek-equivalent-translation name string)) + (setq found t + po-auxiliary-cursor cursor)) + (setq cursor (cdr cursor))) + (or found (message (_"No other translation found"))) + found))) + +(defun po-subedit-cycle-auxiliary () + "Cycle auxiliary file, but from the translation edit buffer." + (interactive) + (if po-buffer-of-edited-entry + (let ((buffer (current-buffer))) + (pop-to-buffer po-buffer-of-edited-entry) + (po-cycle-auxiliary) + (pop-to-buffer buffer)) + (error (_"Not editing a PO file entry")))) + +(defun po-select-auxiliary () + "Select one of the available auxiliary files and locate an equivalent +entry. If an entry having the same `msgid' cannot be found, merely select +the file without moving its cursor." + (interactive) + (po-find-span-of-entry) + (if po-auxiliary-list + (let ((string (buffer-substring po-start-of-msgid po-start-of-msgstr)) + (name (car (assoc (completing-read (_"Which auxiliary file? ") + po-auxiliary-list nil t) + po-auxiliary-list)))) + (po-consider-as-auxiliary) + (or (po-seek-equivalent-translation name string) + (find-file name))))) + +;;; Original program sources as context. + +(defun po-show-source-path () + "Echo the current source search path in the message area." + (if po-search-path + (let ((cursor po-search-path) + string) + (while cursor + (setq string (concat string (if string " ") (car (car cursor))) + cursor (cdr cursor))) + (message string)) + (message (_"Empty source path.")))) + +(defun po-consider-source-path (directory) + "Add a given DIRECTORY, requested interactively, to the source search path." + (interactive "DDirectory for search path: ") + (setq po-search-path (cons (list (if (string-match "/$" directory) + directory + (concat directory "/"))) + po-search-path)) + (setq po-reference-check 0) + (po-show-source-path)) + +(defun po-ignore-source-path () + "Delete a directory, selected with completion, from the source search path." + (interactive) + (setq po-search-path + (delete (list (completing-read (_"Directory to remove? ") + po-search-path nil t)) + po-search-path)) + (setq po-reference-check 0) + (po-show-source-path)) + +(defun po-ensure-source-references () + "Extract all references into a list, with paths resolved, if necessary." + (po-find-span-of-entry) + (if (= po-start-of-entry po-reference-check) + () + (setq po-reference-alist nil) + (save-excursion + (goto-char po-start-of-entry) + (if (re-search-forward "^#:" po-start-of-msgid t) + (while (looking-at "\\(\n#:\\)? *\\([^: ]+\\):\\([0-9]+\\)") + (goto-char (match-end 0)) + (let* ((name (po-buffer-substring (match-beginning 2) + (match-end 2))) + (line (po-buffer-substring (match-beginning 3) + (match-end 3))) + (path po-search-path) + file) + (while (and (progn (setq file (concat (car (car path)) name)) + (not (file-exists-p file))) + path) + (setq path (cdr path))) + (if path + (setq po-reference-alist + (cons (list (concat file ":" line) + file + (string-to-int line)) + po-reference-alist))))))) + (setq po-reference-alist (nreverse po-reference-alist) + po-reference-cursor po-reference-alist + po-reference-check po-start-of-entry))) + +(defun po-show-source-context (triplet) + "Show the source context given a TRIPLET which is (PROMPT FILE LINE)." + (find-file-other-window (car (cdr triplet))) + (goto-line (car (cdr (cdr triplet)))) + (other-window 1) + (let ((maximum 0) + position + (cursor po-reference-alist)) + (while (not (eq triplet (car cursor))) + (setq maximum (1+ maximum) + cursor (cdr cursor))) + (setq position (1+ maximum) + po-reference-cursor cursor) + (while cursor + (setq maximum (1+ maximum) + cursor (cdr cursor))) + (message (_"Displaying %d/%d: \"%s\"") position maximum (car triplet)))) + +(defun po-cycle-source-reference () + "Display some source context for the current entry. +If the command is repeated many times in a row, cycle through contexts." + (interactive) + (po-ensure-source-references) + (if po-reference-cursor + (po-show-source-context + (car (if (eq last-command 'po-cycle-source-reference) + (or (cdr po-reference-cursor) po-reference-alist) + po-reference-cursor))) + (error (_"No resolved source references")))) + +(defun po-select-source-reference () + "Select one of the available source contexts for the current entry." + (interactive) + (po-ensure-source-references) + (if po-reference-alist + (po-show-source-context + (assoc + (completing-read (_"Which source context? ") po-reference-alist nil t) + po-reference-alist)) + (error (_"No resolved source references")))) + +;;; Program sources strings though tags table. + +;;; C mode. + +;;; A few long string cases (submitted by Ben Pfaff). + +;; #define string "This is a long string " \ +;; "that is continued across several lines " \ +;; "in a macro in order to test \\ quoting\\" \ +;; "\\ with goofy strings.\\" + +;; char *x = "This is just an ordinary string " +;; "continued across several lines without needing " +;; "to use \\ characters at end-of-line."; + +;; char *y = "Here is a string continued across \ +;; several lines in the manner that was sanctioned \ +;; in K&R C compilers and still works today, \ +;; even though the method used above is more esthetic."; + +;;; End of long string cases. + +(defun po-find-c-string (keywords) + "Find the next C string, excluding those marked by any of KEYWORDS. +Returns (START . END) for the found string, or (nil . nil) if none found." + (let (start end) + (while (and (not start) + (re-search-forward "\\([\"']\\|/\\*\\)" nil t)) + (cond ((= (preceding-char) ?*) + ;; Disregard comments. + (search-forward "*/")) + + ((= (preceding-char) ?\') + ;; Disregard character constants. + (forward-char (if (= (following-char) ?\\) 3 2))) + + ((save-excursion + (beginning-of-line) + (looking-at "^# *\\(include\\|line\\)")) + ;; Disregard lines being #include or #line directives. + (end-of-line)) + + ;; Else, find the end of the (possibly concatenated) string. + (t (setq start (1- (point)) + end nil) + (while (not end) + (cond ((= (following-char) ?\") + (if (looking-at "\"[ \t\n\\\\]*\"") + (goto-char (match-end 0)) + (forward-char 1) + (setq end (point)))) + ((= (following-char) ?\\) (forward-char 2)) + (t (skip-chars-forward "^\"\\\\")))) + + ;; Check before string for keyword and opening parenthesis. + (goto-char start) + (skip-chars-backward " \n\t") + (if (= (preceding-char) ?\() + (progn + (backward-char 1) + (skip-chars-backward " \n\t") + (let ((end-keyword (point))) + (skip-chars-backward "_A-Za-z0-9") + (if (member (list (po-buffer-substring (point) + end-keyword)) + keywords) + + ;; Disregard already marked strings. + (progn + (goto-char end) + (setq start nil + end nil))))))))) + + ;; Return the found string, if any. + (cons start end))) + +(defun po-mark-c-string (start end keyword) + "Mark the C string, from START to END, with KEYWORD. +Return the adjusted value for END." + (goto-char end) + (insert ")") + (goto-char start) + (insert keyword) + (if (not (string-equal keyword "_")) + (progn (insert " ") (setq end (1+ end)))) + (insert "(") + (+ end 2 (length keyword))) + +;;; Emacs LISP mode. + +(defun po-find-emacs-lisp-string (keywords) + "Find the next Emacs LISP string, excluding those marked by any of KEYWORDS. +Returns (START . END) for the found string, or (nil . nil) if none found." + (let (start end) + (while (and (not start) + (re-search-forward "[;\"?]" nil t)) + + (cond ((= (preceding-char) ?\;) + ;; Disregard comments. + (search-forward "\n")) + + ((= (preceding-char) ?\?) + ;; Disregard character constants. + (forward-char (if (= (following-char) ?\\) 2 1))) + + ;; Else, find the end of the string. + (t (setq start (1- (point))) + (while (not (= (following-char) ?\")) + (skip-chars-forward "^\"\\\\") + (if (= (following-char) ?\\) (forward-char 2))) + (forward-char 1) + (setq end (point)) + + ;; Check before string for keyword and opening parenthesis. + (goto-char start) + (skip-chars-backward " \n\t") + (let ((end-keyword (point))) + (skip-chars-backward "-_A-Za-z0-9") + (if (and (= (preceding-char) ?\() + (member (list (po-buffer-substring (point) + end-keyword)) + keywords)) + + ;; Disregard already marked strings. + (progn + (goto-char end) + (setq start nil + end nil))))))) + + ;; Return the found string, if any. + (cons start end))) + +(defun po-mark-emacs-lisp-string (start end keyword) + "Mark the Emacs LISP string, from START to END, with KEYWORD. +Return the adjusted value for END." + (goto-char end) + (insert ")") + (goto-char start) + (insert "(" keyword) + (if (not (string-equal keyword "_")) + (progn (insert " ") (setq end (1+ end)))) + (+ end 2 (length keyword))) + +;;; Processing generic to all programming modes. + +(eval-and-compile + (autoload 'visit-tags-table-buffer "etags")) + +(defun po-tags-search (restart) + "Find an unmarked translatable string through all files in tags table. +Disregard some simple strings which are most probably non-translatable. +With prefix argument, restart search at first file." + (interactive "P") + + ;; Take care of restarting the search if necessary. + (if restart (setq po-next-file-list nil)) + + ;; Loop doing things until an interesting string is found. + (let ((keywords po-keywords) + found buffer start + (end po-string-end)) + (while (not found) + + ;; Reinitialize the source file list if necessary. + (if (not po-next-file-list) + (progn + (setq po-next-file-list + (save-excursion + (visit-tags-table-buffer) + (copy-sequence (tags-table-files)))) + (or po-next-file-list (error (_"No files to process"))) + (setq end nil))) + + ;; Try finding a string after resuming the search position. + (message (_"Scanning %s...") (car po-next-file-list)) + (save-excursion + (setq buffer (find-file-noselect (car po-next-file-list))) + (set-buffer buffer) + (goto-char (or end (point-min))) + + (cond ((string-equal mode-name "C") + (let ((pair (po-find-c-string keywords))) + (setq start (car pair) + end (cdr pair)))) + ((string-equal mode-name "Emacs-Lisp") + (let ((pair (po-find-emacs-lisp-string keywords))) + (setq start (car pair) + end (cdr pair)))) + (t (message (_"Unknown source mode for PO mode, skipping...")) + (setq start nil + end nil)))) + + ;; Advance to next file if no string was found. + (if (not start) + (progn + (setq po-next-file-list (cdr po-next-file-list)) + (if po-next-file-list + (setq end nil) + (setq po-string-end nil) + (and po-highlighting (po-dehighlight po-marking-overlay)) + (error (_"All files processed")))) + + ;; Push the string just found string into a work buffer for study. + (po-with-temp-buffer + (insert (po-extract-unquoted buffer start end)) + (goto-char (point-min)) + + ;; Do not disregard if at least three letters in a row. + (if (re-search-forward "[A-Za-z][A-Za-z][A-Za-z]" nil t) + (setq found t) + + ;; Disregard if two letters, and more punctuations than letters. + (if (re-search-forward "[A-Za-z][A-Za-z]" nil t) + (let ((total (buffer-size))) + (goto-char (point-min)) + (while (re-search-forward "[A-Za-z]+" nil t) + (replace-match "" t t)) + (if (< (* 2 (buffer-size)) total) + (setq found t)))) + + ;; Disregard if single letters or no letters at all. + )))) + + ;; Ensure the string is being displayed. + + (if (one-window-p t) (split-window) (other-window 1)) + (switch-to-buffer buffer) + (goto-char start) + (or (pos-visible-in-window-p start) (recenter '(nil))) + (if (pos-visible-in-window-p end) + (goto-char end) + (goto-char end) + (recenter -1)) + (other-window 1) + (and po-highlighting (po-highlight po-marking-overlay start end buffer)) + + ;; Save the string for later commands. + (message (_"Scanning %s...done") (car po-next-file-list)) + (setq po-string-start start + po-string-end end))) + +(defun po-mark-found-string (keyword) + "Mark last found string in program sources as translatable, using KEYWORD." + (and po-highlighting (po-dehighlight po-marking-overlay)) + (let ((buffer (find-file-noselect (car po-next-file-list))) + (start po-string-start) + (end po-string-end) + line string) + + ;; Mark string in program sources. + (setq string (po-extract-unquoted buffer start end)) + (save-excursion + (set-buffer buffer) + (setq line (count-lines (point-min) start) + end (cond ((string-equal mode-name "C") + (po-mark-c-string start end keyword)) + ((string-equal mode-name "Emacs-Lisp") + (po-mark-emacs-lisp-string start end keyword)) + (t (error (_"Cannot mark in unknown source mode")))))) + (setq po-string-end end) + + ;; Add PO file entry. + (let ((buffer-read-only po-read-only)) + (goto-char (point-max)) + (insert "\n" (format "#: %s:%d\n" (car po-next-file-list) line)) + (save-excursion + (insert (po-eval-requoted string "msgid" nil) "msgstr \"\"\n")) + (setq po-untranslated-counter (1+ po-untranslated-counter)) + (po-update-mode-line-string)))) + +(defun po-mark-translatable () + "Mark last found string in program sources as translatable, using `_'." + (interactive) + (if (and po-string-start po-string-end) + (progn + (po-mark-found-string "_") + (setq po-string-start nil)) + (error (_"No such string")))) + +(defun po-select-mark-and-mark (arg) + "Mark last found string in program sources as translatable, ask for keywoard, +using completion. With prefix argument, just ask the name of a preferred +keyword for subsequent commands, also added to possible completions." + (interactive "P") + (if arg + (let ((keyword (list (read-from-minibuffer (_"Keyword: "))))) + (setq po-keywords (cons keyword (delete keyword po-keywords)))) + (if (and po-string-start po-string-end) + (let* ((default (car (car po-keywords))) + (keyword (completing-read (format (_"Mark with keywoard? [%s] ") + default) + po-keywords nil t ))) + (if (string-equal keyword "") (setq keyword default)) + (po-mark-found-string keyword) + (setq po-string-start nil)) + (error (_"No such string"))))) + +;;; Miscellaneous features. + +(defun po-help () + "Provide an help window for PO mode." + (interactive) + (po-with-temp-buffer + (insert po-help-display-string) + (goto-char (point-min)) + (save-window-excursion + (switch-to-buffer (current-buffer)) + (delete-other-windows) + (message (_"Type any character to continue")) + (po-read-event)))) + +(defun po-undo () + "Undo the last change to the PO file." + (interactive) + (let ((buffer-read-only po-read-only)) + (undo)) + (po-compute-counters nil)) + +(defun po-statistics () + "Say how many entries in each category, and the current position." + (interactive) + (po-compute-counters t)) + +(defun po-validate () + "Use `msgfmt' for validating the current PO file contents." + (interactive) + + ;; If modifications were done already, change the last revision date. + (if (buffer-modified-p) + (po-replace-revision-date)) + + ;; This `let' is for protecting the previous value of compile-command. + (let ((compile-command (concat po-msgfmt-program + " --statistics -c -v -o /dev/null " + buffer-file-name))) + (compile compile-command))) + +(defun po-guess-archive-name () + "Return the ideal file name for this PO file in the central archives." + (let (start-of-header end-of-header package version team) + (save-excursion + ;; Find the PO file header entry. + (goto-char (point-min)) + (re-search-forward po-any-msgstr-regexp) + (setq start-of-header (match-beginning 0) + end-of-header (match-end 0)) + ;; Get the package and version. + (goto-char start-of-header) + (if (re-search-forward + "\n\"Project-Id-Version:\\( GNU\\)? \\([^\n ]+\\) \\([^\n ]+\\)\\\\n\"$" + end-of-header t) + (setq package (buffer-substring (match-beginning 2) (match-end 2)) + version (buffer-substring (match-beginning 3) (match-end 3)))) + (if (or (not package) (string-equal package "PACKAGE") + (not version) (string-equal version "VERSION")) + (error (_"Project-Id-Version field does not have a proper value"))) + ;; Get the team. + (goto-char start-of-header) + (if (re-search-forward "\n\"Language-Team:.*<\\(.*\\)@li.org>\\\\n\"$" + end-of-header t) + (setq team (buffer-substring (match-beginning 1) (match-end 1)))) + (if (or (not team) (string-equal team "LL")) + (error (_"Language-Team field does not have a proper value"))) + ;; Compose the name. + (concat package "-" version "." team ".po")))) + +(defun po-guess-team-address () + "Return the team address related to this PO file." + (let (team) + (save-excursion + (goto-char (point-min)) + (re-search-forward po-any-msgstr-regexp) + (goto-char (match-beginning 0)) + (if (re-search-forward + "\n\"Language-Team: +\\(.*<\\(.*\\)@li.org>\\)\\\\n\"$" + (match-end 0) t) + (setq team (buffer-substring (match-beginning 2) (match-end 2)))) + (if (or (not team) (string-equal team "LL")) + (error (_"Language-Team field does not have a proper value"))) + (buffer-substring (match-beginning 1) (match-end 1))))) + +(defun po-send-mail () + "Start composing a letter, possibly including the current PO file." + (interactive) + (let* ((team-flag (y-or-n-p + (_"\ +Write to your team? (`n' means writing to translation project) "))) + (address (if team-flag + (po-guess-team-address) + po-translation-project-address))) + (if (not (y-or-n-p (_"Include current PO file? "))) + (apply po-compose-mail-function address + (read-string (_"Subject? ")) nil) + (if (buffer-modified-p) + (error (_"The file is not even saved, you did not validate it."))) + (if (and (y-or-n-p (_"You validated (`V') this file, didn't you? ")) + (or (zerop po-untranslated-counter) + (y-or-n-p + (format (_"%d entries are untranslated, include anyway? ") + po-untranslated-counter))) + (or (zerop po-fuzzy-counter) + (y-or-n-p + (format (_"%d entries are still fuzzy, include anyway? ") + po-fuzzy-counter))) + (or (zerop po-obsolete-counter) + (y-or-n-p + (format (_"%d entries are obsolete, include anyway? ") + po-obsolete-counter)))) + (let ((buffer (current-buffer)) + (name (po-guess-archive-name)) + (transient-mark-mode nil)) + (apply po-compose-mail-function address + (if team-flag + (read-string (_"Subject? ")) + (format "TP-Robot %s" name)) + nil) + (goto-char (point-min)) + (re-search-forward + (concat "^" (regexp-quote mail-header-separator) "\n")) + (save-excursion + (insert-buffer buffer) + (shell-command-on-region + (region-beginning) (region-end) + (concat po-gzip-uuencode-command " " name ".gz") t)))))) + (message "")) + +(defun po-confirm-and-quit () + "Confirm if quit should be attempted and then, do it. +This is a failsafe. Confirmation is asked if only the real quit would not." + (interactive) + (if (po-check-all-pending-edits) + (progn + (if (or (buffer-modified-p) + (> po-untranslated-counter 0) + (> po-fuzzy-counter 0) + (> po-obsolete-counter 0) + (y-or-n-p (_"Really quit editing this PO file? "))) + (po-quit)) + (message "")))) + +(defun po-quit () + "Save the PO file and kill buffer. However, offer validation if +appropriate and ask confirmation if untranslated strings remain." + (interactive) + (if (po-check-all-pending-edits) + (let ((quit t)) + + ;; Offer validation of newly modified entries. + (if (and (buffer-modified-p) + (not (y-or-n-p + (_"File was modified; skip validation step? ")))) + (progn + (message "") + (po-validate) + ;; If we knew that the validation was all successful, we should + ;; just quit. But since we do not know yet, as the validation + ;; might be asynchronous with PO mode commands, the safest is to + ;; stay within PO mode, even if this implies that another + ;; `po-quit' command will be later required to exit for true. + (setq quit nil))) + + ;; Offer to work on untranslated entries. + (if (and quit + (or (> po-untranslated-counter 0) + (> po-fuzzy-counter 0) + (> po-obsolete-counter 0)) + (not (y-or-n-p + (_"Unprocessed entries remain; quit anyway? ")))) + (progn + (setq quit nil) + (po-auto-select-entry))) + + ;; Clear message area. + (message "") + + ;; Or else, kill buffers and quit for true. + (if quit + (progn + (and (buffer-modified-p) (po-replace-revision-date)) + (save-buffer) + (kill-buffer (current-buffer))))))) + +;;; po-mode.el ends here diff --git a/debian/gettext-kde/gettext-kde-0.10.35/misc/tcl_gettext.c b/debian/gettext-kde/gettext-kde-0.10.35/misc/tcl_gettext.c new file mode 100644 index 00000000..f7fa6f3b --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/misc/tcl_gettext.c @@ -0,0 +1,165 @@ +/* tcl_gettext - Module implementing gettext interface for Tcl. + Copyright (C) 1995 Free Software Foundation, Inc. + Written by Ulrich Drepper <[email protected]>, December 1995. + +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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <libintl.h> +#include <locale.h> +#include <string.h> + +/* Data for Tcl interpreter interface. */ +#include "tcl.h" + +/* Prototypes for local functions. */ +static int +tcl_gettext (ClientData client_data, Tcl_Interp *interp, int argc, + char *argv[]); +static int +tcl_textdomain (ClientData client_data, Tcl_Interp *interp, int argc, + char *argv[]); +static int +tcl_bindtextdomain (ClientData client_data, Tcl_Interp *interp, int argc, + char *argv[]); + + +/* Initialization functions. Called from the tclAppInit.c/tkAppInit.c + or while the dynamic loading with Tcl7.x, x>= 5. */ +int +Gettext_Init (interp) + Tcl_Interp *interp; +{ + Tcl_CreateCommand (interp, "gettext", tcl_gettext, (ClientData) 0, + (Tcl_CmdDeleteProc *) NULL); + Tcl_CreateCommand (interp, "textdomain", tcl_textdomain, (ClientData) 0, + (Tcl_CmdDeleteProc *) NULL); + Tcl_CreateCommand (interp, "bindtextdomain", tcl_bindtextdomain, + (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); + + return TCL_OK; +} + + +static int +tcl_gettext (client_data, interp, argc, argv) + ClientData client_data; + Tcl_Interp *interp; + int argc; + char *argv[]; +{ + const char *domainname = NULL; + int category = LC_MESSAGES; + const char *msgid; + + /* The pointer which is assigned in the following statement might + reference an illegal part of the address space. But we don't use + this value before we know the pointer is correct. */ + msgid = argv[1]; + + switch (argc) + { + case 4: +#ifdef LC_CTYPE + if (strcmp (argv[3], "LC_CTYPE") == 0) + category = LC_CTYPE; + else +#endif +#ifdef LC_COLLATE + if (strcmp (argv[3], "LC_COLLATE") == 0) + category = LC_COLLATE; + else +#endif +#ifdef LC_MESSAGES + if (strcmp (argv[3], "LC_MESSAGES") == 0) + category = LC_MESSAGES; + else +#endif +#ifdef LC_MONETARY + if (strcmp (argv[3], "LC_MONETARY") == 0) + category = LC_MONETARY; + else +#endif +#ifdef LC_NUMERIC + if (strcmp (argv[3], "LC_NUMERIC") == 0) + category = LC_NUMERIC; + else +#endif +#ifdef LC_TIME + if (strcmp (argv[3], "LC_TIME") == 0) + category = LC_TIME; + else +#endif + { + interp->result = gettext ("illegal third argument"); + return TCL_ERROR; + } + /* FALLTHROUGH */ + + case 3: + domainname = argv[1]; + msgid = argv[2]; + /* FALLTHROUGH */ + + case 2: + interp->result = dcgettext (domainname, msgid, category); + break; + + default: + interp->result = gettext ("wrong number of arguments"); + return TCL_ERROR; + } + + return TCL_OK; +} + + +static int +tcl_textdomain (client_data, interp, argc, argv) + ClientData client_data; + Tcl_Interp *interp; + int argc; + char *argv[]; +{ + if (argc != 2) + { + interp->result = gettext ("wrong number of arguments"); + return TCL_ERROR; + } + + interp->result = textdomain (argv[1]); + + return TCL_OK; +} + + +static int +tcl_bindtextdomain (client_data, interp, argc, argv) + ClientData client_data; + Tcl_Interp *interp; + int argc; + char *argv[]; +{ + if (argc != 3) + { + interp->result = gettext ("wrong number of arguments"); + return TCL_ERROR; + } + + return bindtextdomain (argv[1], argv[2]) == NULL ? TCL_ERROR : TCL_OK; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/missing b/debian/gettext-kde/gettext-kde-0.10.35/missing new file mode 100755 index 00000000..cbe2b0ef --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/missing @@ -0,0 +1,188 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997 Free Software Foundation, Inc. +# Franc,ois Pinard <[email protected]>, 1996. + +# 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, 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. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing - GNU libit 0.0" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`configure.in'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`configure.in'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`configure.in'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER([^):]*:\([^)]*\)).*/\1/p' configure.in` + if test -z "$files"; then + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^):]*\)).*/\1/p' configure.in` + test -z "$files" || files="$files.in" + else + files=`echo "$files" | sed -e 's/:/ /g'` + fi + test -z "$files" && files="config.h.in" + touch $files + ;; + + automake) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print \ + | sed 's/^\(.*\).am$/touch \1.in/' \ + | sh + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/debian/gettext-kde/gettext-kde-0.10.35/mkinstalldirs b/debian/gettext-kde/gettext-kde-0.10.35/mkinstalldirs new file mode 100755 index 00000000..a01481be --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/mkinstalldirs @@ -0,0 +1,40 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman <[email protected]> +# Created: 1993-05-16 +# Public domain + +# $Id: mkinstalldirs,v 1.10 1996/05/03 07:37:52 friedman Exp $ + +errstatus=0 + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" 1>&2 + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/ChangeLog b/debian/gettext-kde/gettext-kde-0.10.35/po/ChangeLog new file mode 100644 index 00000000..d1be00ff --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/ChangeLog @@ -0,0 +1,496 @@ +1998-04-28 18:07 Ulrich Drepper <[email protected]> + + * po/Makefile.in.in: Only try to put newly generated .pot in place + when the generation succeeded. + +1997-09-10 00:30 Ulrich Drepper <[email protected]> + + * Makefile.in.in (install-data-yes): Use mkinstalldirs with + $(SHELL). + +1997-08-21 15:01 Ulrich Drepper <[email protected]> + + * Makefile.in.in: Change copyright. + +1997-08-16 00:13 Ulrich Drepper <[email protected]> + + * Makefile.in.in (install-data-yes): Don't change directory to + install. + Reported by Kaveh R. Ghazi <[email protected]>. + +1997-08-15 22:45 Ulrich Drepper <[email protected]> + + * Makefile.in.in (MKINSTALLDIRS): Use top_srcdir to find script. + Patch by Akim Demaille <[email protected]>. + +1997-05-01 03:43 Ulrich Drepper <[email protected]> + + * Makefile.in.in (maintainer-clean): Remove GMOFILES. (POTFILES): + Don't redirect output directly to destination file. + Patch by Jim Meyering <[email protected]>. + +Tue Aug 27 02:04:45 1996 Ulrich Drepper <[email protected]> + + * ko.po: New version of korean translation. + + * es.po: Initial revision + +Tue Aug 20 01:40:28 1996 Ulrich Drepper <[email protected]> + + * fr.po: Update from Franc,ois of 960819. + +Sun Aug 18 20:47:47 1996 Ulrich Drepper <[email protected]> + + * pl.po: Update 960818. + +Thu Jul 18 19:00:11 1996 Ulrich Drepper <[email protected]> + + * Makefile.in.in (distdir): Again work around shells which cannot + handle empty `for' list. Reported by Jim Meyering. + +Tue Jul 9 21:20:00 1996 Ulrich Drepper <[email protected]> + + * Makefile.in.in (install-data): Add indirection so that nothing + is installed if no internationalization is wanted. + (install-data-no, install-data-yes): New goals. install-data-yes + does the real work. Reported by Kjetil Torgrim Homme. + +Sat Jul 6 11:18:01 1996 Jim Meyering <[email protected]> + + * Makefile.in.in (install-data): Use $(top_srcdir) instead of + $(top-srcdir). + +Wed Jun 26 11:28:36 1996 Ulrich Drepper <[email protected]> + + * Makefile.in.in (install-data): Add another `else' clause for + those buggy systems. Patch by Fred Fish <[email protected]>. + +Sat Jun 22 04:58:22 1996 Ulrich Drepper <[email protected]> + + * Makefile.in.in (MKINSTALLDIRS): New variable. Path to + mkinstalldirs script. + (install): use MKINSTALLDIRS variable or if the script is not present + try to find it in the $top_scrdir). + +Fri Jun 21 01:21:33 1996 Ulrich Drepper <[email protected]> + + * Makefile.in.in (install-data): Use @ to prevent printing the + command, but use echo to inform user what is installed. + +Mon Jun 3 02:39:24 1996 Ulrich Drepper <[email protected]> + + * Makefile.in.in (installcheck): New goal to fulfill needs of + automake's distcheck. + (install): Combine with install-src goal. The additional installation + is done if $(PACKAGE) = gettext. + (install-src): Goal removed. + +Sat Jun 1 11:50:11 1996 Ulrich Drepper <[email protected]> + + * Makefile.in.in (dvi, info, tags): New goals added. + Reported by Jim Meyering. + +Fri May 31 22:55:44 1996 Karl Heuer <[email protected]> + + * Makefile.in.in ($(PACKAGE).pot): If xgettext is not found and + therefore $(XGETTEXT) is set to : nothing is created. In this + case nothing is done. + +Fri May 31 22:33:52 1996 Karl Heuer <[email protected]> + + * Makefile.in.in (stamp-cat-id, mostlyclean): Avoid filename with + more than 14 characters. Rename cat-id-tbl.tmp.c to + cat-id-tbl.tmp. + +Mon May 27 23:42:16 1996 Arne H. Juul <[email protected]> + + * Makefile.in.in (install-data): Work around another Buglix + /bin/sh sillyness. + +Thu Apr 4 13:02:56 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (all-gettext): We must create the catalogs. + + * Makefile.in.in (distclean): Remove *.cat.m files generated by + some gencat programs. + + * Makefile.in.in: When using GNU gettext tools prefer just built + binaries in src/ subdirectory. For all packages but GNU gettext + itself this will not change anything. + +Tue Apr 2 16:28:54 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (all-gettext): New goal. Same as all-no. + + * Makefile.in.in (install-data): Some systems using catgets() + install two files: XXX.cat and XXX.cat.m. Handle this case. + (uninstall): Remove .cat.m files, too. + Reported by Marcus Daniels. + + * Makefile.in.in (MSGMERGE): Remove -f option. This is the + default now. + +Mon Mar 25 00:05:18 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (MSGMERGE): Always use -f option. + +Sun Mar 24 23:25:01 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in.in: Don't use tupdate anymore. msgmerge seems to + work now. + +Sat Mar 2 00:47:48 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (all-no): Rename from all_no. + +Thu Feb 15 04:38:29 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (all): Define to `all-@USE_NLS@'. + (all-yes, all_no): New goals. `all-no' is noop, `all-yes' + is former all. + +Sun Dec 24 14:21:20 1995 Jun Young <[email protected]> + + * ko.po: Initial revision. + +Tue Dec 19 22:11:33 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (Makefile): Explicitly use $(SHELL) for running + shell scripts. + +Fri Dec 15 17:40:09 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (install-data): Simpler shell code by Andreas + Schwab. + +Tue Dec 5 11:57:35 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (mostlyclean): + Remove *.o files. Reported by Larry Schwimmer. + +Sun Dec 3 01:21:55 1995 Ulrich Drepper <drepper@myware> + + * fr.po: Version for 0.10 by Franc,ois Pinard. + +Sun Nov 26 02:26:56 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (mostlyclean): Remove cat-id-tbl.tmp.c. + +Sun Nov 26 02:00:02 1995 Kaveh R. Ghazi <[email protected]> + + * Makefile.in.in (.po.cat): Add missing line continuation. + +Sat Nov 25 16:53:44 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (CPPFLAGS): New variable. Initialize from @CPPFLAGS@. + +Sat Nov 25 02:39:33 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (.po.cat): New rules substituting implicit rules. + AIX 3.x's make does not know implicit, transitive rules. Reported + by Nelson Beebe. + +Fri Nov 24 19:57:32 1995 Ulrich Drepper <drepper@myware> + + * de.po: New format after xgettext changes. + +Tue Nov 21 16:32:10 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (DEFS): Add variable to get -DHAVE_CONFIG_H. + +Sat Nov 11 17:49:33 1995 Ulrich Drepper <drepper@myware> + + * de.po: Messages of new programs msgmerge and msgunfmt. + + * Makefile.in.in (POTFILES): Correct bug after change to single quotes. + + * POTFILES.in: Add new files after adding Peter Miller's files. + +Thu Nov 9 01:48:59 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in: + ($(PACKAGE).pot): Don't give list of input files on command line. Use + POTFILES.in file instead. + + * de.po: + Corrections after splitting usage message in xgettext.c and gettextp.c. + + * de.po: Adjust for new message due to --directory option in xgettext. + +Wed Nov 8 23:46:41 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (.po.pox): Find .pot file in $(srcdir). + +Mon Nov 6 21:32:22 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (.po.gmo): Finally make ultimate rule which + places .gmo always on $(srcdir). Patch by Franc,ois Pinard. + +Mon Nov 6 17:08:05 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in: Some more cleanups by Franc,ois Pinard. + +Mon Nov 6 16:46:24 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (dist): Force order for parallel build. + + * Makefile.in.in: + ($(PACKAGE).pot): Address $(PACKAGE).pot file in $(srcdir). + `rm -f' old file instead of using `mv -f'. + + * fr.po: Translations for version 0.9.8 by Franc,ois Pinard. + +Mon Nov 6 00:46:30 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in: + [implicit rules]: Use $< instead of $*. I hope this is portable but + it seems to be the only way to use the VPATH. + +Sun Nov 5 20:19:00 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in: + ($(PACKAGE).pot): We cannot use _N as the abbreviation. Sun uses this + in ctype.h. Use N_ instead. + + * Makefile.in.in (dist-gettext): Make synonym for dist. + +Sun Nov 5 16:35:52 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (.po.gmo): Remove .gmo file prior generation. + +Sun Nov 5 12:42:11 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (po.msg): Remove $(srcdir) path. + (stamp-cat-id): Place stamp-cat-id and cat-id-tbl.c file in $(srcdir). + + * Makefile.in.in (.po.pox, .po.mo, .po.gmo): Remove $(scrdir) path + because we now only have one version of each file so that we do + not rely on make's VPATH. + + * Makefile.in.in (update-po): + Enter $(srcdir) before doing anything and don't remove + output file of tupdate if the exit code is not zero. + + * Makefile.in.in (do-dist): Suppress error message when ln failed. + + * Makefile.in.in (dist): Split goal. Call two new rules to get + correct sequence. + (update-po): Update .po files by calling tupdate. + (do-dist): Actually write files to $(distdir). The dependency + makes sure that especially the .gmo have a correct time stamp. + + * Makefile.in.in: ($(PACKAGE).pot): Replace _C by _N. + +Fri Nov 3 00:37:26 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in: + ($(PACKAGE).pot): Keyword for marking string constants is now _C + instrad of _GTM. Suggested by Franc,ois Pinard. + +Thu Nov 2 01:36:20 1995 Ulrich Drepper <drepper@myware> + + * fr.po: Version for 0.9.5 by Franc,ois. + +Wed Nov 1 10:58:59 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (dist): Protect touch $(GMOFILES) against empty + $(GMOFILES). Reported by Tom Troley. + (dist, POTFILES): Use single instead of double quotes wherever + possible. + + * Makefile.in.in (install-data, uninstall, dist): Don't use if + test anymore. Using a variable should be all we need to prevent + errors. + + * Makefile.in.in (install, uninstall, dist): + Correct handling for case where + $(CATALOGS) is empty. Reported by Tom Tromey. + +Tue Oct 31 22:33:21 1995 Ulrich Drepper <drepper@myware> + + * de.po: Update for 0.9.6. + +Fri Oct 27 02:23:26 1995 Ulrich Drepper <drepper@myware> + + * sv.po: Initial revision. + +Mon Sep 25 22:32:23 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (.po.gmo): + Undo last change. .gmo is now legal suffix. Proposed by + Marcus Daniels. + +Sun Sep 24 12:32:06 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (.po.gmo): + Add missing move after last change in msgfmt program. + +Sat Sep 23 14:41:28 1995 Ulrich Drepper <drepper@myware> + + * de.po: All translations for 0.9.4. + +Thu Sep 21 01:08:01 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (dist): + Protect goal against empty CATALOGS and/or GMOFILES variables. + + * Makefile.in.in (PACKAGE.pot): Add _GMT as an additional keyword. + +Mon Sep 18 11:12:26 1995 Ulrich Drepper <drepper@myware> + + * de.po: Adjust for msgcmp program messages. + + * POTFILES.in: Add src/msgcmp.c, src/po-gram.gen.c, and src/po-lex.c. + +Sat Aug 19 17:34:29 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in: Make install-src depend on install. This helps + gettext to install the sources and other packages can use the + install goal. + +Sat Aug 19 11:29:37 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (install-src): Better indentation. + (uninstall): Remove po-Makefile.in.in. + +Fri Aug 18 23:43:39 1995 Ulrich Drepper <drepper@myware> + + * [email protected]: Initial revision + + * no.po: Version for 0.9.2. + + * Makefile.in.in: + ($(PACKAGE).pot): Now runs from $(top_srcdir). This helps to keep the + generate #: lines clean. + + * de.po: For version 0.9.3. + + * Makefile.in.in (install-data): + Added missing ';' and fix wrong variable reference. + Reported by Franc,ois Pinard. + +Tue Aug 15 12:54:09 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (gnulocaledir): + Always point to share/ subdirectory to install .gmo files. + +Tue Aug 15 07:08:45 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (DEFS): Remove unneeded variable. + + * Makefile.in.in (POTFILES): Correct case where $(srcdir) = ".". + +Tue Aug 15 06:18:28 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (POTFILES): + Correct sed command after change of format. Done in aclocal.m4 + on 950813. + +Mon Aug 14 23:47:30 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (gettextsrcdir): + Directory in which Makefile.in.in is installed for use + in gettextize shell script. + +Sun Aug 13 14:19:38 1995 Ulrich Drepper <drepper@myware> + + * POTFILES.in: Paths to files are now relative to srcdir, not to po/. + +Tue Aug 8 13:09:17 1995 Ulrich Drepper <drepper@myware> + + * no.po: Changes for 0.9.1 by Karl O/ygard. + + * no.po: Change for 0.9 by Karl O/ygard. + +Fri Aug 4 15:46:32 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (dist): Remove `copying instead' message. + +Wed Aug 2 23:38:23 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (.po.pox): Add $(srcdir) path to .po file. + + * no.po, fr.po, de.po: Version for 0.9. + +Tue Aug 1 23:48:49 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (all): Add cat-id-tbl.c as dependency. + +Tue Aug 1 08:43:54 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (install-data, uninstall, dist): + Use sed instead of expr to get basename. + +Sat Jul 29 22:57:04 1995 Ulrich Drepper <drepper@myware> + + * no.po: Initial revision. + By norwegian Translation Team. + +Tue Jul 25 23:45:00 1995 Ulrich Drepper <drepper@myware> + + * POTFILES.in: Change header to include copyright. + +Wed Jul 19 23:56:03 1995 Ulrich Drepper <drepper@myware> + + * POTFILES.in: Don't mention libiberty. + Reported by Franc,ois Pinard. + + * de.po: + Revert to 1.22, because messages are gone. Some scripts still + seem to have bugs... + +Tue Jul 18 16:20:35 1995 Ulrich Drepper <drepper@myware> + + * gettext.pot, de.po, fr.po: Version for 0.8. + +Sun Jul 16 00:58:09 1995 Ulrich Drepper <drepper@myware> + + * fr.po: Latest version (for 0.7.3) by Franc,ois. + +Thu Jul 13 22:26:18 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (TUPDATE): + Don't address tupdate.perl in ../src. Now it is assumed that + tupdate is already installed in a directory in PATH. + +Thu Jul 13 01:37:15 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (check): New goal. + (.po.msg): po-to-msg.sed is now called po2msg.sed. + (stamp-cat-id): po-to-tbl.sed is now called po2tbl.sed. + +Wed Jul 12 15:14:23 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (.po.gmo): + Strange make: if both files are found through VPATH no explicit + path must be given. + +Tue Jul 11 21:51:01 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in (TUPDATE): tupdate is now found in ../src + +Tue Jul 4 00:45:26 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in: Remove unnecessary $(srcdir). + Correct path to po-to-msg.sed script for .po.msg goal. + +Mon Jul 3 14:52:06 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in.in: Installation of .gmo files need if. + (POTFILES,Makefile): Correct path to original version. + (TRANSCSRCS): Renamed to POTFILES. + + * fr.po: Update to new .po file format and version 0.7. + +Sun Jul 2 23:59:23 1995 Ulrich Drepper <drepper@myware> + + * de.po: Update to new .po file format and version 0.7. + Adopt for new multi-line format. + +Sun Jul 2 02:19:20 1995 Ulrich Drepper <drepper@myware> + + * First official release. This directory contains the sources + of the message catalog. These are given in the .po file format + specified in the Uniforum proposal. With the help of the system's + tools or the ones provided by this package every other format + needed can be constructed. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/Makefile.in.in b/debian/gettext-kde/gettext-kde-0.10.35/po/Makefile.in.in new file mode 100644 index 00000000..111b40fc --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/Makefile.in.in @@ -0,0 +1,248 @@ +# Makefile for program source directory in GNU NLS utilities package. +# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <[email protected]> +# +# This file file be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +SHELL = /bin/sh +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datadir = $(prefix)/@DATADIRNAME@ +localedir = $(datadir)/locale +gnulocaledir = $(prefix)/share/locale +gettextsrcdir = $(prefix)/share/gettext/po +subdir = po + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@ + +CC = @CC@ +GENCAT = @GENCAT@ +GMSGFMT = PATH=../src:$$PATH @GMSGFMT@ +MSGFMT = @MSGFMT@ +XGETTEXT = PATH=../src:$$PATH @XGETTEXT@ +MSGMERGE = PATH=../src:$$PATH msgmerge + +DEFS = @DEFS@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ + +INCLUDES = -I.. -I$(top_srcdir)/intl + +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) + +SOURCES = cat-id-tbl.c +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \ +stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES) + +POTFILES = \ + +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +INSTOBJEXT = @INSTOBJEXT@ + +.SUFFIXES: +.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat + +.c.o: + $(COMPILE) $< + +.po.pox: + $(MAKE) $(PACKAGE).pot + $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox + +.po.mo: + $(MSGFMT) -o $@ $< + +.po.gmo: + file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ + && rm -f $$file && $(GMSGFMT) -o $$file $< + +.po.cat: + sed -f ../intl/po2msg.sed < $< > $*.msg \ + && rm -f $@ && $(GENCAT) $@ $*.msg + + +all: all-@USE_NLS@ + +all-yes: cat-id-tbl.c $(CATALOGS) +all-no: + +$(srcdir)/$(PACKAGE).pot: $(POTFILES) + $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \ + --add-comments --keyword=_ --keyword=N_ \ + --files-from=$(srcdir)/POTFILES.in \ + && test ! -f $(PACKAGE).po \ + || ( rm -f $(srcdir)/$(PACKAGE).pot \ + && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot ) + +$(srcdir)/cat-id-tbl.c: stamp-cat-id; @: +$(srcdir)/stamp-cat-id: $(PACKAGE).pot + rm -f cat-id-tbl.tmp + sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \ + | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp + if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \ + rm cat-id-tbl.tmp; \ + else \ + echo cat-id-tbl.c changed; \ + rm -f $(srcdir)/cat-id-tbl.c; \ + mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \ + fi + cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id + + +install: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ +install-data-no: all +install-data-yes: all + if test -r "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $(datadir); \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $(datadir); \ + fi + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + case "$$cat" in \ + *.gmo) destdir=$(gnulocaledir);; \ + *) destdir=$(localedir);; \ + esac; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + dir=$$destdir/$$lang/LC_MESSAGES; \ + if test -r "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $$dir; \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \ + fi; \ + if test -r $$cat; then \ + $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ + echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \ + else \ + $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \ + fi; \ + if test -r $$cat.m; then \ + $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ + else \ + if test -r $(srcdir)/$$cat.m ; then \ + $(INSTALL_DATA) $(srcdir)/$$cat.m \ + $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ + else \ + true; \ + fi; \ + fi; \ + done + if test "$(PACKAGE)" = "gettext"; then \ + if test -r "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $(gettextsrcdir); \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ + fi; \ + $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ + $(gettextsrcdir)/Makefile.in.in; \ + else \ + : ; \ + fi + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ + rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ + rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ + rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ + done + rm -f $(gettextsrcdir)/po-Makefile.in.in + +check: all + +cat-id-tbl.o: ../intl/libgettext.h + +dvi info tags TAGS ID: + +mostlyclean: + rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f $(GMOFILES) + +distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: update-po $(DISTFILES) + dists="$(DISTFILES)"; \ + for file in $$dists; do \ + ln $(srcdir)/$$file $(distdir) 2> /dev/null \ + || cp -p $(srcdir)/$$file $(distdir); \ + done + +update-po: Makefile + $(MAKE) $(PACKAGE).pot + PATH=`pwd`/../src:$$PATH; \ + cd $(srcdir); \ + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + mv $$lang.po $$lang.old.po; \ + echo "$$lang:"; \ + if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \ + rm -f $$lang.old.po; \ + else \ + echo "msgmerge for $$cat failed!"; \ + rm -f $$lang.po; \ + mv $$lang.old.po $$lang.po; \ + fi; \ + done + +POTFILES: POTFILES.in + ( if test 'x$(srcdir)' != 'x.'; then \ + posrcprefix='$(top_srcdir)/'; \ + else \ + posrcprefix="../"; \ + fi; \ + rm -f $@-t $@ \ + && (sed -e '/^#/d' -e '/^[ ]*$$/d' \ + -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/[email protected] \ + | sed -e '$$s/\\$$//') > $@-t \ + && chmod a-w $@-t \ + && mv $@-t $@ ) + +Makefile: Makefile.in.in ../config.status POTFILES + cd .. \ + && CONFIG_FILES=$(subdir)/[email protected] CONFIG_HEADERS= \ + $(SHELL) ./config.status + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/POTFILES.in b/debian/gettext-kde/gettext-kde-0.10.35/po/POTFILES.in new file mode 100644 index 00000000..1264e5a8 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/POTFILES.in @@ -0,0 +1,20 @@ +# List of files which containing translatable strings. +# Copyright (C) 1995, 1998 Free Software Foundation, Inc. + +# Files from the compatibility library +lib/error.c +lib/getopt.c +lib/xmalloc.c + +# Package source files +src/gettextp.c +src/message.c +src/msgcmp.c +src/msgcomm.c +src/msgfmt.c +src/msgmerge.c +src/msgunfmt.c +src/po-gram.gen.c +src/po-lex.c +src/xget-lex.c +src/xgettext.c diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/cat-id-tbl.c b/debian/gettext-kde/gettext-kde-0.10.35/po/cat-id-tbl.c new file mode 100644 index 00000000..68eac4cd --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/cat-id-tbl.c @@ -0,0 +1,283 @@ +/* Automatically generated by po2tbl.sed from gettext.pot. */ + +#if HAVE_CONFIG_H +# include <config.h> +#endif + +#include "libgettext.h" + +const struct _msg_ent _msg_tbl[] = { + {"", 1}, + {"Unknown system error", 2}, + {"%s: option `%s' is ambiguous\n", 3}, + {"%s: option `--%s' doesn't allow an argument\n", 4}, + {"%s: option `%c%s' doesn't allow an argument\n", 5}, + {"%s: option `%s' requires an argument\n", 6}, + {"%s: unrecognized option `--%s'\n", 7}, + {"%s: unrecognized option `%c%s'\n", 8}, + {"%s: illegal option -- %c\n", 9}, + {"%s: invalid option -- %c\n", 10}, + {"%s: option requires an argument -- %c\n", 11}, + {"%s: option `-W %s' is ambiguous\n", 12}, + {"%s: option `-W %s' doesn't allow an argument\n", 13}, + {"Memory exhausted", 14}, + {"\ +Copyright (C) %s Free Software Foundation, Inc.\n\ +This is free software; see the source for copying conditions. There is NO\n\ +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n", 15}, + {"Written by %s.\n", 16}, + {"missing arguments", 17}, + {"too many arguments", 18}, + {"Try `%s --help' for more information.\n", 19}, + {"\ +Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n\ + -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n\ + -e enable expansion of some escape sequences\n\ + -E (ignored for compatibility)\n\ + -h, --help display this help and exit\n\ + -n suppress trailing newline\n\ + -V, --version display version information and exit\n\ + [TEXTDOMAIN] MSGID retrieve translated message corresponding\n\ + to MSGID from TEXTDOMAIN\n", 20}, + {"\ +\n\ +If the TEXTDOMAIN parameter is not given, the domain is determined from the\n\ +environment variable TEXTDOMAIN. If the message catalog is not found in the\n\ +regular directory, another location can be specified with the environment\n\ +variable TEXTDOMAINDIR.\n\ +When used with the -s option the program behaves like the `echo' command.\n\ +But it does not simply copy its arguments to stdout. Instead those messages\n\ +found in the selected catalog are translated.\n\ +Standard search directory: %s\n", 21}, + {"Report bugs to <[email protected]>.\n", 22}, + {"\ +internationalized messages should not contain the `\\%c' escape sequence", 23}, + {"cannot create output file \"%s\"", 24}, + {"standard output", 25}, + {"error while writing \"%s\" file", 26}, + {"no input files given", 27}, + {"exactly 2 input files required", 28}, + {"\ +Usage: %s [OPTION] def.po ref.po\n\ +Mandatory arguments to long options are mandatory for short options too.\n\ + -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n\ + -h, --help display this help and exit\n\ + -V, --version output version information and exit\n\ +\n\ +Compare two Uniforum style .po files to check that both contain the same\n\ +set of msgid strings. The def.po file is an existing PO file with the\n\ +old translations. The ref.po file is the last created PO file\n\ +(generally by xgettext). This is useful for checking that you have\n\ +translated each and every message in your program. Where an exact match\n\ +cannot be found, fuzzy matching is used to produce better diagnostics.\n", 29}, + {"this message is used but not defined...", 30}, + {"...but this definition is similar", 31}, + {"this message is used but not defined in %s", 32}, + {"warning: this message is not used", 33}, + {"duplicate message definition", 34}, + {"...this is the location of the first definition", 35}, + {"this message has no definition in the \"%s\" domain", 36}, + {"while preparing output", 37}, + {"%s and %s are mutually exclusive", 38}, + {"at least two files must be specified", 39}, + {"impossible selection criteria specified (%d < n < %d)", 40}, + {"\ +Usage: %s [OPTION] INPUTFILE ...\n\ +Mandatory arguments to long options are mandatory for short options too.\n\ + -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n\ + -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n\ + -e, --no-escape do not use C escapes in output (default)\n\ + -E, --escape use C escapes in output, no extended chars\n\ + -f, --files-from=FILE get list of input files from FILE\n\ + --force-po write PO file even if empty\n\ + -F, --sort-by-file sort output by file location\n\ + -h, --help display this help and exit\n", 41}, + {"\ + -i, --indent write the .po file using indented style\n\ + --no-location do not write '#: filename:line' lines\n\ + -n, --add-location generate '#: filename:line' lines \ +(default)\n\ + --omit-header don't write header with `msgid \"\"' entry\n\ + -o, --output=FILE write output to specified file\n\ + -p, --output-dir=DIR output files will be placed in directory \ +DIR\n\ + -s, --sort-output generate sorted output and remove \ +duplicates\n\ + --strict write out strict Uniforum conforming .po \ +file\n\ + -T, --trigraphs understand ANSI C trigraphs for input\n\ + -u, --unique shorthand for --less-than=2, requests\n\ + that only unique messages be printed\n", 42}, + {"\ + -V, --version output version information and exit\n\ + -w, --width=NUMBER set output page width\n\ + -<, --less-than=NUMBER print messages with less than this many\n\ + definitions, defaults to infinite if not\n\ + set\n\ + ->, --more-than=NUMBER print messages with more than this many\n\ + definitions, defaults to 1 if not set\n\ +\n\ +Find messages which are common to two or more of the specified PO files.\n\ +By using the --more-than option, greater commonality may be requested\n\ +before messages are printed. Conversely, the --less-than option may be\n\ +used to specify less commonality before messages are printed (i.e.\n\ +--less-than=2 will only print the unique messages). Translations,\n\ +comments and extract comments will be preserved, but only from the first\n\ +PO file to define them. File positions from all PO files will be\n\ +preserved.\n", 43}, + {"error while opening \"%s\" for reading", 44}, + {"this file may not contain domain directives", 45}, + {"no input file given", 46}, + {"error while opening \"%s\" for writing", 47}, + {"%d translated messages", 48}, + {", %d fuzzy translations", 49}, + {", %d untranslated messages", 50}, + {"\ +Usage: %s [OPTION] filename.po ...\n\ +Generate binary message catalog from textual translation description.\n\ +\n\ +Mandatory arguments to long options are mandatory for short options too.\n\ + -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n\ + -c, --check perform language dependent checks on strings\n\ + -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n\ + -f, --use-fuzzy use fuzzy entries in output\n\ + -h, --help display this help and exit\n\ + --no-hash binary file will not include the hash table\n\ + -o, --output-file=FILE specify output file name as FILE\n\ + --statistics print statistics about translations\n\ + --strict enable strict Uniforum mode\n\ + -v, --verbose list input file anomalies\n\ + -V, --version output version information and exit\n\ +\n\ +Giving the -v option more than once increases the verbosity level.\n\ +\n\ +If input file is -, standard input is read. If output file is -,\n\ +output is written to standard output.\n", 51}, + {"while creating hash table", 52}, + {"%s: warning: no header entry found", 53}, + {"domain name \"%s\" not suitable as file name", 54}, + {"domain name \"%s\" not suitable as file name: will use prefix", 55}, + {"`domain %s' directive ignored", 56}, + {"empty `msgstr' entry ignored", 57}, + {"fuzzy `msgstr' entry ignored", 58}, + {"headerfield `%s' missing in header", 59}, + {"header field `%s' should start at beginning of line", 60}, + {"some header fields still have the initial default value", 61}, + {"field `%s' still has initial default value", 62}, + {"%s: warning: source file contains fuzzy translation", 63}, + {"`msgid' and `msgstr' entries do not both begin with '\\n'", 64}, + {"`msgid' and `msgstr' entries do not both end with '\\n'", 65}, + {"number of format specifications in `msgid' and `msgstr' does not match", 66}, + {"format specifications for argument %u are not the same", 67}, + {"\ +Usage: %s [OPTION] def.po ref.po\n\ +Mandatory arguments to long options are mandatory for short options too.\n\ + -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n\ + -e, --no-escape do not use C escapes in output (default)\n\ + -E, --escape use C escapes in output, no extended chars\n\ + --force-po write PO file even if empty\n\ + -h, --help display this help and exit\n\ + -i, --indent indented output style\n\ + -o, --output-file=FILE result will be written to FILE\n\ + --no-location suppress '#: filename:line' lines\n\ + --add-location preserve '#: filename:line' lines (default)\n\ + --strict strict Uniforum output style\n\ + -v, --verbose increase verbosity level\n\ + -V, --version output version information and exit\n\ + -w, --width=NUMBER set output page width\n", 68}, + {"\ +\n\ +Merges two Uniforum style .po files together. The def.po file is an\n\ +existing PO file with the old translations which will be taken over to\n\ +the newly created file as long as they still match; comments will be\n\ +preserved, but extract comments and file positions will be discarded.\n\ +The ref.po file is the last created PO file (generally by xgettext), any\n\ +translations or comments in the file will be discarded, however dot\n\ +comments and file positions will be preserved. Where an exact match\n\ +cannot be found, fuzzy matching is used to produce better results. The\n\ +results are written to stdout unless an output file is specified.\n", 69}, + {"\ +%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete \ +%d.\n", 70}, + {" done.\n", 71}, + {"\ +Usage: %s [OPTION] [FILE]...\n\ +Mandatory arguments to long options are mandatory for short options too.\n\ + -e, --no-escape do not use C escapes in output (default)\n\ + -E, --escape use C escapes in output, no extended chars\n\ + --force-po write PO file even if empty\n\ + -h, --help display this help and exit\n\ + -i, --indent write indented output style\n\ + -o, --output-file=FILE write output into FILE instead of standard output\n\ + --strict write strict uniforum style\n\ + -V, --version output version information and exit\n\ + -w, --width=NUMBER set output page width\n", 72}, + {"\ +\n\ +Convert binary .mo files to Uniforum style .po files.\n\ +Both little-endian and big-endian .mo files are handled.\n\ +If no input file is given or it is -, standard input is read.\n\ +By default the output is written to standard output.\n", 73}, + {"error while reading \"%s\"", 74}, + {"file \"%s\" truncated", 75}, + {"seek \"%s\" offset %ld failed", 76}, + {"file \"%s\" is not in GNU .mo format", 77}, + {"missing `msgstr' section", 78}, + {"found %d fatal errors", 79}, + {"too many errors, aborting", 80}, + {"keyword \"%s\" unknown", 81}, + {"illegal control sequence", 82}, + {"end-of-line within string", 83}, + {"end-of-file within string", 84}, + {"standard input", 85}, + {"%s:%d: warning: unterminated character constant", 86}, + {"%s:%d: warning: unterminated string literal", 87}, + {"--join-existing cannot be used when output is written to stdout", 88}, + {"warning: file `%s' extension `%s' is unknown; will try C", 89}, + {"\ +Usage: %s [OPTION] INPUTFILE ...\n\ +Extract translatable string from given input files.\n\ +\n\ +Mandatory arguments to long options are mandatory for short options too.\n\ + -a, --extract-all extract all strings\n\ + -c, --add-comments[=TAG] place comment block with TAG (or those\n\ + preceding keyword lines) in output file\n\ + -C, --c++ shorthand for --language=C++\n\ + --debug more detailed formatstring recognision result\n\ + -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n\ + -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n\ + -e, --no-escape do not use C escapes in output (default)\n\ + -E, --escape use C escapes in output, no extended chars\n\ + -f, --files-from=FILE get list of input files from FILE\n\ + --force-po write PO file even if empty\n\ + --foreign-user omit FSF copyright in output for foreign user\n\ + -F, --sort-by-file sort output by file location\n", 90}, + {"\ + -h, --help display this help and exit\n\ + -i, --indent write the .po file using indented style\n\ + -j, --join-existing join messages with existing file\n\ + -k, --keyword[=WORD] additonal keyword to be looked for (without\n\ + WORD means not to use default keywords)\n\ + -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n\ + -L, --language=NAME recognise the specified language (C, C++, PO),\n\ + otherwise is guessed from file extension\n\ + -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n\ + -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n\ + --no-location do not write '#: filename:line' lines\n", 91}, + {"\ + -n, --add-location generate '#: filename:line' lines (default)\n\ + --omit-header don't write header with `msgid \"\"' entry\n\ + -o, --output=FILE write output to specified file\n\ + -p, --output-dir=DIR output files will be placed in directory DIR\n\ + -s, --sort-output generate sorted output and remove duplicates\n\ + --strict write out strict Uniforum conforming .po file\n\ + -T, --trigraphs understand ANSI C trigraphs for input\n\ + -V, --version output version information and exit\n\ + -w, --width=NUMBER set output page width\n\ + -x, --exclude-file=FILE entries from FILE are not extracted\n\ +\n\ +If INPUTFILE is -, standard input is read.\n", 92}, + {"language `%s' unknown", 93}, +}; + +int _msg_tbl_length = 93; diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/da.gmo b/debian/gettext-kde/gettext-kde-0.10.35/po/da.gmo Binary files differnew file mode 100644 index 00000000..0597247a --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/da.gmo diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/da.po b/debian/gettext-kde/gettext-kde-0.10.35/po/da.po new file mode 100644 index 00000000..be548afb --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/da.po @@ -0,0 +1,809 @@ +# gettext-0.10/po/da.po -- initial revision -*- po -*- +# Copyright (C) 1996 Free Software Foundation, Inc. +# Thorbjoern Ravn Andersen <[email protected]>, 1996. +msgid "" +msgstr "" +"Project-Id-Version: gettext 0.10.31\n" +"POT-Creation-Date: 1998-04-30 22:50-0700\n" +"PO-Revision-Date: 1997-08-29 07:21 MDT\n" +"Last-Translator: Thorbjoern Ravn Andersen <[email protected]>\n" +"Language-Team: Danish <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-Latin-1\n" +"Content-Transfer-Encoding: Base64\n" + +#: lib/error.c:103 +msgid "Unknown system error" +msgstr "Ukendt systemfejl" + +#: lib/getopt.c:680 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: tilvalget '%s' kan betyde flere ting\n" + +#: lib/getopt.c:704 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: tilvalget '--%s' tager ikke et argument\n" + +#: lib/getopt.c:709 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: tilvalget `%c%s' tager ikke et argument\n" + +#: lib/getopt.c:726 lib/getopt.c:899 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: tilvalget `%s' kr�ver et argument\n" + +#. --option +#: lib/getopt.c:755 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: ukendt tilvalg `--%s'\n" + +#. +option or -option +#: lib/getopt.c:759 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: ukendt tilvalg `%c%s'\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:785 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: ulovligt tilvalg -- %c\n" + +#: lib/getopt.c:788 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: ugyldigt tilvalg -- %c\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:818 lib/getopt.c:948 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: tilvalget '%c' kr�ver et argument\n" + +#: lib/getopt.c:865 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: tilvalget '%s' kan betyde flere ting\n" + +#: lib/getopt.c:883 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: tilvalget '--%s' tager ikke et argument\n" + +#: lib/xmalloc.c:82 +msgid "Memory exhausted" +msgstr "ikke mere ledig hukommelse" + +#: src/gettextp.c:134 src/msgcmp.c:144 src/msgcomm.c:285 src/msgfmt.c:257 +#: src/msgmerge.c:254 src/msgunfmt.c:175 src/xgettext.c:394 +#, c-format, no-wrap +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"Dette er frit programmel; kildeteksten indeholder kopibetingelser. Der er\n" +"INGEN garanti -- end ikke for SALGBARHED eller VELEGNETHED TIL NOGET S�RLIGT\n" +"FORM�L.\n" + +#: src/gettextp.c:139 src/msgcmp.c:149 src/msgcomm.c:290 src/msgfmt.c:262 +#: src/msgmerge.c:259 src/msgunfmt.c:180 src/xgettext.c:399 +#, c-format +msgid "Written by %s.\n" +msgstr "Skrevet af %s.\n" + +#: src/gettextp.c:154 +msgid "missing arguments" +msgstr "argumenter mangler" + +#: src/gettextp.c:164 +msgid "too many arguments" +msgstr "for mange argumenter" + +#: src/gettextp.c:228 src/msgcmp.c:181 src/msgcomm.c:395 src/msgfmt.c:361 +#: src/msgmerge.c:301 src/msgunfmt.c:210 src/xgettext.c:532 +#, c-format +msgid "Try `%s --help' for more information.\n" +msgstr "Information f�s med `%s --help'\n" + +#: src/gettextp.c:233 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n" +" -e enable expansion of some escape sequences\n" +" -E (ignored for compatibility)\n" +" -h, --help display this help and exit\n" +" -n suppress trailing newline\n" +" -V, --version display version information and exit\n" +" [TEXTDOMAIN] MSGID retrieve translated message corresponding\n" +" to MSGID from TEXTDOMAIN\n" +msgstr "" +"Brug: %s [TILVALG] [[[TEKSTDOM�NE] TEKSTID] | [-s [TEKSTID]...]]\n" +" -d, --domain=TEKSTDOM�NE hent oversatte tekster fra TEKSTDOM�NE\n" +" -e aktiv�r fortolkning af visse escape-sekvenser\n" +" -E (ignoreret af hensyn til kompabilitet)\n" +" -h, --help vis denne hj�lp og afslut\n" +" -n undertryk afsluttende linieskift\n" +" -V, --version vis versionsinformation og afslut\n" +" [TEKSTDOM�NE] TEKSTID hent den oversatte tekst fra TEKSTDOM�NE\n" +" svarende til TEKSTID\n" +"\n" +"(TEKSTID svarer til 'msgid' felterne)\n" + +#: src/gettextp.c:245 +#, c-format, no-wrap +msgid "" +"\n" +"If the TEXTDOMAIN parameter is not given, the domain is determined from the\n" +"environment variable TEXTDOMAIN. If the message catalog is not found in the\n" +"regular directory, another location can be specified with the environment\n" +"variable TEXTDOMAINDIR.\n" +"When used with the -s option the program behaves like the `echo' command.\n" +"But it does not simply copy its arguments to stdout. Instead those messages\n" +"found in the selected catalog are translated.\n" +"Standard search directory: %s\n" +msgstr "" +"\n" +"Hvis TEKSTDOM�NE parameteren ikke angives, bestemmes dom�net ud fra v�rdien af\n" +"milj�variablen TEXTDOMAIN. Hvis tekstkataloget ikke kan findes i det\n" +"s�dvanlige filkatalog, kan en anden placering angives vha milj�variablen\n" +"TEXTDOMAINDIR.\n" +"N�r tilvalget -s bruges, opf�rer programmet sig som 'echo' kommandoen, men\n" +"argumenterne bliver ikke blot kopieret til standard uddata. I stedet\n" +"overs�ttes de tekster der findes i det valgte tekstkatalog.\n" +"Standard filkataloget for s�gning er: %s\n" + +#: src/gettextp.c:255 src/msgcmp.c:200 src/msgcomm.c:442 src/msgfmt.c:388 +#: src/msgmerge.c:334 src/msgunfmt.c:234 src/xgettext.c:584 +#, fuzzy +msgid "Report bugs to <[email protected]>.\n" +msgstr "Rapport�r fejl p� engelsk til <[email protected]>.\n" + +#: src/message.c:784 +#, c-format +msgid "" +"internationalized messages should not contain the `\\%c' escape sequence" +msgstr "overs�ttelige tekster m� ikke indeholde `\\%c' escapesekvensen" + +#: src/message.c:1115 +#, c-format +msgid "cannot create output file \"%s\"" +msgstr "kan ikke oprette uddatafil '%s'" + +#: src/message.c:1122 +#, no-c-format +msgid "standard output" +msgstr "standard uddata" + +#: src/message.c:1182 +#, c-format +msgid "error while writing \"%s\" file" +msgstr "fejl ved skrivning til filen '%s'" + +#: src/msgcmp.c:160 src/msgmerge.c:270 +msgid "no input files given" +msgstr "ingen filer angivet som inddata" + +#: src/msgcmp.c:165 src/msgmerge.c:275 +msgid "exactly 2 input files required" +msgstr "der kr�ves netop to inddatafiler" + +#: src/msgcmp.c:186 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -h, --help display this help and exit\n" +" -V, --version output version information and exit\n" +"\n" +"Compare two Uniforum style .po files to check that both contain the same\n" +"set of msgid strings. The def.po file is an existing PO file with the\n" +"old translations. The ref.po file is the last created PO file\n" +"(generally by xgettext). This is useful for checking that you have\n" +"translated each and every message in your program. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better diagnostics.\n" +msgstr "" +"Brug: %s [TILVALG] def.po ref.po\n" +"Hvis et langt tilvalg tager et argument, g�lder det ogs� for den\n" +"tilsvarende korte udgave.\n" +" -D, --directory=FILKATALOG gennems�g ogs� FILKATALOG efter inddatafiler\n" +" -h, --help vis denne hj�lpetekst og afslut\n" +" -V, --version vis versions information og afslut\n" +"\n" +"Sammenlign to .po filer i Uniforum format for at kontrollere at de begge\n" +"indeholder det samme s�t af msgid tekststrenge. PO-filen 'def.po' indeholder\n" +"de gamle overs�ttelser og PO-filen 'ref.po' er den nyeste udgave (s�dvanligvis\n" +"oprettet af xgettext). Dette er en praktisk m�de at kontrollere at hver\n" +"eneste tekst i programmet er oversat. Hvis der ikke er n�jagtigt sammenfald\n" +"mellem msgid-tekststrengene, benyttes en upr�cis sammenligningsmetode til at\n" +"give bedre fejlretningsinformation.\n" + +#: src/msgcmp.c:259 src/msgmerge.c:714 +msgid "this message is used but not defined..." +msgstr "denne tekst bruges men er ikke erkl�ret..." + +#: src/msgcmp.c:261 src/msgmerge.c:716 +msgid "...but this definition is similar" +msgstr "...men denne tekst ligner" + +#: src/msgcmp.c:267 src/msgmerge.c:743 +#, c-format +msgid "this message is used but not defined in %s" +msgstr "denne tekst er brugt, men ikke erkl�ret i %s" + +#: src/msgcmp.c:281 +msgid "warning: this message is not used" +msgstr "advarsel: denne tekst bliver ikke brugt" + +#: src/msgcmp.c:355 src/msgfmt.c:632 src/msgmerge.c:493 src/xgettext.c:1063 +msgid "duplicate message definition" +msgstr "tekst erkl�ret mere end en gang" + +#: src/msgcmp.c:356 src/msgfmt.c:633 src/msgmerge.c:494 src/xgettext.c:1064 +msgid "...this is the location of the first definition" +msgstr "... her er den f�rste erkl�ring" + +#: src/msgcmp.c:396 src/msgmerge.c:542 +#, c-format +msgid "this message has no definition in the \"%s\" domain" +msgstr "denne besked har ingen erkl�ring i '%s' dom�net" + +#. We are about to construct the absolute path to the +#. directory for the output files but asprintf failed. +#: src/msgcomm.c:238 src/xgettext.c:340 src/xgettext.c:1258 +msgid "while preparing output" +msgstr "under udskriftsforberedelse" + +#: src/msgcomm.c:273 src/msgcomm.c:277 src/xgettext.c:378 src/xgettext.c:382 +#, c-format +msgid "%s and %s are mutually exclusive" +msgstr "%s og %s udelukker hinanden" + +#: src/msgcomm.c:341 +msgid "at least two files must be specified" +msgstr "" + +#: src/msgcomm.c:360 +#, c-format +msgid "impossible selection criteria specified (%d < n < %d)" +msgstr "" + +#: src/msgcomm.c:400 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" -F, --sort-by-file sort output by file location\n" +" -h, --help display this help and exit\n" +msgstr "" +"Brug: %s [TILVALG] INDDATAFIL ...\n" +"Hvis et langt tilvalg tager et argument, g�lder det ogs� for den korte\n" +"udgave af tilvalget.\n" +" -a, --extract-all tr�k alle tekster ud\n" +" -c, --add-comments[=M�RKE] plac�r kommentarafsnit for M�RKE (eller \n" +" de foreg�ende n�gleordslinier) i uddata\n" +" -C, --c++ genkend kommentarer i C++ stil\n" +" --debug mere detaljeret resultat af strenggenkendelse \n" +" -d, --default-domain=NAVN send uddata til NAVN.po (standard messages.po)\n" +" -D, --directory=FILKATALOG gennems�g ogs� FILKATALOG efter inddatafiler\n" +" -e, --no-escape brug ikke C-escapetegn i uddata (standard)\n" +" -E, --escape brug C-escapetegn i uddata. Ingen specialtegn\n" +" -f, --files-from=FIL hent inddatafilliste fra FIL\n" +" --force-po udskriv PO fil selv hvis den er tom\n" +" --foreign-user undlad FSF copyright i udskrift til fremmed bruger\n" +" -F, --sort-by-file sort�r uddata efter filposition\n" + +#: src/msgcomm.c:412 +#, fuzzy +msgid "" +" -i, --indent write the .po file using indented style\n" +" --no-location do not write '#: filename:line' lines\n" +" -n, --add-location generate '#: filename:line' lines " +"(default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory " +"DIR\n" +" -s, --sort-output generate sorted output and remove " +"duplicates\n" +" --strict write out strict Uniforum conforming .po " +"file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -u, --unique shorthand for --less-than=2, requests\n" +" that only unique messages be printed\n" +msgstr "" +" -n, --add-location skriv '#: filenavn:linie' linier " +"(standard)\n" +" --omit-header undlad skrivning af `msgid' teksten i " +"hovedet\n" +" -o, --output=FIL uddata skrives til FIL\n" +" -p, --output-dir=FILKATALOG uddatafiler placeres i FILKATALOG\n" +" -s, --sort-output sort�r uddata og fjern gentagelser\n" +" --strict uddata overholder 'streng Uniforum'-stil\n" +" -T, --trigraphs forst� ANSI C trigrafer i inddata\n" +" -V, --version vis versionsinformation og afslut\n" +" -w, --width=TAL\t\t angiv uddatabredde\n" +" -x, --exclude-file=FIL tekster i FIL benyttes ikke\n" +"\n" +"Hvis INPUTFIL er -, l�ses fra standard inddata.\n" + +#: src/msgcomm.c:425 +msgid "" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -<, --less-than=NUMBER print messages with less than this many\n" +" definitions, defaults to infinite if not\n" +" set\n" +" ->, --more-than=NUMBER print messages with more than this many\n" +" definitions, defaults to 1 if not set\n" +"\n" +"Find messages which are common to two or more of the specified PO files.\n" +"By using the --more-than option, greater commonality may be requested\n" +"before messages are printed. Conversely, the --less-than option may be\n" +"used to specify less commonality before messages are printed (i.e.\n" +"--less-than=2 will only print the unique messages). Translations,\n" +"comments and extract comments will be preserved, but only from the first\n" +"PO file to define them. File positions from all PO files will be\n" +"preserved.\n" +msgstr "" + +#: src/msgcomm.c:476 src/msgunfmt.c:357 src/po-lex.c:74 src/xget-lex.c:159 +#: src/xget-lex.c:174 src/xget-lex.c:191 src/xgettext.c:618 +#, c-format +msgid "error while opening \"%s\" for reading" +msgstr "fejl ved l�se-�bning af '%s'" + +#: src/msgcomm.c:557 src/xgettext.c:660 src/xgettext.c:970 +msgid "this file may not contain domain directives" +msgstr "denne fil m� ikke indeholde 'domain' kommandoer" + +#: src/msgfmt.c:273 src/xgettext.c:410 +msgid "no input file given" +msgstr "ingen inddatafil angivet" + +#: src/msgfmt.c:321 +#, c-format +msgid "error while opening \"%s\" for writing" +msgstr "fejl opst�et ved skrive-�bning af '%s'" + +#: src/msgfmt.c:343 +#, c-format +msgid "%d translated messages" +msgstr "%d oversatte tekster" + +#: src/msgfmt.c:345 +#, c-format +msgid ", %d fuzzy translations" +msgstr ", %d upr�cise overs�ttelser" + +#: src/msgfmt.c:347 +#, c-format +msgid ", %d untranslated messages" +msgstr ", %d uoversatte tekster" + +#: src/msgfmt.c:366 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] filename.po ...\n" +"Generate binary message catalog from textual translation description.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n" +" -c, --check perform language dependent checks on strings\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -f, --use-fuzzy use fuzzy entries in output\n" +" -h, --help display this help and exit\n" +" --no-hash binary file will not include the hash table\n" +" -o, --output-file=FILE specify output file name as FILE\n" +" --statistics print statistics about translations\n" +" --strict enable strict Uniforum mode\n" +" -v, --verbose list input file anomalies\n" +" -V, --version output version information and exit\n" +"\n" +"Giving the -v option more than once increases the verbosity level.\n" +"\n" +"If input file is -, standard input is read. If output file is -,\n" +"output is written to standard output.\n" +msgstr "" +"Brug: %s [TILVALG] filnavn.po ...\n" +"Hvis et langt tilvalg tager et argument, g�lder det ogs� for den\n" +"tilsvarende korte udgave.\n" +" -a, --alignment=TAL tekststrenge placeres p� adresser som er\n" +" multipla af TAL bytes (standard %d)\n" +" -c, --check lav sprogafh�ngige check af tekster\n" +" -D, --directory=FILKATALOG gennems�g ogs� FILKATALOG efter inddatafiler\n" +" -f, --use-fuzzy marker upr�cisheder med 'fuzzy' i uddata\n" +" -h, --help vis denne hj�lpetekst og afslut\n" +" --no-hash den bin�re fil vil ikke indeholde hashtabellen\n" +" -o, --output-file=FIL angiv FIL som uddatafil\n" +" --statistics udskriv statistik over overs�ttelser\n" +" --strict aktiv�r 'strict Uniforum'-stil\n" +" -v, --verbose vis anormaliteter i inddata\n" +" -V, --version vis versionsinformation og afslut\n" +"\n" +"Angives -v mere end en gang, for�ges informationsm�ngden tilsvarende.\n" +"\n" +"Hvis inddatafilen er -, l�ses fra standard-input. Hvis uddatafilen er -,\n" +"skrives uddata til standard-output.\n" + +#: src/msgfmt.c:409 +msgid "while creating hash table" +msgstr "under oprettelsen af hashtabel" + +#: src/msgfmt.c:451 +#, c-format +msgid "%s: warning: no header entry found" +msgstr "%s: advarsel: \"header\" element ikke angivet" + +#: src/msgfmt.c:473 +#, c-format +msgid "domain name \"%s\" not suitable as file name" +msgstr "dom�net '%s' kan ikke bruges som filnavn" + +#: src/msgfmt.c:478 +#, c-format +msgid "domain name \"%s\" not suitable as file name: will use prefix" +msgstr "dom�net '%s' er ikke brugbart som filnavn. Vil bruge pr�fiks istedet" + +#. We don't change the exit status here because this is really +#. only an information. +#: src/msgfmt.c:491 +#, c-format +msgid "`domain %s' directive ignored" +msgstr "`domain %s'-kommando ignoreres" + +#: src/msgfmt.c:519 +msgid "empty `msgstr' entry ignored" +msgstr "tom `msgstr'-kommando ignoreret" + +#: src/msgfmt.c:520 +msgid "fuzzy `msgstr' entry ignored" +msgstr "\"fuzzy\" `msgstr'-tekst ignoreret" + +#: src/msgfmt.c:563 +#, c-format +msgid "headerfield `%s' missing in header" +msgstr "feltet `%s' mangler i hovedet" + +#: src/msgfmt.c:566 +#, c-format +msgid "header field `%s' should start at beginning of line" +msgstr "feltet `%s' b�r starte ved liniens begyndelse" + +#: src/msgfmt.c:576 +msgid "some header fields still have the initial default value" +msgstr "nogle felter i hovedet har stadig den oprindelige standardv�rdi" + +#: src/msgfmt.c:587 +#, c-format +msgid "field `%s' still has initial default value" +msgstr "feltet `%s' har stadig den oprindelige standardv�rdi" + +#: src/msgfmt.c:672 +#, c-format +msgid "%s: warning: source file contains fuzzy translation" +msgstr "%s: advarsel: kildetekstfilen indeholder l�se overs�ttelser (fuzzy)" + +#: src/msgfmt.c:874 +msgid "`msgid' and `msgstr' entries do not both begin with '\\n'" +msgstr "`msgid' og `msgstr' teksterne begynder ikke begge med '\\n'" + +#: src/msgfmt.c:882 +msgid "`msgid' and `msgstr' entries do not both end with '\\n'" +msgstr "`msgid' og `msgstr' teksterne slutter ikke begge med '\\n'" + +#: src/msgfmt.c:896 +msgid "number of format specifications in `msgid' and `msgstr' does not match" +msgstr "forskelligt antal formater i `msgid' og `msgstr'" + +#: src/msgfmt.c:913 +#, c-format +msgid "format specifications for argument %u are not the same" +msgstr "formaterne for argument %u er forskellige" + +#: src/msgmerge.c:306 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent indented output style\n" +" -o, --output-file=FILE result will be written to FILE\n" +" --no-location suppress '#: filename:line' lines\n" +" --add-location preserve '#: filename:line' lines (default)\n" +" --strict strict Uniforum output style\n" +" -v, --verbose increase verbosity level\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Brug: %s [TILVALG] def.po ref.po\n" +"Hvis et langt tilvalg kr�ver et argument, g�lder det ogs� for det tilsvarende\n" +"korte tilvalg.\n" +" -D, --directory=FILKATALOG gennems�g ogs� FILKATALOG efter inddatafiler\n" +" -e, --no-escape brug ikke C-escapesekvenser i uddata (standard)\n" +" --force-po skriv PO filen selv om den er tom\n" +" -E, --escape brug C-escapesekvenser i uddata uden specialtegn\n" +" -h, --help vis denne hj�lp og afslut\n" +" -i, --indent benyt indrykket stil for uddata\n" +" -o, --output-file=FIL uddata skrives til FIL\n" +" --no-location undertryk '#: filnavn:linie' linier\n" +" --add-location bevar '#: filnavn:liine' liner (standard)\n" +" --strict benyt 'streng Uniforum' stil for uddata\n" +" -v, --verbose for�g udskreven information\n" +" -V, --version vis versionsinformation og afslut\n" +" -w, --width=TAL\t s�t udskrivningsbredde\n" + +#: src/msgmerge.c:324 +#, no-wrap +msgid "" +"\n" +"Merges two Uniforum style .po files together. The def.po file is an\n" +"existing PO file with the old translations which will be taken over to\n" +"the newly created file as long as they still match; comments will be\n" +"preserved, but extract comments and file positions will be discarded.\n" +"The ref.po file is the last created PO file (generally by xgettext), any\n" +"translations or comments in the file will be discarded, however dot\n" +"comments and file positions will be preserved. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better results. The\n" +"results are written to stdout unless an output file is specified.\n" +msgstr "" +"\n" +"Kombinerer to .po filer i Uniforum-stil. `def.po' filen (som allerede findes)\n" +"indholder gamle overs�ttelser som vil blive overf�rt til den nye PO fil under\n" +"foruds�tning af at de stadig passer. Kommentarer vil blive bevaret i\n" +"mods�tning til fil-udtr�kskommentarer og filpositioner. `ref.po' filen er den\n" +"sidst oprettede PO fil (s�dvanligvis af xgettext), hvorfra alle overs�ttelser\n" +"og kommentarer vil blive bortkastet, men 'punktum'-kommentarer og\n" +"filpositioner vil blive bevaret. N�r der ikke kan findes en n�jagtig\n" +"overensstemmelse, vil 'l�s s�gning' (fuzzy matching) blive brugt til at give\n" +"bedre resultater. Med mindre en uddatafil er angivet, vil resultaterne blive\n" +"skrevet til standard uddata.\n" + +#: src/msgmerge.c:772 +#, c-format +msgid "" +"%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete " +"%d.\n" +msgstr "" +"%sL�ste %d gamle + %d reference, samlede %d, upr�cise %d, mangler %d, " +"for�ldede %d.\n" + +#: src/msgmerge.c:778 +msgid " done.\n" +msgstr " afsluttet.\n" + +#: src/msgunfmt.c:215 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [FILE]...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent write indented output style\n" +" -o, --output-file=FILE write output into FILE instead of standard output\n" +" --strict write strict uniforum style\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Brug: %s [TILVALG] def.po ref.po\n" +"Hvis et langt tilvalg kr�ver et argument, g�lder det ogs� for det tilsvarende\n" +"korte tilvalg.\n" +" -e, --no-escape brug ikke C-escapesekvenser i uddata (standard)\n" +" -E, --escape brug C-escapesekvenser i uddata. Ingen specialtegn\n" +" -h, --help vis denne hj�lp og afslut\n" +" -i, --indent benyt indrykket stil for uddata\n" +" -o, --output-file=FIL uddata skrives til FIL\n" +" --strict benyt 'streng Uniforum' stil for uddata\n" +" -V, --version vis versionsinformation og afslut\n" +" -w, --width=TAL angiv udskrivningsbredde\n" + +#: src/msgunfmt.c:229 +#, no-wrap +msgid "" +"\n" +"Convert binary .mo files to Uniforum style .po files.\n" +"Both little-endian and big-endian .mo files are handled.\n" +"If no input file is given or it is -, standard input is read.\n" +"By default the output is written to standard output.\n" +msgstr "" +"\n" +"Omform bin�re .mo filer til Uniforum .po filer. B�de 'little-endian'\n" +"og 'big-endian' .mo filer kan h�ndteres. Hvis inddatafilen er -,\n" +"l�ses standard inddata. Som standard skrives til standard uddata.\n" + +#: src/msgunfmt.c:266 src/msgunfmt.c:330 src/po-lex.c:185 src/xget-lex.c:254 +#, c-format +msgid "error while reading \"%s\"" +msgstr "fejl ved l�sning af '%s'" + +#: src/msgunfmt.c:267 src/msgunfmt.c:331 +#, c-format +msgid "file \"%s\" truncated" +msgstr "filen '%s' blev afkortet" + +#: src/msgunfmt.c:298 +#, c-format +msgid "seek \"%s\" offset %ld failed" +msgstr "seek '%s' offset %ld mislykkedes" + +#: src/msgunfmt.c:373 +#, c-format +msgid "file \"%s\" is not in GNU .mo format" +msgstr "filen '%s' er ikke i GNU .mo format" + +#: ../../src/po-gram.y:83 +msgid "missing `msgstr' section" +msgstr "`msgstr' afsnit mangler" + +#: src/po-lex.c:84 +#, c-format +msgid "found %d fatal errors" +msgstr "fandt %d fatale fejl" + +#: src/po-lex.c:129 src/po-lex.c:168 +msgid "too many errors, aborting" +msgstr "afbryder k�rslen p� grund af for mange fejl" + +#: src/po-lex.c:241 +#, c-format +msgid "keyword \"%s\" unknown" +msgstr "ukendt n�gleord '%s'" + +#: src/po-lex.c:332 +msgid "illegal control sequence" +msgstr "ulovlig kontrolsekvens" + +#: src/po-lex.c:415 +msgid "end-of-line within string" +msgstr "tekststreng var ikke afsluttet ved linieskift" + +#: src/po-lex.c:420 +msgid "end-of-file within string" +msgstr "tekststreng ikke afsluttet da filens slutning blev n�et" + +#: src/xget-lex.c:150 +msgid "standard input" +msgstr "standard inddata" + +#: src/xget-lex.c:892 +#, c-format +msgid "%s:%d: warning: unterminated character constant" +msgstr "%s:%d: advarsel: tegnkonstant ikke afsluttet korrekt" + +#: src/xget-lex.c:914 +#, c-format +msgid "%s:%d: warning: unterminated string literal" +msgstr "%s:%d: advarsel: streng'literal' ikke afsluttet" + +#: src/xgettext.c:386 +msgid "--join-existing cannot be used when output is written to stdout" +msgstr "" +"--join-existing kan ikke benyttes n�r uddata sendes til standard uddata" + +#: src/xgettext.c:501 +#, c-format +msgid "warning: file `%s' extension `%s' is unknown; will try C" +msgstr "" +"advarsel: ukendt type for fil `%s' med endelse `%s'; C benyttes i stedet" + +#: src/xgettext.c:537 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Extract translatable string from given input files.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --extract-all extract all strings\n" +" -c, --add-comments[=TAG] place comment block with TAG (or those\n" +" preceding keyword lines) in output file\n" +" -C, --c++ shorthand for --language=C++\n" +" --debug more detailed formatstring recognision result\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" --foreign-user omit FSF copyright in output for foreign user\n" +" -F, --sort-by-file sort output by file location\n" +msgstr "" +"Brug: %s [TILVALG] INDDATAFIL ...\n" +"Hvis et langt tilvalg tager et argument, g�lder det ogs� for den korte\n" +"udgave af tilvalget.\n" +" -a, --extract-all tr�k alle tekster ud\n" +" -c, --add-comments[=M�RKE] plac�r kommentarafsnit for M�RKE (eller \n" +" de foreg�ende n�gleordslinier) i uddata\n" +" -C, --c++ genkend kommentarer i C++ stil\n" +" --debug mere detaljeret resultat af strenggenkendelse \n" +" -d, --default-domain=NAVN send uddata til NAVN.po (standard messages.po)\n" +" -D, --directory=FILKATALOG gennems�g ogs� FILKATALOG efter inddatafiler\n" +" -e, --no-escape brug ikke C-escapetegn i uddata (standard)\n" +" -E, --escape brug C-escapetegn i uddata. Ingen specialtegn\n" +" -f, --files-from=FIL hent inddatafilliste fra FIL\n" +" --force-po udskriv PO fil selv hvis den er tom\n" +" --foreign-user undlad FSF copyright i udskrift til fremmed bruger\n" +" -F, --sort-by-file sort�r uddata efter filposition\n" + +#: src/xgettext.c:557 +#, c-format, no-wrap +msgid "" +" -h, --help display this help and exit\n" +" -i, --indent write the .po file using indented style\n" +" -j, --join-existing join messages with existing file\n" +" -k, --keyword[=WORD] additonal keyword to be looked for (without\n" +" WORD means not to use default keywords)\n" +" -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n" +" -L, --language=NAME recognise the specified language (C, C++, PO),\n" +" otherwise is guessed from file extension\n" +" -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n" +" -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n" +" --no-location do not write '#: filename:line' lines\n" +msgstr "" +" -h, --help vis denne hj�lp og afslut\n" +" -i, --indent skriv .po-filen i indrykket stil\n" +" -j, --join-existing kombiner tekster med eksisterende fil\n" +" -k, --keyword[=ORD] s�g efter yderligere n�gleord. Hvis ORD ikke \n" +" angives, bruges standard-n�gleord ikke).\n" +" -l, --string-limit=TAL s�t gr�nse for tekststrengl�ngde til TAL (%u)\n" +" -L, --language=NAVN genkend det angivne sprog (C, C++, PO),\n" +" ellers g�ttes det fra filendelsen\n" +" -m, --msgstr-prefix[=STRENG] brug STRENG/'' som prefiks for `msgstr' tekster\n" +" -M, --msgstr-suffix[=STRENG] brug STRENG/'' som suffiks for `msgstr' tekster\n" +" --no-location undlad skrivning af '#: filnavn:linie' linier\n" + +#: src/xgettext.c:571 +#, no-wrap +msgid "" +" -n, --add-location generate '#: filename:line' lines (default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory DIR\n" +" -s, --sort-output generate sorted output and remove duplicates\n" +" --strict write out strict Uniforum conforming .po file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -x, --exclude-file=FILE entries from FILE are not extracted\n" +"\n" +"If INPUTFILE is -, standard input is read.\n" +msgstr "" +" -n, --add-location skriv '#: filenavn:linie' linier (standard)\n" +" --omit-header undlad skrivning af `msgid' teksten i hovedet\n" +" -o, --output=FIL uddata skrives til FIL\n" +" -p, --output-dir=FILKATALOG uddatafiler placeres i FILKATALOG\n" +" -s, --sort-output sort�r uddata og fjern gentagelser\n" +" --strict uddata overholder 'streng Uniforum'-stil\n" +" -T, --trigraphs forst� ANSI C trigrafer i inddata\n" +" -V, --version vis versionsinformation og afslut\n" +" -w, --width=TAL\t\t angiv uddatabredde\n" +" -x, --exclude-file=FIL tekster i FIL benyttes ikke\n" +"\n" +"Hvis INPUTFIL er -, l�ses fra standard inddata.\n" + +#: src/xgettext.c:1344 +#, c-format +msgid "language `%s' unknown" +msgstr "ukendt sprog `%s'" + +#~ msgid "Report bugs to <[email protected]>.\n" +#~ msgstr "Rapport�r fejl p� engelsk til <[email protected]>.\n" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/de.gmo b/debian/gettext-kde/gettext-kde-0.10.35/po/de.gmo Binary files differnew file mode 100644 index 00000000..ea173877 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/de.gmo diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/de.po b/debian/gettext-kde/gettext-kde-0.10.35/po/de.po new file mode 100644 index 00000000..3d5a83cc --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/de.po @@ -0,0 +1,838 @@ +# German translations for GNU gettext package. +# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +# Ulrich Drepper <[email protected]>, 1995-1997. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU gettext 0.10.35\n" +"POT-Creation-Date: 1998-04-30 22:50-0700\n" +"PO-Revision-Date: 1998-04-30 23:23-0700\n" +"Last-Translator: Ulrich Drepper <[email protected]>\n" +"Language-Team: German <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/error.c:103 +msgid "Unknown system error" +msgstr "unbekannter Systemfehler" + +#: lib/getopt.c:680 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: Option �%s� ist mehrdeutig\n" + +#: lib/getopt.c:704 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: Option �--%s� erwartet kein Argument\n" + +#: lib/getopt.c:709 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: Option �%c%s� erwartet kein Argument\n" + +#: lib/getopt.c:726 lib/getopt.c:899 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: Option �%s� erwartet ein Argument\n" + +#. --option +#: lib/getopt.c:755 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: unbekannte Option �--%s�\n" + +#. +option or -option +#: lib/getopt.c:759 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: unbekannte Option �%c%s�\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:785 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: unzul�ssige Option -- %c\n" + +#: lib/getopt.c:788 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: ung�ltige Option -- %c\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:818 lib/getopt.c:948 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: Option erwartet ein Argument -- %c\n" + +#: lib/getopt.c:865 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: Option �-W %s� ist mehrdeutig\n" + +#: lib/getopt.c:883 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: Option �-W %s� erwartet kein Argument\n" + +#: lib/xmalloc.c:82 +msgid "Memory exhausted" +msgstr "virtueller Speicher ersch�pft" + +#: src/gettextp.c:134 src/msgcmp.c:144 src/msgcomm.c:285 src/msgfmt.c:257 +#: src/msgmerge.c:254 src/msgunfmt.c:175 src/xgettext.c:394 +#, c-format, no-wrap +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Copyright � %s Free Software Foundation, Inc.\n" +"Dies ist freie Software; in den Quellen befindet sich die Lizenzbedingung.\n" +"Es gibt KEINERLEI Garantie; nicht einmal f�r die TAUGLICHKEIT oder\n" +"die VERWENDBARKEIT ZU EINEN ANGEGEBENEN ZWECK.\n" + +#: src/gettextp.c:139 src/msgcmp.c:149 src/msgcomm.c:290 src/msgfmt.c:262 +#: src/msgmerge.c:259 src/msgunfmt.c:180 src/xgettext.c:399 +#, c-format +msgid "Written by %s.\n" +msgstr "Geschrieben von %s.\n" + +#: src/gettextp.c:154 +msgid "missing arguments" +msgstr "Argumente fehlen" + +#: src/gettextp.c:164 +msgid "too many arguments" +msgstr "zu viele Argumente" + +#: src/gettextp.c:228 src/msgcmp.c:181 src/msgcomm.c:395 src/msgfmt.c:361 +#: src/msgmerge.c:301 src/msgunfmt.c:210 src/xgettext.c:532 +#, c-format +msgid "Try `%s --help' for more information.\n" +msgstr "�%s --help� gibt weitere Informationen.\n" + +#: src/gettextp.c:233 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n" +" -e enable expansion of some escape sequences\n" +" -E (ignored for compatibility)\n" +" -h, --help display this help and exit\n" +" -n suppress trailing newline\n" +" -V, --version display version information and exit\n" +" [TEXTDOMAIN] MSGID retrieve translated message corresponding\n" +" to MSGID from TEXTDOMAIN\n" +msgstr "" +"Benutzung: %s [OPTION] [[[TEXTBEREICH] SCHL�SSEL] | [-s [MSGID]...]]\n" +" -d, --domain=BEREICH �bersetzungen kommen aus Namensbereich BEREICH\n" +" -e schalte �bersetzung von Sonderzeichendarstellung an\n" +" -E (Aus Kompatibilit�tsgr�nden ignoriert)\n" +" -h, --help zeige diese Hilfe und beende\n" +" -n gebe kein abschlie�endes Zeilenendezeichen aus\n" +" -V, --version zeige Versionsnummer und beende\n" +" [BEREICH] SCHL�SSEL hole die �bersetzung zu SCHL�SSEL aus\n" +" dem Namensbereich BEREICH\n" + +#: src/gettextp.c:245 +#, c-format, no-wrap +msgid "" +"\n" +"If the TEXTDOMAIN parameter is not given, the domain is determined from the\n" +"environment variable TEXTDOMAIN. If the message catalog is not found in the\n" +"regular directory, another location can be specified with the environment\n" +"variable TEXTDOMAINDIR.\n" +"When used with the -s option the program behaves like the `echo' command.\n" +"But it does not simply copy its arguments to stdout. Instead those messages\n" +"found in the selected catalog are translated.\n" +"Standard search directory: %s\n" +msgstr "" +"\n" +"Wenn der BEREICH Parameter nicht gegeben wurde, wird der Bereich durch die\n" +"Umgebungsvariable TEXTDOMAIN bestimmt. Wenn der Katalog dieses Bereiches\n" +"sich nicht im Standardverzeichnis des Systems befindet, kann durch die\n" +"Umgebungsvariable TEXTDOMAINDIR ein anderes Verzeichnis angegeben werden.\n" +"\n" +"Wenn die -s Option angeschaltet ist, verh�lt sich das Programm wie das\n" +"`echo' Kommando. Aber anstatt alle Argumente einfach auszugeben, werden\n" +"diese, falls im Namensbereich vorhanden, �bersetzt.\n" +"Standardverzeichnis: %s\n" + +#: src/gettextp.c:255 src/msgcmp.c:200 src/msgcomm.c:442 src/msgfmt.c:388 +#: src/msgmerge.c:334 src/msgunfmt.c:234 src/xgettext.c:584 +msgid "Report bugs to <[email protected]>.\n" +msgstr "Fehler bitte an <[email protected]> melden.\n" + +#: src/message.c:784 +#, c-format +msgid "" +"internationalized messages should not contain the `\\%c' escape sequence" +msgstr "" +"internationalisierbare Meldungen sollten nicht die Ersatzdarstellung �\\%c� " +"enthalten" + +#: src/message.c:1115 +#, c-format +msgid "cannot create output file \"%s\"" +msgstr "Ausgabedatei �%s� kann nicht erzeugt werden" + +#: src/message.c:1122 +#, no-c-format +msgid "standard output" +msgstr "Standard Ausgabe" + +#: src/message.c:1182 +#, c-format +msgid "error while writing \"%s\" file" +msgstr "Fehler beim Schreiben von Datei �%s�" + +#: src/msgcmp.c:160 src/msgmerge.c:270 +msgid "no input files given" +msgstr "keine Eingabedateien gegeben" + +#: src/msgcmp.c:165 src/msgmerge.c:275 +msgid "exactly 2 input files required" +msgstr "es werden genau zwei Eingabedateien ben�tigt" + +#: src/msgcmp.c:186 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -h, --help display this help and exit\n" +" -V, --version output version information and exit\n" +"\n" +"Compare two Uniforum style .po files to check that both contain the same\n" +"set of msgid strings. The def.po file is an existing PO file with the\n" +"old translations. The ref.po file is the last created PO file\n" +"(generally by xgettext). This is useful for checking that you have\n" +"translated each and every message in your program. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better diagnostics.\n" +msgstr "" +"Benutzung: %s [OPTION] Datei1.po Def.po Ref.po\n" +"Notwendige Argumente f�r Optionen in Langform sind auch f�r die\n" +"Kurzform notwendig.\n" +" -D, --directory=VERZEICHNIS f�ge VERZEICHNIS in Liste f�r Verzeichnisse\n" +" mit PO Dateien ein\n" +" -h, --help zeige diese Hilfe und beende\n" +" -V, --version zeige Versionsnummer und beende\n" +"\n" +"Vergleiche zwei .po Dateien im Uniforum Format um zu sicherzustellen, da�\n" +"beide die gleichen `msgid' Eintr�ge enthalten. Die Datei Def.po enth�lt die\n" +"alten �bersetzungen, die Datei Ref.po ist die letzte (i.A. durch xgettext)\n" +"erzeugte PO Datei. Mit Hilfe diese Programms l��t sich also �berpr�fen, ob\n" +"jede Meldung im Programm �bersetzt wurde. Wenn keine exakte �bereinstimmung\n" +"gefunden wurde, wird mittels inexakter Suche versucht, eine bessere\n" +"Hilfestellung zu geben.\n" + +#: src/msgcmp.c:259 src/msgmerge.c:714 +msgid "this message is used but not defined..." +msgstr "diese Meldung wird benutzt, wird aber nicht definiert..." + +#: src/msgcmp.c:261 src/msgmerge.c:716 +msgid "...but this definition is similar" +msgstr "...aber diese Definition ist �hnlich" + +#: src/msgcmp.c:267 src/msgmerge.c:743 +#, c-format +msgid "this message is used but not defined in %s" +msgstr "diese Meldung wird benutzt, wird aber nicht in %s definiert" + +#: src/msgcmp.c:281 +msgid "warning: this message is not used" +msgstr "Warnung: diese Meldung wird nicht benutzt" + +#: src/msgcmp.c:355 src/msgfmt.c:632 src/msgmerge.c:493 src/xgettext.c:1063 +msgid "duplicate message definition" +msgstr "Mehrfachdefinition der Meldung" + +#: src/msgcmp.c:356 src/msgfmt.c:633 src/msgmerge.c:494 src/xgettext.c:1064 +msgid "...this is the location of the first definition" +msgstr "...dies ist die Stelle der ersten Definition" + +#: src/msgcmp.c:396 src/msgmerge.c:542 +#, c-format +msgid "this message has no definition in the \"%s\" domain" +msgstr "diese Meldung hat im Bereich �%s� keine Definition" + +#. We are about to construct the absolute path to the +#. directory for the output files but asprintf failed. +#: src/msgcomm.c:238 src/xgettext.c:340 src/xgettext.c:1258 +msgid "while preparing output" +msgstr "beim Vorbereiten der Ausgabe" + +#: src/msgcomm.c:273 src/msgcomm.c:277 src/xgettext.c:378 src/xgettext.c:382 +#, c-format +msgid "%s and %s are mutually exclusive" +msgstr "%s und %s schlie�en sich gegenseitig aus" + +#: src/msgcomm.c:341 +msgid "at least two files must be specified" +msgstr "es m�ssen mindestens zwei Dateien angegeben werden" + +#: src/msgcomm.c:360 +#, c-format +msgid "impossible selection criteria specified (%d < n < %d)" +msgstr "unm�gliches Auswahlkriterium (%d < n < %d)" + +#: src/msgcomm.c:400 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" -F, --sort-by-file sort output by file location\n" +" -h, --help display this help and exit\n" +msgstr "" +"Benutzung: %s [OPTION] EINGABEDATEI ...\n" +"Notwendige Argumente f�r Optionen in Langform sind auch f�r die\n" +"Kurzform notwendig.\n" +" -d, --default-domain=NAME Ausgabe in NAME.po (anstatt in messages.po)\n" +" -D, --directory=VERZEICHNIS f�ge VERZEICHNIS in Liste f�r Verzeichnisse\n" +" mit PO Dateien ein\n" +" -e, --no-escape keine C Ersatzdarstellung in Ausgabe (Std)\n" +" -E, --escape Ersatzdarstellung f�r nicht-ASCII Zeichen\n" +" -f, --files-from=DATEI hole Namen der Eingabedateien aus DATEI\n" +" --force-po PO Datei wird auch bei Fehlern geschrieben\n" +" -F, --sort-by-file sortiere Ausgabe nach Dateivorkommen\n" +" -h, --help zeige diese Hilfe und beende\n" + +#: src/msgcomm.c:412 +msgid "" +" -i, --indent write the .po file using indented style\n" +" --no-location do not write '#: filename:line' lines\n" +" -n, --add-location generate '#: filename:line' lines " +"(default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory " +"DIR\n" +" -s, --sort-output generate sorted output and remove " +"duplicates\n" +" --strict write out strict Uniforum conforming .po " +"file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -u, --unique shorthand for --less-than=2, requests\n" +" that only unique messages be printed\n" +msgstr "" +" -i, --indent erzeuge .po Datei mit Einr�ckungen\n" +" --no-location schreibe keine �#: Datei:Zeile� Zeilen\n" +" -n, --add-location erzeuge '#: Dateiname:Zeilennummer' " +"(default)\n" +" --omit-header `msgid \"\"' Eintrag in Kopfteil nicht " +"erzeugen\n" +" -o, --output=DATEI schreibe Ausgabe in DATEI\n" +" -p, --output-dir=VERZEICHNIS Ausgabedateien kommen nach VERZEICHNIS\n" +" -s, --sort-output sortiere Ausgabe und entferne Dubletten\n" +" --strict erzeuge .po Datei streng nach Uniforum " +"Form\n" +" -T, --trigraphs ANSI C Trigraph Zeichen werden erkannt\n" +" -u, --unique Abk�rzung f�r --less-than=2, fordert " +"Meldungen\n" +" an, die nur einmal vorkommen\n" + +#: src/msgcomm.c:425 +msgid "" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -<, --less-than=NUMBER print messages with less than this many\n" +" definitions, defaults to infinite if not\n" +" set\n" +" ->, --more-than=NUMBER print messages with more than this many\n" +" definitions, defaults to 1 if not set\n" +"\n" +"Find messages which are common to two or more of the specified PO files.\n" +"By using the --more-than option, greater commonality may be requested\n" +"before messages are printed. Conversely, the --less-than option may be\n" +"used to specify less commonality before messages are printed (i.e.\n" +"--less-than=2 will only print the unique messages). Translations,\n" +"comments and extract comments will be preserved, but only from the first\n" +"PO file to define them. File positions from all PO files will be\n" +"preserved.\n" +msgstr "" +" -V, --version zeige Versionsnummer und beende\n" +" -w, --width=ANZAHL setze Breite der Ausgabeseite\n" +" -<, --less-than=ANZAHL zeige Meldungen mit weniger als ANZAHL " +"Definitionen\n" +" (Standardwert: unendlich)\n" +" ->, --more-than=ANZAHL zeige Meldungen mit mehr als ANZAH{ " +"Definitionen\n" +" (Standardwert: 1)\n" +"\n" +"Suche Meldungen, die in zwei oder mehr der angegebenen PO Dateien " +"vorkommen.\n" +"Wenn die --more-than Option verwendet wird, kann eine gr��ere Verbreitung\n" +"gefordert werden. Auf der anderen Seite k�nnen mit --less-than nur " +"Meldungen\n" +"mit geringerer Verbreitung angezeigt werden. D.h., --less-than=2 wird nur\n" +"Meldungen anzeigen, die nur einmal vorkommen. �bersetzungen, Kommentare " +"und\n" +"extrahierte Kommentare werden beibehalten, aber nur von der ersten PO Datei\n" +"die sie definiert. Positionen der Meldungen in den Quellen werden f�r alle\n" +"PO Dateien festgehalten.\n" + +#: src/msgcomm.c:476 src/msgunfmt.c:357 src/po-lex.c:74 src/xget-lex.c:159 +#: src/xget-lex.c:174 src/xget-lex.c:191 src/xgettext.c:618 +#, c-format +msgid "error while opening \"%s\" for reading" +msgstr "�ffnen der Datei �%s� zum Lesen fehlgeschlagen" + +#: src/msgcomm.c:557 src/xgettext.c:660 src/xgettext.c:970 +msgid "this file may not contain domain directives" +msgstr "diese Datei darf keine `domain' Anweisung enthalten" + +#: src/msgfmt.c:273 src/xgettext.c:410 +msgid "no input file given" +msgstr "Eingabedatei fehlt" + +#: src/msgfmt.c:321 +#, c-format +msgid "error while opening \"%s\" for writing" +msgstr "�ffnen der Datei �%s� zum Schreiben fehlgeschlagen" + +#: src/msgfmt.c:343 +#, c-format +msgid "%d translated messages" +msgstr "%d �bersetzte Meldungen" + +#: src/msgfmt.c:345 +#, c-format +msgid ", %d fuzzy translations" +msgstr ", %d ungenaue �bersetzungen" + +#: src/msgfmt.c:347 +#, c-format +msgid ", %d untranslated messages" +msgstr ", %d un�bersetzte Meldungen" + +#: src/msgfmt.c:366 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] filename.po ...\n" +"Generate binary message catalog from textual translation description.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n" +" -c, --check perform language dependent checks on strings\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -f, --use-fuzzy use fuzzy entries in output\n" +" -h, --help display this help and exit\n" +" --no-hash binary file will not include the hash table\n" +" -o, --output-file=FILE specify output file name as FILE\n" +" --statistics print statistics about translations\n" +" --strict enable strict Uniforum mode\n" +" -v, --verbose list input file anomalies\n" +" -V, --version output version information and exit\n" +"\n" +"Giving the -v option more than once increases the verbosity level.\n" +"\n" +"If input file is -, standard input is read. If output file is -,\n" +"output is written to standard output.\n" +msgstr "" +"Benutzung: %s [OPTION] Dateiname.po ...\n" +"Erzeuge bin�ren Datein mit Meldungen aus der textuellen Beschreibung.\n" +"\n" +"Notwendige Argumente f�r Optionen in Langform sind auch f�r die\n" +"Kurzform notwendig.\n" +" -a, --alignment=ZAHL Ausgaben an ZAHL (Std: %d) Bytegrenze ausrichten\n" +" -c, --check �berpr�fe Formatelemente in Meldungen\n" +" -D, --directory=VERZEICHNIS f�ge VERZEICHNIS in Liste f�r Verzeichnisse\n" +" mit PO Dateien ein\n" +" -f, --use-fuzzy benutze auch ungenaue �bersetzungen\n" +" -h, --help zeige diese Hilfe und beende\n" +" --no-hash Bin�rdatei wird keine Hash-Tabelle enthalten\n" +" -o, --output-file=DATEI lege DATEI als Ausgabedatei fest\n" +" --statistics zeige Statistik f�r �bersetzungen an\n" +" --strict verfahre strikt nach Uniforum Spezifikation\n" +" -v, --verbose zeige Unregelm��igkeiten in Eingabe auf\n" +" -V, --version zeige Versionsnummer und beende\n" +"\n" +"Wenn die Eingabedatei - ist, wird die Eingabe von Standard Eingabe gelesen.\n" +"Ist die Ausgabedatei -, wird nach Standard Ausgabe geschrieben.\n" + +#: src/msgfmt.c:409 +msgid "while creating hash table" +msgstr "beim Anlegen der Hash-Tabelle" + +#: src/msgfmt.c:451 +#, c-format +msgid "%s: warning: no header entry found" +msgstr "%s: Warnung: kein Kopfeintrag gefunden" + +#: src/msgfmt.c:473 +#, c-format +msgid "domain name \"%s\" not suitable as file name" +msgstr "Bereichsname �%s� ist nicht als Dateiname geeignet" + +#: src/msgfmt.c:478 +#, c-format +msgid "domain name \"%s\" not suitable as file name: will use prefix" +msgstr "" +"Bereichsname �%s� ist nicht als Dateiname geeignet: werde Pr�fix verwenden" + +#. We don't change the exit status here because this is really +#. only an information. +#: src/msgfmt.c:491 +#, c-format +msgid "`domain %s' directive ignored" +msgstr "�domain %s� Anweisung wird ignoriert" + +#: src/msgfmt.c:519 +msgid "empty `msgstr' entry ignored" +msgstr "leerer �msgstr� Eintrag wird ignoriert" + +#: src/msgfmt.c:520 +msgid "fuzzy `msgstr' entry ignored" +msgstr "ungenauer �msgstr� Eintrag wird ignoriert" + +#: src/msgfmt.c:563 +#, c-format +msgid "headerfield `%s' missing in header" +msgstr "Im Kopfeintrag fehlt das Feld �%s�" + +#: src/msgfmt.c:566 +#, c-format +msgid "header field `%s' should start at beginning of line" +msgstr "Feld �%s� im Kopfeintrag sollte in der ersten Spalte anfangen" + +#: src/msgfmt.c:576 +msgid "some header fields still have the initial default value" +msgstr "" +"Einige Felder im Kopfeintrag haben immer noch den vorgegebenen Standardwert" + +#: src/msgfmt.c:587 +#, c-format +msgid "field `%s' still has initial default value" +msgstr "Feld �%s� hat immer noch den vorgegebenen Standardwert" + +#: src/msgfmt.c:672 +#, c-format +msgid "%s: warning: source file contains fuzzy translation" +msgstr "%s: Warnung: Quelldatei enth�lt ungenaue �bersetzungen" + +#: src/msgfmt.c:874 +msgid "`msgid' and `msgstr' entries do not both begin with '\\n'" +msgstr "�msgid� und �msgstr� Eintrag beginnt nicht jeweils mit �\\n�" + +#: src/msgfmt.c:882 +msgid "`msgid' and `msgstr' entries do not both end with '\\n'" +msgstr "�msgid� und �msgstr� Eintrag endet nicht jeweils mit �\\n�" + +#: src/msgfmt.c:896 +msgid "number of format specifications in `msgid' and `msgstr' does not match" +msgstr "" +"Anzahl der Formatelemente in �msgid� and �msgstr� stimmen nicht �berein" + +#: src/msgfmt.c:913 +#, c-format +msgid "format specifications for argument %u are not the same" +msgstr "Formatelemente f�r Argument %u stimmen nicht �berein" + +#: src/msgmerge.c:306 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent indented output style\n" +" -o, --output-file=FILE result will be written to FILE\n" +" --no-location suppress '#: filename:line' lines\n" +" --add-location preserve '#: filename:line' lines (default)\n" +" --strict strict Uniforum output style\n" +" -v, --verbose increase verbosity level\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Benutzung: %s [OPTION] Def.po Ref.po\n" +"Notwendige Argumente f�r Optionen in Langform sind auch f�r die\n" +"Kurzform notwendig.\n" +" -D, --directory=VERZEICHNIS f�ge VERZEICHNIS in Liste f�r Verzeichnisse\n" +" mit PO Dateien ein\n" +" -e, --no-escape verwende keine C Ersatzdarstellung in Ausgabe\n" +" (Standardeinstellung)\n" +" -E, --escape keine nicht-ASCII Zeichen in Ausgabe verwenden\n" +" --force-po erzeuge PO Datei auch wenn sie leer ist\n" +" -h, --help zeige diese Hilfe und beende\n" +" -i, --indent Ausgabe wird einger�ckt dargestellt\n" +" -o, --output-file=DATEI schreibe Ausgabe nach DATEI\n" +" --no-location erzeuge kein '#: Dateiname:Zeile' Zeilen\n" +" --add-location erhalte '#: Dateiname:Zeile' Zeilen (Standard)\n" +" --strict erzeuge .po Datei streng nach Uniforum Form\n" +" -v, --verbose zeige Unregelm��igkeiten in Eingabe auf\n" +" -V, --version zeige Versionsnummer und beende\n" +" -w, --width=ANZAHL lege Breite der Ausgabe auf ANZAHL Spalten fest\n" + +#: src/msgmerge.c:324 +#, no-wrap +msgid "" +"\n" +"Merges two Uniforum style .po files together. The def.po file is an\n" +"existing PO file with the old translations which will be taken over to\n" +"the newly created file as long as they still match; comments will be\n" +"preserved, but extract comments and file positions will be discarded.\n" +"The ref.po file is the last created PO file (generally by xgettext), any\n" +"translations or comments in the file will be discarded, however dot\n" +"comments and file positions will be preserved. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better results. The\n" +"results are written to stdout unless an output file is specified.\n" +msgstr "" +"\n" +"Verschmelze zwei .po Dateien im Uniforum Format. Die Datei Def.po ist eine\n" +"PO Datei mit alten �bersetzungen die, solange sie immer noch passen, in die\n" +"neu zu erzeugende Datei �bernommen werden; Kommentare des �bersetzers werden\n" +"�bernommen, aber von xgettext extrahierte Kommentare werden verworfen. Die\n" +"Datei Ref.po ist die letzte (i.A. durch xgettext) erzeugte PO Datei mit den\n" +"aktuellen Meldungen. �bersetzungen und �bersetzerkommentare werden\n" +"verworfen, die #. und #: Kommentare aber �bernommen. Wenn es keine exakte\n" +"�bereinstimmung bei Meldungen gibt wird mittels inexakter Suche versucht,\n" +"ein besseres Ergebnis zu erzielen. Solange nicht anders angegeben wird das\n" +"Ergebnis nach Standard Ausgabe geschrieben.\n" + +#: src/msgmerge.c:772 +#, c-format +msgid "" +"%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete " +"%d.\n" +msgstr "" +"%s%d alte + %d Referenzeintr�ge gelesen,\n" +"%d stimmen �berein, %d ungef�hr, %d fehlen, %d veraltet.\n" + +#: src/msgmerge.c:778 +msgid " done.\n" +msgstr " fertig.\n" + +#: src/msgunfmt.c:215 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [FILE]...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent write indented output style\n" +" -o, --output-file=FILE write output into FILE instead of standard output\n" +" --strict write strict uniforum style\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Benutzung: %s [OPTION] DATEI1.mo DATEI2.po\n" +"Notwendige Argumente f�r Optionen in Langform sind auch f�r die\n" +"Kurzform notwendig.\n" +" -e, --no-escape verwende keine C Ersatzdarstellung in Ausgabe (Std)\n" +" -E, --escape verwende Ersatzdarstellung f�r nicht-ASCII Zeichen\n" +" --force-po erzeuge PO Datei auch wenn sie leer ist\n" +" -h, --help zeige diese Hilfe und beende\n" +" -i, --indent Ausgabe wird einger�ckt dargestellt\n" +" -o, --output-file=DATEI schreibe Ausgabe in DATEI anstatt Standardausgabe\n" +" --strict erzeuge .po Datei streng nach Uniforum Form\n" +" -V, --version zeige Versionsnummer und beende\n" +" -w, --width=ANZAHL lege Breite der Ausgabe auf ANZAHL Spalten fest\n" + +#: src/msgunfmt.c:229 +#, no-wrap +msgid "" +"\n" +"Convert binary .mo files to Uniforum style .po files.\n" +"Both little-endian and big-endian .mo files are handled.\n" +"If no input file is given or it is -, standard input is read.\n" +"By default the output is written to standard output.\n" +msgstr "" +"\n" +"Wandle bin�re .mo Dateien zur�ck in .po Dateien im Uniforum Format. Es\n" +"werden sowohl big-endian als auch little-endian Dateien behandelt. Wenn die\n" +"Eingabedatei - ist, wird von Standard Eingabe gelesen. Standardm��ig\n" +"wird die Ausgabe nach Standard Ausgabe geschrieben.\n" + +#: src/msgunfmt.c:266 src/msgunfmt.c:330 src/po-lex.c:185 src/xget-lex.c:254 +#, c-format +msgid "error while reading \"%s\"" +msgstr "Fehler beim Lesen von �%s�" + +#: src/msgunfmt.c:267 src/msgunfmt.c:331 +#, c-format +msgid "file \"%s\" truncated" +msgstr "Datei �%s� ist verst�mmelt" + +#: src/msgunfmt.c:298 +#, c-format +msgid "seek \"%s\" offset %ld failed" +msgstr "Positionieren in Datei �%s� auf Position %ld fehlgeschlagen" + +#: src/msgunfmt.c:373 +#, c-format +msgid "file \"%s\" is not in GNU .mo format" +msgstr "Datei �%s� ist keine Datei im GNU .mo Format" + +#: ../../src/po-gram.y:83 +msgid "missing `msgstr' section" +msgstr "�msgstr� Abschnitt fehlt" + +#: src/po-lex.c:84 +#, c-format +msgid "found %d fatal errors" +msgstr "es sind %d fatale Fehler aufgetreten" + +#: src/po-lex.c:129 src/po-lex.c:168 +msgid "too many errors, aborting" +msgstr "zu viele Fehler: Abbruch" + +#: src/po-lex.c:241 +#, c-format +msgid "keyword \"%s\" unknown" +msgstr "Schl�sselwort �%s� ist unbekannt" + +#: src/po-lex.c:332 +msgid "illegal control sequence" +msgstr "ung�ltiges Kontrollzeichen" + +#: src/po-lex.c:415 +msgid "end-of-line within string" +msgstr "Zeilenende innerhalb einer Zeichenkette" + +#: src/po-lex.c:420 +msgid "end-of-file within string" +msgstr "Dateiende innerhalb einer Zeichenkette" + +#: src/xget-lex.c:150 +msgid "standard input" +msgstr "Standard Eingabe" + +#: src/xget-lex.c:892 +#, c-format +msgid "%s:%d: warning: unterminated character constant" +msgstr "%s:%d: Warnung: Zeichenkonstante ohne korrektes Ende" + +#: src/xget-lex.c:914 +#, c-format +msgid "%s:%d: warning: unterminated string literal" +msgstr "%s:%d: Warnung: Zeichenkette nicht korrekt beendet" + +#: src/xgettext.c:386 +msgid "--join-existing cannot be used when output is written to stdout" +msgstr "" +"--join-existing kann nicht benutzt werden, wenn nach Standard Ausgabe " +"geschrieben wird" + +#: src/xgettext.c:501 +#, c-format +msgid "warning: file `%s' extension `%s' is unknown; will try C" +msgstr "" +"Warnung: Typ der Datei �%s� mit Anh�ngsel �%s� ist unbekannt; werde es mit C " +"versuchen" + +#: src/xgettext.c:537 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Extract translatable string from given input files.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --extract-all extract all strings\n" +" -c, --add-comments[=TAG] place comment block with TAG (or those\n" +" preceding keyword lines) in output file\n" +" -C, --c++ shorthand for --language=C++\n" +" --debug more detailed formatstring recognision result\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" --foreign-user omit FSF copyright in output for foreign user\n" +" -F, --sort-by-file sort output by file location\n" +msgstr "" +"Benutzung: %s [OPTION] EINGABEDATEI ...\n" +"Schreibe aus allen Eingabedateien alle Meldungen, die �bersetzt werden\n" +"m�ssen heraus.\n" +"\n" +"Notwendige Argumente f�r Optionen in Langform sind auch f�r die\n" +"Kurzform notwendig.\n" +" -a, --extract-all schreibe alle Zeichenketten heraus\n" +" -c, --add-comments[=KENNUNG] Kommentare mit Kennung (oder die aus Zeilen\n" +" vor einem Schl�sselwort) herausschreiben\n" +" -C, --c++ behandle auch C++ Kommentare\n" +" --debug detaillierte Formatstringbewertung in Ausgabe\n" +" -d, --default-domain=NAME Ausgabe in NAME.po (anstatt in messages.po)\n" +" -D, --directory=VERZEICHNIS f�ge VERZEICHNIS in Liste f�r Verzeichnisse\n" +" mit PO Dateien ein\n" +" -e, --no-escape keine C Ersatzdarstellung in Ausgabe (Std)\n" +" -E, --escape Ersatzdarstellung f�r nicht-ASCII Zeichen\n" +" -f, --files-from=DATEI hole Namen der Eingabedateien aus DATEI\n" +" --force-po PO Datei wird auch bei Fehlern geschrieben\n" +" --foreign-user f�ge keine FSF Copyright Zeile in Ausgabe ein\n" +" -F, --sort-by-file sortiere Ausgabe nach Dateivorkommen\n" + +#: src/xgettext.c:557 +#, c-format, no-wrap +msgid "" +" -h, --help display this help and exit\n" +" -i, --indent write the .po file using indented style\n" +" -j, --join-existing join messages with existing file\n" +" -k, --keyword[=WORD] additonal keyword to be looked for (without\n" +" WORD means not to use default keywords)\n" +" -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n" +" -L, --language=NAME recognise the specified language (C, C++, PO),\n" +" otherwise is guessed from file extension\n" +" -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n" +" -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n" +" --no-location do not write '#: filename:line' lines\n" +msgstr "" +" -h, --help zeige diese Hilfe und beende\n" +" -i, --indent Ausgabe wird einger�ckt dargestellt\n" +" -j, --join-existing h�nge Ausgaben an existierende Datei an\n" +" -k, --keyword[=WORT] zus�tzliches Wort nach dem gesucht wird (ohne\n" +" WORT schaltet Suche nach Standardworten ab)\n" +" -l, --string-limit=ZAHL begrenze Zeichenkettenl�nge auf Zahl\n" +" (statt Defaultwert %u)\n" +" -L, --language=NAME bearbeitete Eingabe entsprechend Sprache\n" +" NAME (C, C++, PO)\n" +" -m, --msgstr-prefix[=KETTE] nehme KETTE oder \"\" als Pr�fix f�r msgstr\n" +" -M, --msgstr-suffix[=KETTE] nehme KETTE oder \"\" als Suffix f�r msgstr\n" +" --no-location erzeuge keine '#: Dateiname:Zeile' Zeilen\n" + +#: src/xgettext.c:571 +#, no-wrap +msgid "" +" -n, --add-location generate '#: filename:line' lines (default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory DIR\n" +" -s, --sort-output generate sorted output and remove duplicates\n" +" --strict write out strict Uniforum conforming .po file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -x, --exclude-file=FILE entries from FILE are not extracted\n" +"\n" +"If INPUTFILE is -, standard input is read.\n" +msgstr "" +" -n, --add-location erzeuge '#: Dateiname:Zeilennummer' (default)\n" +" --omit-header `msgid \"\"' Eintrag in Kopfteil nicht erzeugen\n" +" -o, --output=DATEI schreibe Ausgabe in DATEI\n" +" -p, --output-dir=VERZEICHNIS Ausgabedateien kommen nach VERZEICHNIS\n" +" -s, --sort-output sortiere Ausgabe und entferne Dubletten\n" +" --strict erzeuge .po Datei streng nach Uniforum Form\n" +" -T, --trigraphs ANSI C Trigraph Zeichen werden erkannt\n" +" -V, --version zeige Versionsnummer und beende\n" +" -w, --width=ANZAHL lege Breite der Ausgabe auf ANZAHL Spalten fest\n" +" -x, --exclude-file=DATEI Eintr�ge aus DATEI werden nicht bearbeitet\n" +"\n" +"Wenn EINGABEDATEI - ist, wird von Standard Eingabe gelesen.\n" + +#: src/xgettext.c:1344 +#, c-format +msgid "language `%s' unknown" +msgstr "Programmiersprache `%s' unbekannt" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/es.gmo b/debian/gettext-kde/gettext-kde-0.10.35/po/es.gmo Binary files differnew file mode 100644 index 00000000..cdb1ccf7 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/es.gmo diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/es.po b/debian/gettext-kde/gettext-kde-0.10.35/po/es.po new file mode 100644 index 00000000..a28a1466 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/es.po @@ -0,0 +1,1156 @@ +# Mensajes en espa�ol para GNU gettext. +# Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. +# Max de Mendiz�bal <[email protected]>, 1996, 1997, 1998. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU gettext 0.10.34\n" +"POT-Creation-Date: 1998-04-30 22:50-0700\n" +"PO-Revision-Date: 1998-04-29 12:04-0500\n" +"Last-Translator: Max de Mendiz�bal <[email protected]>\n" +"Language-Team: Spanish <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +# Nota: El error es del sistema, pero no se sabe cu�l es el error, +# por eso es (adem�s) desconocido. +#: lib/error.c:103 +msgid "Unknown system error" +msgstr "Error del sistema desconocido" + +#: lib/getopt.c:680 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: la opci�n `%s' es ambigua\n" + +#: lib/getopt.c:704 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: la opci�n `--%s' no admite ning�n argumento\n" + +#: lib/getopt.c:709 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: la opci�n `%c%s' no admite ning�n argumento\n" + +#: lib/getopt.c:726 lib/getopt.c:899 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: la opci�n `%s' requiere un argumento\n" + +#. --option +#: lib/getopt.c:755 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: opci�n no reconocida `--%s'\n" + +#. +option or -option +#: lib/getopt.c:759 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: opci�n no reconocida `%c%s'\n" + +# acepto la sugerencia de em en cuanto a que inv�lida parece c�rcel +# o in�til pero mejor puse inv�lida +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:785 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: opci�n inv�lida -- %c\n" + +#: lib/getopt.c:788 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: opci�n inv�lida -- %c\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:818 lib/getopt.c:948 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: la opci�n requiere un argumento -- %c\n" + +#: lib/getopt.c:865 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: la opci�n `-W %s' es ambigua\n" + +#: lib/getopt.c:883 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: la opci�n `-W %s' no admite ning�n argumento\n" + +#: lib/xmalloc.c:82 +msgid "Memory exhausted" +msgstr "Memoria agotada" + +#: src/gettextp.c:134 src/msgcmp.c:144 src/msgcomm.c:285 src/msgfmt.c:257 +#: src/msgmerge.c:254 src/msgunfmt.c:175 src/xgettext.c:394 +#, c-format, no-wrap +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"Esto es software libre; vea el c�digo fuente para las condiciones de copia.\n" +"No hay NINGUNA garant�a; ni siquiera de COMERCIABILIDAD o IDONEIDAD PARA UN\n" +"FIN DETERMINADO.\n" + +#: src/gettextp.c:139 src/msgcmp.c:149 src/msgcomm.c:290 src/msgfmt.c:262 +#: src/msgmerge.c:259 src/msgunfmt.c:180 src/xgettext.c:399 +#, c-format +msgid "Written by %s.\n" +msgstr "Escrito por %s.\n" + +#: src/gettextp.c:154 +msgid "missing arguments" +msgstr "faltan argumentos" + +#: src/gettextp.c:164 +msgid "too many arguments" +msgstr "demasiados argumentos" + +#: src/gettextp.c:228 src/msgcmp.c:181 src/msgcomm.c:395 src/msgfmt.c:361 +#: src/msgmerge.c:301 src/msgunfmt.c:210 src/xgettext.c:532 +#, c-format +msgid "Try `%s --help' for more information.\n" +msgstr "Pruebe `%s --help' para m�s informaci�n.\n" + +# � Y qu� te parece informa de la versi�n y finaliza ? +# as� es c�mo lo estoy haciendo en todas las textutils. em +# No he movido nada porque dudo un poco. Creo que en un +# msdos de IBM en espa�ol dec�a muestra la versi�n y por +# eso lo traduje as�. Si encuentro la referencia te informo +# pero por ahora no me convence eso de `informa de la versi�n' +# suena demasiado pomposo. mm +# +# Ok, como te parezca, es m�s que nada por no repetir 'muestra' em+ +# +# Prefiero que se quede como est�, pues aunque se repite muestra, +# es en otra opci�n en donde aparece. mm +# +#: src/gettextp.c:233 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n" +" -e enable expansion of some escape sequences\n" +" -E (ignored for compatibility)\n" +" -h, --help display this help and exit\n" +" -n suppress trailing newline\n" +" -V, --version display version information and exit\n" +" [TEXTDOMAIN] MSGID retrieve translated message corresponding\n" +" to MSGID from TEXTDOMAIN\n" +msgstr "" +"Modo de empleo: %s [OPCI�N] [[[DOMINIOTEXTO] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=DOMINIOTEXTO obtiene los mensajes traducidos de DOMINIOTEXTO\n" +" -e habilita la expansi�n de algunas secuencias\n" +" de escape\n" +" -E (existe por compatibilidad, no tiene efecto)\n" +" -h, --help muestra este texto de ayuda y finaliza\n" +" -n suprime el car�cter de nueva l�nea\n" +" -V, --version informa de la versi�n y finaliza\n" +" [DOMINIOTEXTO] MSGID obtiene el mensaje traducido correspondiente\n" +" al MSGID del DOMINIOTEXTO\n" + +# Nota: TEXTDOMAIN y TEXTDOMAINDIR son variables de entorno, por lo tanto +# no se pueden traducir (cuando se refieren a las variables, claro est�). +#: src/gettextp.c:245 +#, c-format, no-wrap +msgid "" +"\n" +"If the TEXTDOMAIN parameter is not given, the domain is determined from the\n" +"environment variable TEXTDOMAIN. If the message catalog is not found in the\n" +"regular directory, another location can be specified with the environment\n" +"variable TEXTDOMAINDIR.\n" +"When used with the -s option the program behaves like the `echo' command.\n" +"But it does not simply copy its arguments to stdout. Instead those messages\n" +"found in the selected catalog are translated.\n" +"Standard search directory: %s\n" +msgstr "" +"\n" +"Si no se escribe el par�metro DOMINIOTEXTO, el dominio se determina por\n" +"la variable de entorno TEXTDOMAIN. Si el cat�logo de mensajes no est� en\n" +"el directorio por defecto, con la variable de entorno TEXTDOMAINDIR se\n" +"puede especificar otro lugar.\n" +"Cuando se utiliza con la opci�n -s, el programa se comporta como la\n" +"instrucci�n `echo', pero no se reduce a hacer simplemente una copia en\n" +"la salida est�ndar (stdout) sino que adem�s traduce los mensajes que\n" +"encuentre dentro del cat�logo seleccionado.\n" +"Directorio de b�squeda est�ndar: %s\n" + +#: src/gettextp.c:255 src/msgcmp.c:200 src/msgcomm.c:442 src/msgfmt.c:388 +#: src/msgmerge.c:334 src/msgunfmt.c:234 src/xgettext.c:584 +msgid "Report bugs to <[email protected]>.\n" +msgstr "Comunicar `bugs' a <[email protected]>.\n" + +#: src/message.c:784 +#, c-format +msgid "" +"internationalized messages should not contain the `\\%c' escape sequence" +msgstr "" +"Los mensajes internacionalizados no deben contener la secuencia de escape " +"`\\%c'" + +#: src/message.c:1115 +#, c-format +msgid "cannot create output file \"%s\"" +msgstr "no se puede crear el fichero de salida \"%s\"" + +#: src/message.c:1122 +#, no-c-format +msgid "standard output" +msgstr "salida est�ndar" + +#: src/message.c:1182 +#, c-format +msgid "error while writing \"%s\" file" +msgstr "hubo un error al escribir el fichero \"%s\"" + +#: src/msgcmp.c:160 src/msgmerge.c:270 +msgid "no input files given" +msgstr "no se especificaron ficheros de entrada" + +#: src/msgcmp.c:165 src/msgmerge.c:275 +msgid "exactly 2 input files required" +msgstr "se requieren exactamente 2 ficheros de entrada" + +# Sugerencia: verificar -> comprobar +# Sugerencia: revisar -> comprobar +# +# Si no te gusta repetir "comprobar", pon al menos el segundo y deja el +# primer "verificar". sv +# ok. aceptada. +# +# Max, yo dec�a al rev�s, el primero, verificar, el segundo comprobar. sv +# Pero bueno, no voy a discutir por algo tan peque�o. sv +# ok. mm +# +# sugerencia: concordancia -> coincidencia. sv +# mmh. Lo tomo pero... concuerdan no es precisamente lo mismo que +# coinciden. Creo que el programa quiere decir concordancia no +# coincidencia. mm +# A ver si te convenzo: concordancia se aplica a cosas distintas que deben +# relacionarse de acuerdo con ciertas reglas, por ejemplo, el art�culo y +# el nombre deben concordar en g�nero y n�mero. +# Coincidencia se aplica a cosas de la misma especie que pueden ser iguales +# o no ser iguales. +# Todos los msgid son del mismo tipo. No los hay de tipo "nombre" o de tipo +# "adjetivo", cuando msgmerge toma un fichero.pot y un fichero.viejo +# compara los mensajes de uno y otro para ver si coinciden, es decir, si son +# iguales. sv +# +# (uf, menuda parrafada). sv +# �Eres duro de pelar! tienes raz�n. mm +# +# Otra vez lo mismo 'informa de la versi�n y ... " em +# Y otra cosa ... si llamas una vez ficheros .po , sigue haci�ndolo as� +# siempre. y no una vez .po y otra PO . Ficheros PO me parece tan �ptimo +# como ficheros .po . Tambi�n he corregido un fallo de tecleo en la +# �ltima l�nea ( .. el la precisi�n de diagn�stico ... ) . em +# tienes raz�n. Buscar� uniformizar los ficheros a .po (es m�s discreto) +# No. Ya revis� cu�l fue la raz�n de traducir as�: el original +# Esto es, respet� la norma seguida del original en ingl�s. De todas +# formas no me parece insensato modificar este extra�o comportamiento +# en el momento de traducir. �Qu� opinas? mm +# +# La terminolog�a en cuanto a los ficheros .po ha cambiado mucho. Al principio +# eran ficheros .pot , as� que imag�nate. Ahora definitivamente son +# ficheros .po , y as� se nombran en los documentos. Acabo de ver la faq de +# [email protected] y as� es como lo llaman tambien; +# L'ensemble des fichiers ��.po�� d�j� ... em+ +# ok. Modifico todos los PO por .po que es mas ligero y mejor. mm+ +# +# Dos comentarios: Enrique debe andar algo despistado: +# Un fichero .pot es una "plantilla" (de "template") de un fichero .po +# As� que no es que cambie la nomenclatura, es que son dos cosas +# distintas. De hecho, los ficheros .po vac�os con los que comenzamos +# una traducci�n son casi id�nticos a los ficheros .pot originales. sv +# +# Y otra cosa: Lo del .po .PO. Habr� que respetar el original ingl�s, �no? +# +# Otra cosa: Se puede decir "tambi�n son" o "son tambi�n" +# (lo tengo de una forma en recode y de otra en wdiff). Elige... +# (a ver si me aclaro). O a lo mejor en unos casos es mejor de una forma +# y en otros de otra (la frase no era exactamente igual). +# 11061996mm: En particular en gettext el letrero es est�ndar, por lo que +# prefiero "tambi�n son" que, creo suena mejor. Homogeinizo todo. +#: src/msgcmp.c:186 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -h, --help display this help and exit\n" +" -V, --version output version information and exit\n" +"\n" +"Compare two Uniforum style .po files to check that both contain the same\n" +"set of msgid strings. The def.po file is an existing PO file with the\n" +"old translations. The ref.po file is the last created PO file\n" +"(generally by xgettext). This is useful for checking that you have\n" +"translated each and every message in your program. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better diagnostics.\n" +msgstr "" +"Modo de empleo: %s [OPCI�N] def.po ref.po\n" +"Los argumentos obligatorios para las opciones largas tambi�n son\n" +"obligatorios para las opciones cortas.\n" +" -D, --directory=DIRECTORIO a�ade el DIRECTORIO a la lista de\n" +" b�squeda de ficheros de entrada\n" +" -h, --help muestra esta ayuda y finaliza\n" +" -V, --version informa de la versi�n y finaliza\n" +"\n" +"Compara dos ficheros .po de estilo Uniforum para comprobar que ambos\n" +"contienen el mismo conjunto de cadenas de mensajes (msgid). El fichero\n" +"def.po es un fichero existente de tipo .po con las traducciones\n" +"antiguas. El fichero ref.po es el �ltimo fichero .po creado\n" +"(generalmente por xgettext). Esto es �til para verificar que se han\n" +"traducido todos y cada uno de los mensajes del programa. Cuando no\n" +"se encuentre un resultado exacto, se utilizar� coincidencia difusa, de\n" +"tal forma que la precisi�n del diagn�stico sea mejor.\n" + +#: src/msgcmp.c:259 src/msgmerge.c:714 +msgid "this message is used but not defined..." +msgstr "este mensaje se usa pero no est� definido..." + +#: src/msgcmp.c:261 src/msgmerge.c:716 +msgid "...but this definition is similar" +msgstr "...pero esta definici�n es parecida" + +#: src/msgcmp.c:267 src/msgmerge.c:743 +#, c-format +msgid "this message is used but not defined in %s" +msgstr "este mensaje se usa pero no est� definido en %s" + +#: src/msgcmp.c:281 +msgid "warning: this message is not used" +msgstr "atenci�n: este mensaje no se utiliza" + +# Nota: es la definici�n la que est� duplicada. +#: src/msgcmp.c:355 src/msgfmt.c:632 src/msgmerge.c:493 src/xgettext.c:1063 +msgid "duplicate message definition" +msgstr "definici�n del mensaje duplicada" + +#: src/msgcmp.c:356 src/msgfmt.c:633 src/msgmerge.c:494 src/xgettext.c:1064 +msgid "...this is the location of the first definition" +msgstr "...aqu� est� la primera definici�n" + +#: src/msgcmp.c:396 src/msgmerge.c:542 +#, c-format +msgid "this message has no definition in the \"%s\" domain" +msgstr "este mensaje no tiene definici�n en el dominio \"%s\"" + +#. We are about to construct the absolute path to the +#. directory for the output files but asprintf failed. +#: src/msgcomm.c:238 src/xgettext.c:340 src/xgettext.c:1258 +msgid "while preparing output" +msgstr "mientras se preparaba la salida" + +#: src/msgcomm.c:273 src/msgcomm.c:277 src/xgettext.c:378 src/xgettext.c:382 +#, c-format +msgid "%s and %s are mutually exclusive" +msgstr "%s y %s son mutuamente excluyentes" + +#: src/msgcomm.c:341 +msgid "at least two files must be specified" +msgstr "" + +#: src/msgcomm.c:360 +#, c-format +msgid "impossible selection criteria specified (%d < n < %d)" +msgstr "" + +# Otra cosa: La l�nea del debug (la nueva) creo que es demasiado larga. +# 11061996mm: Es cierto pero en este caso prefiero no ser breve pues la +# opci�n de debug hace algo m�s que simplemente dar m�s informaci�n y es +# necesario aclarar el punto. +# 27061996sv: Me refer�a a lo de las 80 columnas... +#: src/msgcomm.c:400 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" -F, --sort-by-file sort output by file location\n" +" -h, --help display this help and exit\n" +msgstr "" +"Modo de empleo: %s [OPCI�N] FICHERO ...\n" +"Extrae las cadenas traducibles a partir de los ficheros dados.\n" +"\n" +"Los argumentos obligatorios para las opciones largas tambi�n son\n" +"obligatorios para las opciones cortas.\n" +" -a, --extract-all extrae todas las cadenas\n" +" -c, --add-comments[=ETIQUETA] pone un bloque de comentarios con\n" +" ETIQUETA (o aquellos que preceden\n" +" l�neas de palabras clave) en el fichero\n" +" de salida\n" +" -C, --c++ abreviatura de --language=C++\n" +" --debug el resultado de la etapa de reconocimiento\n" +" de las cadenas de formato se escribe en forma\n" +" detallada\n" +" -d, --default-domain=NOMBRE utiliza NOMBRE.po para la salida (en vez\n" +" de messages.po)\n" +" -D, --directory=DIRECTORIO a�ade el DIRECTORIO a la lista de\n" +" b�squeda de ficheros de entrada\n" +" -e, --no-escape no utiliza secuencias de escape tipo C en\n" +" la salida (opci�n por defecto)\n" +" -E, --escape utiliza secuencias de escape tipo C en la\n" +" salida, sin caracteres extendidos\n" +" -f, --files-from=FICHERO obtiene la lista de los ficheros de entrada\n" +" de FICHERO\n" +" --force-po escribe un fichero .po incluso si est� vac�o\n" +" --foreign-user no muestra el copyright de FSF para usuarios\n" +" no ingleses\n" +" -F, --sort-by-file ordena la salida por ubicaci�n del fichero\n" + +# +# 19071996cb: --omit-header no escribe la cabecera para la entrada +# 20071996sv: Creo que lo que tiene Max ahora mismo es mejor. "with" es "con" +# 29071996mm: Creo que si. Mejor ah� lo dejamos. +# He formateado bastantes cosas aqu�. Tendr� que decirlo en la lista. A veces +# es conveniente correr todo un poco a la izda para que ocupe menos l�neas. No +# hay cosa m�s inc�moda que hacer un `algo --help' y que precisamente lo que +# nos interese se haya salido de la/el terminal em+ +# Ok. mm+ +#: src/msgcomm.c:412 +#, fuzzy +msgid "" +" -i, --indent write the .po file using indented style\n" +" --no-location do not write '#: filename:line' lines\n" +" -n, --add-location generate '#: filename:line' lines " +"(default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory " +"DIR\n" +" -s, --sort-output generate sorted output and remove " +"duplicates\n" +" --strict write out strict Uniforum conforming .po " +"file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -u, --unique shorthand for --less-than=2, requests\n" +" that only unique messages be printed\n" +msgstr "" +" -n, --add-location genera l�neas `#: fichero:l�nea' (por " +"defecto)\n" +" --omit-header no escribe la cabecera con la entrada `msgid " +"\"\"'\n" +" --output=FICHERO escribe la salida al FICHERO especificado\n" +" -p, --output-dir=DIR los ficheros de salida se pondr�n en el\n" +" directorio DIR\n" +" -s, --sort-output genera la salida ordenada y elimina los\n" +" duplicados\n" +" --strict escribe un fichero .po tipo Uniforum " +"estricto\n" +" -T, --trigraphs entiende los trigrafos ANSI C en la entrada\n" +" -V, --version informa de la versi�n y finaliza\n" +" -w, --width=N�MERO ajusta la anchura de la p�gina de salida\n" +" -x, --exclude-file=FICHERO las entradas de FICHERO no se extraen\n" +"\n" +"Si el FICHERO_DE_ENTRADA es -, se lee de la entrada est�ndar.\n" + +#: src/msgcomm.c:425 +msgid "" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -<, --less-than=NUMBER print messages with less than this many\n" +" definitions, defaults to infinite if not\n" +" set\n" +" ->, --more-than=NUMBER print messages with more than this many\n" +" definitions, defaults to 1 if not set\n" +"\n" +"Find messages which are common to two or more of the specified PO files.\n" +"By using the --more-than option, greater commonality may be requested\n" +"before messages are printed. Conversely, the --less-than option may be\n" +"used to specify less commonality before messages are printed (i.e.\n" +"--less-than=2 will only print the unique messages). Translations,\n" +"comments and extract comments will be preserved, but only from the first\n" +"PO file to define them. File positions from all PO files will be\n" +"preserved.\n" +msgstr "" + +#: src/msgcomm.c:476 src/msgunfmt.c:357 src/po-lex.c:74 src/xget-lex.c:159 +#: src/xget-lex.c:174 src/xget-lex.c:191 src/xgettext.c:618 +#, c-format +msgid "error while opening \"%s\" for reading" +msgstr "error al abrir el fichero \"%s\" para lectura" + +# sospecho que lo que en realidad ocurre es que "no debe". sv +# Miraremos el c�digo fuente. sv +# +# ok. aqu� est� el fuente. Tengo la impresi�n de que estoy en +# lo correcto: es decir que es necesario que tenga al menos +# una instrucci�n de dominio. +# por cierto traduje directive por instrucci�n aunque con las +# series de TV gringas acostumbran mal traducir a "directivas". mm. +# +# exclude_directive_domain (pop, name) +# po_ty *pop; +# char *name; +# { +# po_gram_error (_("this file may not contain domain directives")); +# } +# +# Me lo pones m�s claro: el mensaje est� dentro de una funci�n llamada +# "exclude_directive_domain". Probablemente porque *no* debe haber +# "domain directives", no porque posiblemente no las haya. +# +# Por eso creo que en este caso, como en algunos otros, "may not" +# significa "should not". +# +# Sigo pensando igual que antes, aunque no estoy seguro del todo. sv +# �Qu� opinas Enrique? mm +# Pues despu�s de ver los fuentes no consigo estar seguro. Pero +# definitivamente no optar�a por 'no deber�a' , sino por 'no puede' , por +# el nombre de la funci�n est� claro que es lo que se pretende. Afortunada- +# mente el verbo poder en Castellano es mucho m�s flexible que en otros +# idiomas. De todas maneras siempre se puede mirar otras traducciones. em +# ok. Acepto en 'no puede' a reserva de encontrar nuevos argumentos. mm +#: src/msgcomm.c:557 src/xgettext.c:660 src/xgettext.c:970 +msgid "this file may not contain domain directives" +msgstr "este fichero no puede contener instrucciones de dominio" + +# acepto sugerencia de em pero agrego un "el". mm +#: src/msgfmt.c:273 src/xgettext.c:410 +msgid "no input file given" +msgstr "no se especific� el fichero de entrada" + +#: src/msgfmt.c:321 +#, c-format +msgid "error while opening \"%s\" for writing" +msgstr "error al abrir el fichero \"%s\" para escritura" + +#: src/msgfmt.c:343 +#, c-format +msgid "%d translated messages" +msgstr "%d mensajes traducidos" + +#: src/msgfmt.c:345 +#, c-format +msgid ", %d fuzzy translations" +msgstr ", %d traducciones difusas" + +#: src/msgfmt.c:347 +#, c-format +msgid ", %d untranslated messages" +msgstr ", %d mensajes sin traducir" + +# "enlista" queda "raro", �qu� te parece "muestra" o algo as�? sv +# ok, puse muestra pero, �qu� tal `enumera'? mm +# 12061996sv: Si el programa no les va poniendo n�meros a cada una +# que muestra, no. +# +# Lo mismo con 'informa de la versi�n...' em +# +# 12061996sv: He puesto `hash' en lugar de hash, ya que no +# es una palabra espa�ola. +# +# 20071996sv: "language dependent check" ser�a "comprobaci�n dependiente +# del idioma" �no? +# Propongo algo como "realiza comprobaciones dependientes del idioma +# a las cadenas". sv +# +# 29071996mm: A ver si les gusta esto "comprueba cadenas de texto con respecto al idioma" +# 30071996sv: �Y a�adiendo "las" cadenas? sv +# 30071996mm: Ok. Me gusta m�s. +# 19071996cb: +# " (valor predeterminado: %d)\n", �o en todos los +# otros lugares ya se ha traducido como por defecto? cb +# +# 20071996sv: Depende del caso. En este caso puede valer lo que dices. +# 29071996mm: Ok. Lo cambio a reserva de que a alguien m�s le guste. +# +# 19071996cb: +# " -o, --output-file=FICHERO el nombre del fichero de salida ser� FICHERO\n" +# 29071996mm: "... indica que el nombre del fichero de salida ser� FICHERO\n" +# espero que mejore as�. +# 30071996sv: Mejora. +# Sugerencia adicional (un poco m�s corto): +# "Establece que FICHERO sea el nombre del fichero de salida". sv +# 30071996mm: No me gusta como suena: "fichero sea el nombre del fichero". +# +# Sugerencia: -f -> "utiliza" en lugar de "usa". sv +# Ok. Preferible. +# +# OJO: Si se pone un argumento superior a uno en la opci�n -v +# No es as�, es "si se utiliza la opci�n -v m�s de una vez". sv+ +#: src/msgfmt.c:366 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] filename.po ...\n" +"Generate binary message catalog from textual translation description.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n" +" -c, --check perform language dependent checks on strings\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -f, --use-fuzzy use fuzzy entries in output\n" +" -h, --help display this help and exit\n" +" --no-hash binary file will not include the hash table\n" +" -o, --output-file=FILE specify output file name as FILE\n" +" --statistics print statistics about translations\n" +" --strict enable strict Uniforum mode\n" +" -v, --verbose list input file anomalies\n" +" -V, --version output version information and exit\n" +"\n" +"Giving the -v option more than once increases the verbosity level.\n" +"\n" +"If input file is -, standard input is read. If output file is -,\n" +"output is written to standard output.\n" +msgstr "" +"Modo de empleo: %s [OPCI�N] fichero.po ...\n" +"Genera un cat�logo de mensajes en formato binario a partir de la\n" +"descripci�n de la traducci�n textual.\n" +"\n" +"Los argumentos obligatorios para las opciones largas tambi�n son\n" +"obligatorios para las opciones cortas.\n" +" -a, --alignment=N�MERO alinea las cadenas a un N�MERO de bytes\n" +" (valor predeterminado: %d)\n" +" -c, --check comprueba las cadenas de texto con respecto\n" +" al idioma\n" +" -D, --directory=DIRECTORIO a�ade el DIRECTORIO a la lista de\n" +" b�squeda de ficheros de entrada\n" +" -f, --use-fuzzy utiliza l�neas difusas en la salida\n" +" -h, --help muestra esta ayuda y finaliza\n" +" --no-hash el fichero binario no incluir� la tabla de `hash'\n" +" -o, --output-file=FICHERO indica que el nombre del fichero de salida\n" +" ser� FICHERO\n" +" --statistics muestra estad�sticas sobre las traducciones\n" +" --strict habilita el modo estricto de Uniforum\n" +" -v, --verbose muestra las anomal�as del fichero de entrada\n" +" -V, --version informa de la versi�n del programa y finaliza\n" +"\n" +"Si se pone un argumento superior a uno en la opci�n -v, se incrementa el nivel de detalle\n" +"\n" +"Si el fichero de entrada es -, se lee de la entrada est�ndar. Si el fichero\n" +"de salida es -, el resultado se escribe en la salida est�ndar.\n" +"\n" + +#: src/msgfmt.c:409 +msgid "while creating hash table" +msgstr "mientras se creaba la tabla de `hash'" + +#: src/msgfmt.c:451 +#, c-format +msgid "%s: warning: no header entry found" +msgstr "%s: atenci�n: no se encontr� la l�nea de cabecera" + +#: src/msgfmt.c:473 +#, c-format +msgid "domain name \"%s\" not suitable as file name" +msgstr "el nombre de dominio \"%s\" no es v�lido como nombre de fichero" + +#: src/msgfmt.c:478 +#, c-format +msgid "domain name \"%s\" not suitable as file name: will use prefix" +msgstr "" +"el nombre del dominio \"%s\" no es v�lido como nombre de fichero:\n" +"se utilizar� un prefijo" + +#. We don't change the exit status here because this is really +#. only an information. +#: src/msgfmt.c:491 +#, c-format +msgid "`domain %s' directive ignored" +msgstr "la instrucci�n `domain %s' no tiene efecto" + +# Nunca me gust� ignorar para "to ignore". +# Ignorar es no saber (not to know). "to ignore" es "no hacer caso". +# Sugerencia: Descartar. sv +# Excelente palabreja. Me gusta mucho. mm +#: src/msgfmt.c:519 +msgid "empty `msgstr' entry ignored" +msgstr "se descarta la l�nea vac�a `msgstr'" + +# Lo mismo. sv +# Ok. mm +#: src/msgfmt.c:520 +msgid "fuzzy `msgstr' entry ignored" +msgstr "se descarta la l�nea difusa `msgstr'" + +#: src/msgfmt.c:563 +#, c-format +msgid "headerfield `%s' missing in header" +msgstr "no existe el campo `%s' en la cabecera" + +#: src/msgfmt.c:566 +#, c-format +msgid "header field `%s' should start at beginning of line" +msgstr "el campo `%s' debe comenzar al principio de la l�nea" + +#: src/msgfmt.c:576 +msgid "some header fields still have the initial default value" +msgstr "algunos campos de cabecera a�n tienen el valor inicial" + +#: src/msgfmt.c:587 +#, c-format +msgid "field `%s' still has initial default value" +msgstr "el campo `%s' a�n tiene el valor inicial" + +#: src/msgfmt.c:672 +#, c-format +msgid "%s: warning: source file contains fuzzy translation" +msgstr "%s: atenci�n: el fichero fuente contiene una traducci�n difusa" + +# �qu� les parece: "a `msgid' o `msgstr' les falta el `\\n' final"? cb +# Bien. Mejora. mm +# +# +# Bien, antes dec�a "las l�neas `msgid' y `msgstr' no comienzan con `\\n'" +# No s� qu� es mejor pero no me acaba de gustar: La idea es que *no ambas* +# comienzan por \\n, no que tengan que hacerlo las dos. +# Si una lo hace y la otra no, puede ser que falte en una o que sobre en la +# otra. Yo podnr�a aqu� algo m�s parecido a lo de antes, pero a�adiendo +# "ambas", o algo as�. +# por ejemplo: "las l�neas msgid y msgstr no comienzan ambas con \\n". sv +# Que te parece a alguna de las l�neas ... mm +# +# Sigue pareciendo que deben tenerlo las dos (y no es esa la idea). +# Si no se te ocurre nada mejor, sugerencia: +# "Una de las l�neas msgid y msgstr comienza con `\\n' y la otra no" sv+ +#: src/msgfmt.c:874 +msgid "`msgid' and `msgstr' entries do not both begin with '\\n'" +msgstr "a alguna de las l�neas `msgid' y `msgstr' les falta el `\\n' inicial" + +# Lo mismo, no es que a una de las dos le falte, sino que una lo tiene +# y la otra no, as� de sencillo. sv+ +#: src/msgfmt.c:882 +msgid "`msgid' and `msgstr' entries do not both end with '\\n'" +msgstr "a alguna de las l�neas `msgid' y `msgstr' les falta el `\\n' final" + +#: src/msgfmt.c:896 +msgid "number of format specifications in `msgid' and `msgstr' does not match" +msgstr "" +"el n�mero de especificaciones de formato en `msgid' y 'msgstr' no coincide" + +#: src/msgfmt.c:913 +#, c-format +msgid "format specifications for argument %u are not the same" +msgstr "las especificaciones de formato para el argumento %u no son las mismas" + +# Lo mismo en ' informa de la versi�n...' em +# Obligatorios.. obligatorios , queda un poco feo. Si lo que se pretende +# es ser fiel al original, pon 'son tambien obligatorios para...' em+ +#: src/msgmerge.c:306 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent indented output style\n" +" -o, --output-file=FILE result will be written to FILE\n" +" --no-location suppress '#: filename:line' lines\n" +" --add-location preserve '#: filename:line' lines (default)\n" +" --strict strict Uniforum output style\n" +" -v, --verbose increase verbosity level\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Modo de empleo: %s [OPCI�N] def.po ref.po\n" +"Los argumentos obligatorios para las opciones largas tambi�n son\n" +"obligatorios para las opciones cortas.\n" +"\n" +" -D, --directory=DIRECTORIO a�ade el DIRECTORIO a la lista de\n" +" b�squeda de ficheros de entrada\n" +" -e, --no-escape no utiliza escapes C en la salida (por defecto)\n" +" -E, --escape utiliza escape C en la salida, sin caracteres\n" +" extendidos\n" +" --force-po escribe un fichero .po incluso si est� vac�o\n" +" -h, --help muestra esta ayuda y finaliza\n" +" -i, --indent estilo de salida con sangr�as\n" +" -o, --output-file=FICHERO el resultado se escribe en FICHERO\n" +" --no-location no escribe l�neas '#: fichero:l�nea'\n" +" --add-location escribe l�neas '#: fichero:l�nea' (por defecto)\n" +" --strict estilo de salida Uniforum estricto\n" +" -v, --verbose incrementa el nivel de mensajes\n" +" -V, --version informa de la versi�n y finaliza\n" +" -w, --width=N�MERO ajusta la anchura de la p�gina de salida\n" + +#: src/msgmerge.c:324 +#, no-wrap +msgid "" +"\n" +"Merges two Uniforum style .po files together. The def.po file is an\n" +"existing PO file with the old translations which will be taken over to\n" +"the newly created file as long as they still match; comments will be\n" +"preserved, but extract comments and file positions will be discarded.\n" +"The ref.po file is the last created PO file (generally by xgettext), any\n" +"translations or comments in the file will be discarded, however dot\n" +"comments and file positions will be preserved. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better results. The\n" +"results are written to stdout unless an output file is specified.\n" +msgstr "" +"\n" +"Mezcla dos ficheros .po de estilo Uniforum en uno solo. El fichero def.po\n" +"es un fichero existente de tipo .po con las traducciones anteriores que se\n" +"conservar�n siempre y cuando coincidan; los comentarios se conservar�n,\n" +"pero los comentarios extra�dos y las posiciones del fichero no lo ser�n.\n" +"El fichero ref.po es el �ltimo fichero .po creado (generalmente con xgettext),\n" +"cualquier traducci�n o comentario se eliminar�, sin embargo los comentarios\n" +"puntuales y las posiciones dentro del fichero se conservar�n. En donde no\n" +"haya una coincidencia exacta, se utilizar� el m�todo de comparaci�n difusa\n" +"para obtener mejores resultados. Los resultados se escribir�n en la salida\n" +"est�ndar a menos que se especifique un fichero de salida.\n" + +#: src/msgmerge.c:772 +#, c-format +msgid "" +"%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete " +"%d.\n" +msgstr "" +"%sle�dos %d mensajes antiguos + %d mensajes de referencia\n" +"incorporados %d, convertidos en difusos %d, faltan %d, obsoletos %d.\n" + +# Porque no mejor poner simplemente 'fin'? mm++ +#: src/msgmerge.c:778 +msgid " done.\n" +msgstr " terminado.\n" + +#: src/msgunfmt.c:215 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [FILE]...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent write indented output style\n" +" -o, --output-file=FILE write output into FILE instead of standard output\n" +" --strict write strict uniforum style\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Modo de empleo: %s [OPCI�N] [FICHERO]...\n" +"Los argumentos obligatorios para las opciones largas tambi�n son\n" +"obligatorios para las opciones cortas.\n" +" -e, --no-escape no utiliza las secuencias de escape tipo C\n" +" en la salida (por defecto)\n" +" -E, --escape utiliza las secuencias de escape tipo C en\n" +" la salida, sin caracteres extendidos\n" +" --force-po escribe un fichero .po incluso si est� vac�o\n" +" -h, --help muestra esta ayuda y finaliza\n" +" -o, --output-file=FICHERO escribe la salida en FICHERO en vez de\n" +" utilizar la salida est�ndar\n" +" --strict escribe en estilo Uniforum estricto\n" +" -V, --version informa de la versi�n y finaliza\n" +" -w, --width=N�MERO ajusta la anchura de la p�gina de salida\n" + +# 12061996sv: Aqu� he cambiado lo siguiente: +# la salida se escribe en -> el *resultado* se escribe en ... +# 12061996sv: Por otro lado "se manipulan" suena muy raro. +# �qu� te parecer�a "se manejan"? O si no, �se podr�a poner algo +# completamente distinto? +# 19071996mm: Creo que tienes raz�n. �Que te parece "se tratan"? +# +# 19071996cb: Pueden procesarse ficheros .mo tanto little-endian como big-endian. +# la idea es que ambas clases son soportadas. cb +# 29071996mm: Puse "Pueden procesarse ficheros .mo little-endian y big-endian. +# les agrada mas as�? +# 30071996sv: Mejor que antes, s�. Pero la palabra "tantos" que C�sar sugiere +# creo que recoge el sentido de "both" del original. �qu� te parece? sv +# +#: src/msgunfmt.c:229 +#, no-wrap +msgid "" +"\n" +"Convert binary .mo files to Uniforum style .po files.\n" +"Both little-endian and big-endian .mo files are handled.\n" +"If no input file is given or it is -, standard input is read.\n" +"By default the output is written to standard output.\n" +msgstr "" +"\n" +"Convierte ficheros binarios .mo en ficheros .po estilo Uniforum.\n" +"Pueden procesarse ficheros .mo little-endian y big-endian.\n" +"Si no se da ning�n fichero de entrada o es -, se lee de la entrada est�ndar.\n" +"Por defecto el resultado se escribe en la salida est�ndar.\n" + +#: src/msgunfmt.c:266 src/msgunfmt.c:330 src/po-lex.c:185 src/xget-lex.c:254 +#, c-format +msgid "error while reading \"%s\"" +msgstr "error al leer \"%s\"" + +#: src/msgunfmt.c:267 src/msgunfmt.c:331 +#, c-format +msgid "file \"%s\" truncated" +msgstr "el fichero \"%s\" est� truncado" + +#: src/msgunfmt.c:298 +#, c-format +msgid "seek \"%s\" offset %ld failed" +msgstr "fallo en la lectura \"%s\" en la posici�n (offset) %ld" + +#: src/msgunfmt.c:373 +#, c-format +msgid "file \"%s\" is not in GNU .mo format" +msgstr "el fichero \"%s\" no est� en el formato .mo de GNU" + +#: ../../src/po-gram.y:83 +msgid "missing `msgstr' section" +msgstr "no hay secci�n `msgstr'" + +# Jeje. Bueno , esto me recuerda a una canci�n de Burning, digo lo +# de fatal. Fatal en Castellano es muy malo, o peligros�simo ... creo que +# habr� que dejarlo as�, es m�s convincente. Perdona por estas 3 lineas em +# +# �Burning? Mi incultura es grave �qui�nes son esos? mm +# +# Son los que cantan lo de 'qu� hace una chica como t� en un sitio como este' +# en una parte de la canci�n repiten: 'mujer fatal ... ' :) em+ +# +# �Ah! Dir�n que soy pocho pero oigo muy poca m�sica en castellano, a lo +# m�s que llego es a Sabina y a Mecano y la Orquesta Mondrag�n cuando +# exist�a. Volviendo a la discusi�n, prefiero lo de fatal: tiene mucho +# peso. Aunque ... �qu� tal 'errores imperdonables'? mm+ +# +# Tal y como yo lo veo, "Error fatal" es el que obliga al programa a detenerse. +# En ingl�s se utiliza esta palabra con ese significado. +# A menos que veamos un libro en espa�ol que utilice una palabra distinta +# para referirse a lo mismo, sugiero dejarlo como est�. sv +# +# 07061996mm: Mujer fatal es menos que mortal, menos que peligroso e incita a la +# aventura. Quiz� no sea tan malo como dice Enrique, a menos que... +#: src/po-lex.c:84 +#, c-format +msgid "found %d fatal errors" +msgstr "se encontraron %d errores fatales" + +# Abortando queda un poco feo. �qu� se podr�a poner en su lugar? +# Aterrizaje forzoso! el programa no puede continuar. Que te parece? mm. +# +# un poco exagerado... sv. A ver si a Enrique se le ocurre algo, y si no +# lo dejaremos en "abortado" sv +# +# �qu� les parece `por exceso de errores, finaliza el programa'? mm +# +# a m� abortando no me parece mal. Quiz� 'programa interrumpido' em +# +# �Qu� tal `por exceso de errores el programa no puede continuar'? mm +# +# Perfecto em+ +# +# ok. corregido. mm+ +# +# �Vaya!, pues a m� no me gusta nada, pero nada. Me explico: +# No es fiel: El programa s� puede continuar, pero *no quiere*, que es +# distinto. Seguro que hay un par�metro de compilaci�n que especifica +# el n�mero de errores que deben aparecer para que el programa d� el +# mensaje en cuesti�n. Propongo: "demasiados errores: programa interrumpido" +# o algo as�. sv +# +# 07061996mm: Propongo "demasiados errores, no tiene caso continuar" +# +# 08061996sv: Uf, eso en Espa�a suena rar�simo. �Podr�as proponer otra cosa? +# +# 11061996mm: Ok. Hasta no pensar un poco m�s, adopto como buena tu propuesta +# +# 19071996cb: "demasiados errores, abandono la ejecuci�n" cb +# 20071996sv: Eso no seguir�a la regla impl�cita de que el programa no debe +# hablar en primera persona sino en estilo impersonal. +# (Esta regla estar� en el manual de Enrique, con toda seguridad). +#: src/po-lex.c:129 src/po-lex.c:168 +msgid "too many errors, aborting" +msgstr "demasiados errores, programa interrumpido" + +#: src/po-lex.c:241 +#, c-format +msgid "keyword \"%s\" unknown" +msgstr "palabra clave \"%s\" desconocida" + +#: src/po-lex.c:332 +msgid "illegal control sequence" +msgstr "secuencia de control ilegal" + +#: src/po-lex.c:415 +msgid "end-of-line within string" +msgstr "fin de l�nea dentro de una cadena" + +#: src/po-lex.c:420 +msgid "end-of-file within string" +msgstr "fin de fichero dentro de una cadena" + +#: src/xget-lex.c:150 +msgid "standard input" +msgstr "entrada est�ndar" + +#: src/xget-lex.c:892 +#, c-format +msgid "%s:%d: warning: unterminated character constant" +msgstr "%s:%d: atenci�n: constante de tipo car�cter no finalizada" + +#: src/xget-lex.c:914 +#, c-format +msgid "%s:%d: warning: unterminated string literal" +msgstr "%s:%d: atenci�n: literal de cadena no finalizada" + +#: src/xgettext.c:386 +msgid "--join-existing cannot be used when output is written to stdout" +msgstr "" +"no se puede utilizar --join-existing cuando el resultado se escribe en la\n" +"salida est�ndar (stdout)" + +#: src/xgettext.c:501 +#, c-format +msgid "warning: file `%s' extension `%s' is unknown; will try C" +msgstr "" +"atenci�n: el fichero `%s' con extensi�n `%s'\n" +"es desconocido; se intentar� tipo C" + +# Otra cosa: La l�nea del debug (la nueva) creo que es demasiado larga. +# 11061996mm: Es cierto pero en este caso prefiero no ser breve pues la +# opci�n de debug hace algo m�s que simplemente dar m�s informaci�n y es +# necesario aclarar el punto. +# 27061996sv: Me refer�a a lo de las 80 columnas... +#: src/xgettext.c:537 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Extract translatable string from given input files.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --extract-all extract all strings\n" +" -c, --add-comments[=TAG] place comment block with TAG (or those\n" +" preceding keyword lines) in output file\n" +" -C, --c++ shorthand for --language=C++\n" +" --debug more detailed formatstring recognision result\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" --foreign-user omit FSF copyright in output for foreign user\n" +" -F, --sort-by-file sort output by file location\n" +msgstr "" +"Modo de empleo: %s [OPCI�N] FICHERO ...\n" +"Extrae las cadenas traducibles a partir de los ficheros dados.\n" +"\n" +"Los argumentos obligatorios para las opciones largas tambi�n son\n" +"obligatorios para las opciones cortas.\n" +" -a, --extract-all extrae todas las cadenas\n" +" -c, --add-comments[=ETIQUETA] pone un bloque de comentarios con\n" +" ETIQUETA (o aquellos que preceden\n" +" l�neas de palabras clave) en el fichero\n" +" de salida\n" +" -C, --c++ abreviatura de --language=C++\n" +" --debug el resultado de la etapa de reconocimiento\n" +" de las cadenas de formato se escribe en forma\n" +" detallada\n" +" -d, --default-domain=NOMBRE utiliza NOMBRE.po para la salida (en vez\n" +" de messages.po)\n" +" -D, --directory=DIRECTORIO a�ade el DIRECTORIO a la lista de\n" +" b�squeda de ficheros de entrada\n" +" -e, --no-escape no utiliza secuencias de escape tipo C en\n" +" la salida (opci�n por defecto)\n" +" -E, --escape utiliza secuencias de escape tipo C en la\n" +" salida, sin caracteres extendidos\n" +" -f, --files-from=FICHERO obtiene la lista de los ficheros de entrada\n" +" de FICHERO\n" +" --force-po escribe un fichero .po incluso si est� vac�o\n" +" --foreign-user no muestra el copyright de FSF para usuarios\n" +" no ingleses\n" +" -F, --sort-by-file ordena la salida por ubicaci�n del fichero\n" + +#: src/xgettext.c:557 +#, c-format, no-wrap +msgid "" +" -h, --help display this help and exit\n" +" -i, --indent write the .po file using indented style\n" +" -j, --join-existing join messages with existing file\n" +" -k, --keyword[=WORD] additonal keyword to be looked for (without\n" +" WORD means not to use default keywords)\n" +" -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n" +" -L, --language=NAME recognise the specified language (C, C++, PO),\n" +" otherwise is guessed from file extension\n" +" -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n" +" -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n" +" --no-location do not write '#: filename:line' lines\n" +msgstr "" +" -h, --help muestra esta ayuda y finaliza\n" +" -i, --indent escribe el fichero .po utilizando el\n" +" estilo de sangr�as\n" +" -j, --join-existing une los mensajes con el fichero existente\n" +" -k, --keyword[=PALABRA] busca palabras claves adicionales (sin\n" +" PALABRA significa que no utilice las palabras\n" +" clave por defecto)\n" +" -l, --string-limit=N�MERO pone como l�mite de la longitud de la cadena\n" +" a N�MERO en vez de %u\n" +" -L, --language=NOMBRE reconoce el lenguaje especificado (C, C++, PO),\n" +" de otra forma, se supone por medio de la\n" +" extensi�n del fichero\n" +" -m, --msgstr-prefix[=CADENA] usa CADENA o \"\" como prefijo para las\n" +" entradas msgstr\n" +" -M, --msgstr-suffix[=CADENA] usa CADENA o \"\" como sufijo para las\n" +" entradas msgstr\n" +" --no-location no escribe l�neas `#: fichero:l�nea'\n" + +# +# 19071996cb: --omit-header no escribe la cabecera para la entrada +# 20071996sv: Creo que lo que tiene Max ahora mismo es mejor. "with" es "con" +# 29071996mm: Creo que si. Mejor ah� lo dejamos. +# He formateado bastantes cosas aqu�. Tendr� que decirlo en la lista. A veces +# es conveniente correr todo un poco a la izda para que ocupe menos l�neas. No +# hay cosa m�s inc�moda que hacer un `algo --help' y que precisamente lo que +# nos interese se haya salido de la/el terminal em+ +# Ok. mm+ +#: src/xgettext.c:571 +#, no-wrap +msgid "" +" -n, --add-location generate '#: filename:line' lines (default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory DIR\n" +" -s, --sort-output generate sorted output and remove duplicates\n" +" --strict write out strict Uniforum conforming .po file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -x, --exclude-file=FILE entries from FILE are not extracted\n" +"\n" +"If INPUTFILE is -, standard input is read.\n" +msgstr "" +" -n, --add-location genera l�neas `#: fichero:l�nea' (por defecto)\n" +" --omit-header no escribe la cabecera con la entrada `msgid \"\"'\n" +" --output=FICHERO escribe la salida al FICHERO especificado\n" +" -p, --output-dir=DIR los ficheros de salida se pondr�n en el\n" +" directorio DIR\n" +" -s, --sort-output genera la salida ordenada y elimina los\n" +" duplicados\n" +" --strict escribe un fichero .po tipo Uniforum estricto\n" +" -T, --trigraphs entiende los trigrafos ANSI C en la entrada\n" +" -V, --version informa de la versi�n y finaliza\n" +" -w, --width=N�MERO ajusta la anchura de la p�gina de salida\n" +" -x, --exclude-file=FICHERO las entradas de FICHERO no se extraen\n" +"\n" +"Si el FICHERO_DE_ENTRADA es -, se lee de la entrada est�ndar.\n" + +#: src/xgettext.c:1344 +#, c-format +msgid "language `%s' unknown" +msgstr "lenguaje `%s' desconocido" + +#~ msgid "Report bugs to <[email protected]>.\n" +#~ msgstr "Comunicar `bugs' a <[email protected]>.\n" + +# suena horrible esto pero no se como romper la cacofon�a. mm. +# Modifico, de acuerdo con la sugerencia de em, con un peque�o cambio. mm +#~ msgid "this is the location of the first definition" +#~ msgstr "aqu� se define por primera vez" + +#~ msgid "duplicate message ID" +#~ msgstr "el ID del mensaje est� duplicado" + +#~ msgid "cannot change to directory \"%s\"" +#~ msgstr "no se puede cambiar al directorio \"%s\"" + +#~ msgid "cannot change back to directory \"%s\"" +#~ msgstr "no se puede regresar al directorio \"%s\"" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/fr.gmo b/debian/gettext-kde/gettext-kde-0.10.35/po/fr.gmo Binary files differnew file mode 100644 index 00000000..c690853e --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/fr.gmo diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/fr.po b/debian/gettext-kde/gettext-kde-0.10.35/po/fr.po new file mode 100644 index 00000000..c06bed51 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/fr.po @@ -0,0 +1,821 @@ +# Messages fran�ais pour GNU gettext. +# Copyright � 1996, 1997 Free Software Foundation, Inc. +# Fran�ois Pinard <[email protected]>, 1996. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU gettext 0.10.31\n" +"POT-Creation-Date: 1998-04-30 22:50-0700\n" +"PO-Revision-Date: 1997-08-28 09:52 EDT\n" +"Last-Translator: Fran�ois Pinard <[email protected]>\n" +"Language-Team: French <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/error.c:103 +msgid "Unknown system error" +msgstr "Erreur syst�me non identifi�e" + +#: lib/getopt.c:680 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: l'option � %s � est ambigu�\n" + +#: lib/getopt.c:704 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: l'option � --%s � ne tol�re pas d'argument\n" + +#: lib/getopt.c:709 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: l'option � %c%s � ne tol�re pas d'argument\n" + +#: lib/getopt.c:726 lib/getopt.c:899 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: l'option � %s � exige un argument\n" + +#. --option +#: lib/getopt.c:755 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: l'option � --%s � n'est pas reconnue\n" + +#. +option or -option +#: lib/getopt.c:759 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: l'option � %c%s � n'est pas reconnue\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:785 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: l'option � %c � n'est pas permise\n" + +#: lib/getopt.c:788 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: l'option � %c � n'est pas valide\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:818 lib/getopt.c:948 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: l'option � %c � exige un argument\n" + +#: lib/getopt.c:865 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: l'option � -W %s � est ambigu�\n" + +#: lib/getopt.c:883 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: l'option � -W %s � ne tol�re pas d'argument\n" + +#: lib/xmalloc.c:82 +msgid "Memory exhausted" +msgstr "M�moire enti�rement consomm�e" + +#: src/gettextp.c:134 src/msgcmp.c:144 src/msgcomm.c:285 src/msgfmt.c:257 +#: src/msgmerge.c:254 src/msgunfmt.c:175 src/xgettext.c:394 +#, c-format, no-wrap +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Copyright � %s Free Software Foundation, Inc.\n" +"Ce progiciel est libre. Consulter les sources pour plus de d�tail sur\n" +"les permissions de copie. Il est distribu� SANS AUCUNE GARANTIE\n" +"de QUALIT� LOYALE ET MARCHANDE ou d'AD�QUATION POUR UN BUT PARTICULIER.\n" + +#: src/gettextp.c:139 src/msgcmp.c:149 src/msgcomm.c:290 src/msgfmt.c:262 +#: src/msgmerge.c:259 src/msgunfmt.c:180 src/xgettext.c:399 +#, c-format +msgid "Written by %s.\n" +msgstr "�crit par %s.\n" + +#: src/gettextp.c:154 +msgid "missing arguments" +msgstr "arguments manquants" + +#: src/gettextp.c:164 +msgid "too many arguments" +msgstr "trop d'arguments" + +#: src/gettextp.c:228 src/msgcmp.c:181 src/msgcomm.c:395 src/msgfmt.c:361 +#: src/msgmerge.c:301 src/msgunfmt.c:210 src/xgettext.c:532 +#, c-format +msgid "Try `%s --help' for more information.\n" +msgstr "Pour plus d'information, essayer � %s --help �.\n" + +#: src/gettextp.c:233 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n" +" -e enable expansion of some escape sequences\n" +" -E (ignored for compatibility)\n" +" -h, --help display this help and exit\n" +" -n suppress trailing newline\n" +" -V, --version display version information and exit\n" +" [TEXTDOMAIN] MSGID retrieve translated message corresponding\n" +" to MSGID from TEXTDOMAIN\n" +msgstr "" +"Usage: %s [OPTION] [[[DOMAINE] MSGID] | [ -s [MSGID]...]]\n" +" -d, --domain=DOMAINE trouver la traduction de MSGID, dans le DOMAINE donn�\n" +" -e reconna�tre et remplacer les s�quences d'�chappement\n" +" -E (ignor�, gard� pour des questions de compatibilit�)\n" +" -h, --help fournir ce message d'aide, puis terminer\n" +" -n inhiber la production d'une fin de ligne\n" +" -V, --version identifier le programme, puis terminer\n" +" [DOMAINE] MSGID trouver la traduction de MSGID, dans le DOMAINE donn�\n" + +#: src/gettextp.c:245 +#, c-format, no-wrap +msgid "" +"\n" +"If the TEXTDOMAIN parameter is not given, the domain is determined from the\n" +"environment variable TEXTDOMAIN. If the message catalog is not found in the\n" +"regular directory, another location can be specified with the environment\n" +"variable TEXTDOMAINDIR.\n" +"When used with the -s option the program behaves like the `echo' command.\n" +"But it does not simply copy its arguments to stdout. Instead those messages\n" +"found in the selected catalog are translated.\n" +"Standard search directory: %s\n" +msgstr "" +"\n" +"Si DOMAINE n'est pas founi, le domaine est obtenu de la variable TEXTDOMAIN\n" +"dans l'environnement. En l'absence du catalogue de messages � l'endroit\n" +"habituel, la variable d'environnement TEXTDOMAINDIR peut indiquer un autre\n" +"r�pertoire.\n" +"Avec l'option � -s �, ce programme se comporte comme la commande � echo �; mais\n" +"plut�t que de copier simplement ses arguments sur � stdout �, ceux qui sont\n" +"disponibles dans le catalogue choisi sont traduits.\n" +"\n" +"Ensemble des r�pertoires fouill�s: %s\n" + +#: src/gettextp.c:255 src/msgcmp.c:200 src/msgcomm.c:442 src/msgfmt.c:388 +#: src/msgmerge.c:334 src/msgunfmt.c:234 src/xgettext.c:584 +#, fuzzy +msgid "Report bugs to <[email protected]>.\n" +msgstr "" +"Rapportez tout probl�me fonctionnel � <[email protected]>.\n" +"Les erreurs de traduction doivent �tre dirig�es vers <[email protected]>.\n" + +#: src/message.c:784 +#, c-format +msgid "" +"internationalized messages should not contain the `\\%c' escape sequence" +msgstr "" +"un message � traduire ne doit pas contenir la s�quence d'�chappement `\\%c'" + +#: src/message.c:1115 +#, c-format +msgid "cannot create output file \"%s\"" +msgstr "incapable de fabriquer le fichier � %s �" + +#: src/message.c:1122 +#, no-c-format +msgid "standard output" +msgstr "sortie standard" + +#: src/message.c:1182 +#, c-format +msgid "error while writing \"%s\" file" +msgstr "erreur pendant l'�criture du fichier � %s �" + +#: src/msgcmp.c:160 src/msgmerge.c:270 +msgid "no input files given" +msgstr "aucun fichier en entr�e" + +#: src/msgcmp.c:165 src/msgmerge.c:275 +msgid "exactly 2 input files required" +msgstr "exactement deux fichiers sont requis en entr�e" + +#: src/msgcmp.c:186 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -h, --help display this help and exit\n" +" -V, --version output version information and exit\n" +"\n" +"Compare two Uniforum style .po files to check that both contain the same\n" +"set of msgid strings. The def.po file is an existing PO file with the\n" +"old translations. The ref.po file is the last created PO file\n" +"(generally by xgettext). This is useful for checking that you have\n" +"translated each and every message in your program. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better diagnostics.\n" +msgstr "" +"Usage: %s [OPTION] ANCIEN.po NOUVEAU.po\n" +"Les arguments obligatoires pour la forme longue des options sont aussi\n" +"obligatoires pour les formes courtes qui leur correspondent.\n" +"\n" +" -D, --directory=R�PERT fouiller R�PERT aussi pour trouver les fichiers\n" +" -h, --help fournir ce message d'aide, puis terminer\n" +" -V, --version identifier le programme, puis terminer\n" +"\n" +"Comparer deux fichiers .po style Uniforum, v�rifier qu'ils contiennent\n" +"le m�me ensemble de cha�nes � msgid �. ANCIEN.po fournit les vieilles\n" +"traductions. NOUVEAU.po a �t� PO r�cemment cr�� (souvent par xgettext).\n" +"Cela vous permet de v�rifier que vous avez traduit chacun des messages\n" +"de votre programme. Lorsqu'un appariement exact n'est pas possible,\n" +"un appariement flou est utilis� pour un meilleur diagnostic.\n" + +#: src/msgcmp.c:259 src/msgmerge.c:714 +msgid "this message is used but not defined..." +msgstr "ce message, utilis�, n'est pas d�fini..." + +#: src/msgcmp.c:261 src/msgmerge.c:716 +msgid "...but this definition is similar" +msgstr "...mais cette d�finition lui est semblable" + +#: src/msgcmp.c:267 src/msgmerge.c:743 +#, c-format +msgid "this message is used but not defined in %s" +msgstr "ce message, utilis�, n'est pas d�fini dans � %s �" + +#: src/msgcmp.c:281 +msgid "warning: this message is not used" +msgstr "attention: ce message n'est pas utilis�" + +#: src/msgcmp.c:355 src/msgfmt.c:632 src/msgmerge.c:493 src/xgettext.c:1063 +msgid "duplicate message definition" +msgstr "message doublement d�fini" + +#: src/msgcmp.c:356 src/msgfmt.c:633 src/msgmerge.c:494 src/xgettext.c:1064 +msgid "...this is the location of the first definition" +msgstr "...voici l'endroit de la premi�re d�finition" + +#: src/msgcmp.c:396 src/msgmerge.c:542 +#, c-format +msgid "this message has no definition in the \"%s\" domain" +msgstr "ce message n'a pas de d�finition dans le domaine � %s �" + +#. We are about to construct the absolute path to the +#. directory for the output files but asprintf failed. +#: src/msgcomm.c:238 src/xgettext.c:340 src/xgettext.c:1258 +msgid "while preparing output" +msgstr "lors de la pr�paration de la sortie" + +#: src/msgcomm.c:273 src/msgcomm.c:277 src/xgettext.c:378 src/xgettext.c:382 +#, c-format +msgid "%s and %s are mutually exclusive" +msgstr "%s et %s s'excluent mutuellement" + +#: src/msgcomm.c:341 +msgid "at least two files must be specified" +msgstr "" + +#: src/msgcomm.c:360 +#, c-format +msgid "impossible selection criteria specified (%d < n < %d)" +msgstr "" + +#: src/msgcomm.c:400 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" -F, --sort-by-file sort output by file location\n" +" -h, --help display this help and exit\n" +msgstr "" +"Usage: %s [OPTION] FICHIER ...\n" +"Les arguments obligatoires pour la forme longue des options sont aussi\n" +"obligatoires pour les formes courtes qui leur correspondent.\n" +"\n" +" -a, --extract-all extraire toutes les cha�nes\n" +" -c, --add-comments[=CL�] sauver le commentaire pr�c�dent poss�dant CL�,\n" +" ou celui qui pr�c�de imm�diatement le mot-clef\n" +" -C, --c++ voir � --language=C++ �\n" +" --debug d�tailler l'analyse des cha�nes de format\n" +" -d, --default-domain=DOMAINE sortir sur DOMAINE.po (non pas messages.po)\n" +" -D, --directory=R�PERT fouiller R�PERT aussi pour trouver les fichiers\n" +" -e, --no-escape pas d'�chappements C en sortie (implicite)\n" +" -E, --escape �chappements C en sortie, �viter les 8-bits\n" +" -f, --files-from=FICHIER lire la liste des fichiers d'entr�e de FICHIER\n" +" --force-po produire un fichier PO, m�me vide\n" +" --foreign-user inhiber la production d'un copyright FSF\n" +" -F, --sort-by-file trier selon la position dans chaque fichier\n" + +#: src/msgcomm.c:412 +#, fuzzy +msgid "" +" -i, --indent write the .po file using indented style\n" +" --no-location do not write '#: filename:line' lines\n" +" -n, --add-location generate '#: filename:line' lines " +"(default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory " +"DIR\n" +" -s, --sort-output generate sorted output and remove " +"duplicates\n" +" --strict write out strict Uniforum conforming .po " +"file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -u, --unique shorthand for --less-than=2, requests\n" +" that only unique messages be printed\n" +msgstr "" +" -n, --add-location produire les � #: FICHIER:LIGNE � " +"(implicite)\n" +" --omit-header omettre les en-t�tes pour � msgid \"\" �\n" +" -o, --output=FICHIER produire la sortie sur le FICHIER indiqu�\n" +" -p, --output-dir=R�PERTOIRE sortir le fichier produit dans tel " +"R�PERTOIRE\n" +" -s, --sort-output trier la sortie et �liminer les duplicats\n" +" --strict produire un fichier PO strictement " +"Uniforum\n" +" -T, --trigraphs reconna�tre les trigraphes ANSI C en " +"entr�e\n" +" -V, --version identifier le programme, puis terminer\n" +" -w, --width=COLONNES limiter le nombre de COLONNES en sortie\n" +" -x, --exclude-file=FICHIER ne pas extraire d'entr�es de FICHIER\n" +"\n" +"Si le FICHIER est � - �, lit l'entr�e standard.\n" + +#: src/msgcomm.c:425 +msgid "" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -<, --less-than=NUMBER print messages with less than this many\n" +" definitions, defaults to infinite if not\n" +" set\n" +" ->, --more-than=NUMBER print messages with more than this many\n" +" definitions, defaults to 1 if not set\n" +"\n" +"Find messages which are common to two or more of the specified PO files.\n" +"By using the --more-than option, greater commonality may be requested\n" +"before messages are printed. Conversely, the --less-than option may be\n" +"used to specify less commonality before messages are printed (i.e.\n" +"--less-than=2 will only print the unique messages). Translations,\n" +"comments and extract comments will be preserved, but only from the first\n" +"PO file to define them. File positions from all PO files will be\n" +"preserved.\n" +msgstr "" + +#: src/msgcomm.c:476 src/msgunfmt.c:357 src/po-lex.c:74 src/xget-lex.c:159 +#: src/xget-lex.c:174 src/xget-lex.c:191 src/xgettext.c:618 +#, c-format +msgid "error while opening \"%s\" for reading" +msgstr "erreur lors de l'ouverture de � %s � en lecture" + +#: src/msgcomm.c:557 src/xgettext.c:660 src/xgettext.c:970 +msgid "this file may not contain domain directives" +msgstr "ce fichier ne peut contenir des directives de domaine" + +#: src/msgfmt.c:273 src/xgettext.c:410 +msgid "no input file given" +msgstr "aucun fichier d'entr�e fourni" + +#: src/msgfmt.c:321 +#, c-format +msgid "error while opening \"%s\" for writing" +msgstr "erreur lors de l'ouverture de � %s � en �criture" + +#: src/msgfmt.c:343 +#, c-format +msgid "%d translated messages" +msgstr "%d messages traduits" + +#: src/msgfmt.c:345 +#, c-format +msgid ", %d fuzzy translations" +msgstr ", %d traductions approxim�es" + +#: src/msgfmt.c:347 +#, c-format +msgid ", %d untranslated messages" +msgstr ", %d messages non-traduits" + +#: src/msgfmt.c:366 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] filename.po ...\n" +"Generate binary message catalog from textual translation description.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n" +" -c, --check perform language dependent checks on strings\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -f, --use-fuzzy use fuzzy entries in output\n" +" -h, --help display this help and exit\n" +" --no-hash binary file will not include the hash table\n" +" -o, --output-file=FILE specify output file name as FILE\n" +" --statistics print statistics about translations\n" +" --strict enable strict Uniforum mode\n" +" -v, --verbose list input file anomalies\n" +" -V, --version output version information and exit\n" +"\n" +"Giving the -v option more than once increases the verbosity level.\n" +"\n" +"If input file is -, standard input is read. If output file is -,\n" +"output is written to standard output.\n" +msgstr "" +"Usage: %s [OPTION] FICHIER.po ...\n" +"Les arguments obligatoires pour la forme longue des options sont aussi\n" +"obligatoires pour les formes courtes qui leur correspondent.\n" +"\n" +" -a, --alignment=OCTETS aligner cha�nes sur tant d'OCTETS (%d pr�sum�)\n" +" -c, --check v�rifier ce qui d�pend du langage de programmation\n" +" -D, --directory=R�PERT fouiller R�PERT aussi pour trouver les fichiers\n" +" -f, --use-fuzzy aussi transmettre les traductions approxim�es\n" +" -h, --help fournir ce message d'aide, puis terminer\n" +" --no-hash exclure la table de dispersion du binaire produit\n" +" -o, --output-file=SORTIE choisir le fichier de sortie\n" +" --statistics donner quelques statistiques sur les traductions\n" +" --strict se conformer � Uniforum strictement\n" +" -v, --verbose diagnostiquer toute anomalie dans chaque FICHIER\n" +" -V, --version identifier le programme, puis terminer\n" +"\n" +"Si FICHIER vaut � - �, lit l'entr�e standard. Si SORTIE vaut � - �,\n" +"�crit sur la sortie standard.\n" + +#: src/msgfmt.c:409 +msgid "while creating hash table" +msgstr "pendant la cr�ation de la table de dispersion" + +#: src/msgfmt.c:451 +#, c-format +msgid "%s: warning: no header entry found" +msgstr "%s: attention: l'en-t�te n'a pas �t� trouv�" + +#: src/msgfmt.c:473 +#, c-format +msgid "domain name \"%s\" not suitable as file name" +msgstr "� %s � n'est pas appropri� comme nom de domaine" + +#: src/msgfmt.c:478 +#, c-format +msgid "domain name \"%s\" not suitable as file name: will use prefix" +msgstr "domaine � %s � inad�quat comme nom de fichier: utilisera un pr�fixe" + +#. We don't change the exit status here because this is really +#. only an information. +#: src/msgfmt.c:491 +#, c-format +msgid "`domain %s' directive ignored" +msgstr "la directive � domain %s � sera ignor�e" + +#: src/msgfmt.c:519 +msgid "empty `msgstr' entry ignored" +msgstr "cha�ne � msgstr � vide, entr�e ignor�e" + +#: src/msgfmt.c:520 +msgid "fuzzy `msgstr' entry ignored" +msgstr "cha�ne � msgstr � approxim�e, entr�e ignor�e" + +#: src/msgfmt.c:563 +#, c-format +msgid "headerfield `%s' missing in header" +msgstr "Le champ � %s � est absent de l'en-t�te" + +#: src/msgfmt.c:566 +#, c-format +msgid "header field `%s' should start at beginning of line" +msgstr "Le champ � %s � devrait s'appuyer au d�but de la ligne" + +#: src/msgfmt.c:576 +msgid "some header fields still have the initial default value" +msgstr "Quelques champs de l'en-t�te ont toujours leur valeur initiale" + +#: src/msgfmt.c:587 +#, c-format +msgid "field `%s' still has initial default value" +msgstr "Le champ � %s � a toujours sa valeur initiale" + +#: src/msgfmt.c:672 +#, c-format +msgid "%s: warning: source file contains fuzzy translation" +msgstr "%s: attention: certaines traductions sont approximatives" + +#: src/msgfmt.c:874 +msgid "`msgid' and `msgstr' entries do not both begin with '\\n'" +msgstr "" +"l'une des cha�nes � msgid � ou � msgstr � d�bute par � \\n �, l'autre pas" + +#: src/msgfmt.c:882 +msgid "`msgid' and `msgstr' entries do not both end with '\\n'" +msgstr "" +"l'une des cha�nes � msgid � ou � msgstr � se termine par � \\n �, l'autre pas" + +#: src/msgfmt.c:896 +msgid "number of format specifications in `msgid' and `msgstr' does not match" +msgstr "" +"nombre diff�rent de sp�cifications de format entre � msgid � et � msgstr �" + +#: src/msgfmt.c:913 +#, c-format +msgid "format specifications for argument %u are not the same" +msgstr "les sp�cifications de format pour l'argument %u ne sont pas identiques" + +#: src/msgmerge.c:306 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent indented output style\n" +" -o, --output-file=FILE result will be written to FILE\n" +" --no-location suppress '#: filename:line' lines\n" +" --add-location preserve '#: filename:line' lines (default)\n" +" --strict strict Uniforum output style\n" +" -v, --verbose increase verbosity level\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Usage: %s [OPTION] DEF.po REF.po\n" +"Les arguments obligatoires pour la forme longue des options sont aussi\n" +"obligatoires pour les formes courtes qui leur correspondent.\n" +"\n" +" -D, --directory=R�PERT fouiller R�PERT aussi pour trouver les fichiers\n" +" -e, --no-escape �viter les �chappement C en sortie (implicite)\n" +" -E, --escape �chappements C en sortie, �viter les 8-bits\n" +" --force-po produire un fichier PO, m�me vide\n" +" -h, --help fournir ce message d'aide, puis terminer\n" +" -i, --indent sortie en style indent�\n" +" -o, --output-file=FICHIER produire les r�sultats sur FICHIER\n" +" --no-location ne pas produire les � #: FICHIER:LIGNE �\n" +" --add-location produire les � #: FICHIER:LIGNE � (implicite)\n" +" --strict produire un fichier PO strictement Uniforum\n" +" -v, --verbose augmenter le niveau de bavardise\n" +" -V, --version identifier le programme, puis terminer\n" +" -w, --width=COLONNES limiter le nombre de COLONNES en sortie\n" + +#: src/msgmerge.c:324 +#, no-wrap +msgid "" +"\n" +"Merges two Uniforum style .po files together. The def.po file is an\n" +"existing PO file with the old translations which will be taken over to\n" +"the newly created file as long as they still match; comments will be\n" +"preserved, but extract comments and file positions will be discarded.\n" +"The ref.po file is the last created PO file (generally by xgettext), any\n" +"translations or comments in the file will be discarded, however dot\n" +"comments and file positions will be preserved. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better results. The\n" +"results are written to stdout unless an output file is specified.\n" +msgstr "" +"\n" +"Fusionne deux fichiers PO ensemble. Le fichier DEF.po contient les\n" +"anciennes traductions, qui sont transport�es au fichier nouvellement\n" +"cr�� dans la mesure o� les cha�nes � traduire se correspondent; les\n" +"commentaires sont pr�serv�s, mais les commentaires automatiquement\n" +"extraits et les positions dans le fichiers sont �limin�s. Le fichier\n" +"REF.po a �t� r�cemment cr�e (souvent par xgettext), toute traduction\n" +"ou commentaire en sera �limin�, toutefois les commentaires � . � et\n" +"les positions de fichier sont conserv�s. Lorsqu'un appariement\n" +"exact n'est pas possible, un appariement flou permet de produire de\n" +"meilleurs r�sultats. Ceux-ci sont produits sur la sortie standard,\n" +"� moins qu'un fichier de sortie soit explicitement sp�cifi�.\n" + +#: src/msgmerge.c:772 +#, c-format +msgid "" +"%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete " +"%d.\n" +msgstr "" +"%s%d et %d lus, %d fusionn�s, %d approxim�s, %d manquants, %d p�rim�s.\n" + +#: src/msgmerge.c:778 +msgid " done.\n" +msgstr " termin�.\n" + +#: src/msgunfmt.c:215 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [FILE]...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent write indented output style\n" +" -o, --output-file=FILE write output into FILE instead of standard output\n" +" --strict write strict uniforum style\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Usage: %s [OPTION] [FICHIER]...\n" +"Les arguments obligatoires pour la forme longue des options sont aussi\n" +"obligatoires pour les formes courtes qui leur correspondent.\n" +"\n" +" -e, --no-escape �viter les �chappement C en sortie (implicite)\n" +" -E, --escape �chappements C en sorite, �viter les 8-bits\n" +" --force-po produire un fichier PO, m�me vide\n" +" -h, --help fournir ce message d'aide, puis terminer\n" +" -i, --indent sortie en style indent�\n" +" -o, --output-file=FICHIER �crire sur FICHIER plut�t que sur sortie standard\n" +" --strict produire un fichier .po strictement Uniforum\n" +" -V, --version identifier le programme, puis terminer\n" +" -w, --width=COLONNES limiter le nombre de COLONNES en sortie\n" + +#: src/msgunfmt.c:229 +#, no-wrap +msgid "" +"\n" +"Convert binary .mo files to Uniforum style .po files.\n" +"Both little-endian and big-endian .mo files are handled.\n" +"If no input file is given or it is -, standard input is read.\n" +"By default the output is written to standard output.\n" +msgstr "" +"\n" +"Convertir un fichier .mo, binaire, en fichier .po � la mani�re\n" +"d'Uniforum. Les fichiers grand-boutiens et petit-boutiens sont tous\n" +"deux trait�s. Si le fichier d'entr�e vaut � - �, lit l'entr�e standard.\n" +"Sans fichier d'entr�e ou lorsque � - �, lit l'entr�e standard. Sauf\n" +"indication contraire, les r�sultats sont produits sur la sortie standard.\n" + +#: src/msgunfmt.c:266 src/msgunfmt.c:330 src/po-lex.c:185 src/xget-lex.c:254 +#, c-format +msgid "error while reading \"%s\"" +msgstr "erreur lors de la lecture de � %s �" + +#: src/msgunfmt.c:267 src/msgunfmt.c:331 +#, c-format +msgid "file \"%s\" truncated" +msgstr "le fichier � %s � est tronqu�" + +#: src/msgunfmt.c:298 +#, c-format +msgid "seek \"%s\" offset %ld failed" +msgstr "le repositionnement de � %s � � l'endroit %ld a �chou�" + +#: src/msgunfmt.c:373 +#, c-format +msgid "file \"%s\" is not in GNU .mo format" +msgstr "le fichier � %s � n'est pas en format .mo pour GNU" + +#: ../../src/po-gram.y:83 +msgid "missing `msgstr' section" +msgstr "section � msgstr � absente" + +#: src/po-lex.c:84 +#, c-format +msgid "found %d fatal errors" +msgstr "%d erreurs terminales" + +#: src/po-lex.c:129 src/po-lex.c:168 +msgid "too many errors, aborting" +msgstr "trop d'erreurs, j'abandonne" + +#: src/po-lex.c:241 +#, c-format +msgid "keyword \"%s\" unknown" +msgstr "mot-cl� � %s � inconnu" + +#: src/po-lex.c:332 +msgid "illegal control sequence" +msgstr "s�quence d'�chappement ill�gale" + +#: src/po-lex.c:415 +msgid "end-of-line within string" +msgstr "fin de ligne intempestive" + +#: src/po-lex.c:420 +msgid "end-of-file within string" +msgstr "fin de fichier intempestive" + +#: src/xget-lex.c:150 +msgid "standard input" +msgstr "entr�e standard" + +#: src/xget-lex.c:892 +#, c-format +msgid "%s:%d: warning: unterminated character constant" +msgstr "%s:%d: attention: constante caract�re sans terminateur" + +#: src/xget-lex.c:914 +#, c-format +msgid "%s:%d: warning: unterminated string literal" +msgstr "%s:%d: attention: constante cha�ne sans terminateur" + +#: src/xgettext.c:386 +msgid "--join-existing cannot be used when output is written to stdout" +msgstr "--join-existing interdit si production sur sortie standard" + +#: src/xgettext.c:501 +#, c-format +msgid "warning: file `%s' extension `%s' is unknown; will try C" +msgstr "" +"attention: � %s � sans classification pour � %s �, le langage C sera pr�sum�" + +#: src/xgettext.c:537 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Extract translatable string from given input files.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --extract-all extract all strings\n" +" -c, --add-comments[=TAG] place comment block with TAG (or those\n" +" preceding keyword lines) in output file\n" +" -C, --c++ shorthand for --language=C++\n" +" --debug more detailed formatstring recognision result\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" --foreign-user omit FSF copyright in output for foreign user\n" +" -F, --sort-by-file sort output by file location\n" +msgstr "" +"Usage: %s [OPTION] FICHIER ...\n" +"Les arguments obligatoires pour la forme longue des options sont aussi\n" +"obligatoires pour les formes courtes qui leur correspondent.\n" +"\n" +" -a, --extract-all extraire toutes les cha�nes\n" +" -c, --add-comments[=CL�] sauver le commentaire pr�c�dent poss�dant CL�,\n" +" ou celui qui pr�c�de imm�diatement le mot-clef\n" +" -C, --c++ voir � --language=C++ �\n" +" --debug d�tailler l'analyse des cha�nes de format\n" +" -d, --default-domain=DOMAINE sortir sur DOMAINE.po (non pas messages.po)\n" +" -D, --directory=R�PERT fouiller R�PERT aussi pour trouver les fichiers\n" +" -e, --no-escape pas d'�chappements C en sortie (implicite)\n" +" -E, --escape �chappements C en sortie, �viter les 8-bits\n" +" -f, --files-from=FICHIER lire la liste des fichiers d'entr�e de FICHIER\n" +" --force-po produire un fichier PO, m�me vide\n" +" --foreign-user inhiber la production d'un copyright FSF\n" +" -F, --sort-by-file trier selon la position dans chaque fichier\n" + +#: src/xgettext.c:557 +#, c-format, no-wrap +msgid "" +" -h, --help display this help and exit\n" +" -i, --indent write the .po file using indented style\n" +" -j, --join-existing join messages with existing file\n" +" -k, --keyword[=WORD] additonal keyword to be looked for (without\n" +" WORD means not to use default keywords)\n" +" -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n" +" -L, --language=NAME recognise the specified language (C, C++, PO),\n" +" otherwise is guessed from file extension\n" +" -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n" +" -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n" +" --no-location do not write '#: filename:line' lines\n" +msgstr "" +" -h, --help fournir ce message d'aide, puis terminer\n" +" -i, --indent produire le fichier .po dans un style indent�\n" +" -j, --join-existing ajouter les messages au fichier existant\n" +" -k, --keyword[=MOT] mot-clef suppl�mentaire, d�fauts si MOT absent\n" +" -l, --string-limit=LONGUEUR indiquer si LONGUEUR (%u) octets d�pass�s\n" +" -L, --language=NOM analyser le langage indiqu� (C, C++, PO),\n" +" sinon, le deviner de l'extension du fichier\n" +" -m, --msgstr-prefix[=CHA�NE] pr�fixer les msgstr's par CHA�NE, sinon \\\"\\\"\n" +" -M, --msgstr-suffix[=CHA�NE] suffixer les msgstr's par CHA�NE, sinon \\\"\\\"\n" +" --no-location ne pas produire les � #: FICHIER:LIGNE �\n" + +#: src/xgettext.c:571 +#, no-wrap +msgid "" +" -n, --add-location generate '#: filename:line' lines (default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory DIR\n" +" -s, --sort-output generate sorted output and remove duplicates\n" +" --strict write out strict Uniforum conforming .po file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -x, --exclude-file=FILE entries from FILE are not extracted\n" +"\n" +"If INPUTFILE is -, standard input is read.\n" +msgstr "" +" -n, --add-location produire les � #: FICHIER:LIGNE � (implicite)\n" +" --omit-header omettre les en-t�tes pour � msgid \"\" �\n" +" -o, --output=FICHIER produire la sortie sur le FICHIER indiqu�\n" +" -p, --output-dir=R�PERTOIRE sortir le fichier produit dans tel R�PERTOIRE\n" +" -s, --sort-output trier la sortie et �liminer les duplicats\n" +" --strict produire un fichier PO strictement Uniforum\n" +" -T, --trigraphs reconna�tre les trigraphes ANSI C en entr�e\n" +" -V, --version identifier le programme, puis terminer\n" +" -w, --width=COLONNES limiter le nombre de COLONNES en sortie\n" +" -x, --exclude-file=FICHIER ne pas extraire d'entr�es de FICHIER\n" +"\n" +"Si le FICHIER est � - �, lit l'entr�e standard.\n" + +#: src/xgettext.c:1344 +#, c-format +msgid "language `%s' unknown" +msgstr "langage � %s � inconnu" + +#~ msgid "Report bugs to <[email protected]>.\n" +#~ msgstr "" +#~ "Rapportez tout probl�me fonctionnel � <[email protected]>.\n" +#~ "Les erreurs de traduction doivent �tre dirig�es vers <[email protected]>.\n" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/gettext.pot b/debian/gettext-kde/gettext-kde-0.10.35/po/gettext.pot new file mode 100644 index 00000000..5a09d093 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/gettext.pot @@ -0,0 +1,633 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 1998-04-30 22:50-0700\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: ENCODING\n" + +#: lib/error.c:103 +msgid "Unknown system error" +msgstr "" + +#: lib/getopt.c:680 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "" + +#: lib/getopt.c:704 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "" + +#: lib/getopt.c:709 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "" + +#: lib/getopt.c:726 lib/getopt.c:899 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "" + +#. --option +#: lib/getopt.c:755 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "" + +#. +option or -option +#: lib/getopt.c:759 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:785 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "" + +#: lib/getopt.c:788 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:818 lib/getopt.c:948 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "" + +#: lib/getopt.c:865 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "" + +#: lib/getopt.c:883 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "" + +#: lib/xmalloc.c:82 +msgid "Memory exhausted" +msgstr "" + +#: src/gettextp.c:134 src/msgcmp.c:144 src/msgcomm.c:285 src/msgfmt.c:257 +#: src/msgmerge.c:254 src/msgunfmt.c:175 src/xgettext.c:394 +#, c-format, no-wrap +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" + +#: src/gettextp.c:139 src/msgcmp.c:149 src/msgcomm.c:290 src/msgfmt.c:262 +#: src/msgmerge.c:259 src/msgunfmt.c:180 src/xgettext.c:399 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#: src/gettextp.c:154 +msgid "missing arguments" +msgstr "" + +#: src/gettextp.c:164 +msgid "too many arguments" +msgstr "" + +#: src/gettextp.c:228 src/msgcmp.c:181 src/msgcomm.c:395 src/msgfmt.c:361 +#: src/msgmerge.c:301 src/msgunfmt.c:210 src/xgettext.c:532 +#, c-format +msgid "Try `%s --help' for more information.\n" +msgstr "" + +#: src/gettextp.c:233 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n" +" -e enable expansion of some escape sequences\n" +" -E (ignored for compatibility)\n" +" -h, --help display this help and exit\n" +" -n suppress trailing newline\n" +" -V, --version display version information and exit\n" +" [TEXTDOMAIN] MSGID retrieve translated message corresponding\n" +" to MSGID from TEXTDOMAIN\n" +msgstr "" + +#: src/gettextp.c:245 +#, c-format, no-wrap +msgid "" +"\n" +"If the TEXTDOMAIN parameter is not given, the domain is determined from the\n" +"environment variable TEXTDOMAIN. If the message catalog is not found in the\n" +"regular directory, another location can be specified with the environment\n" +"variable TEXTDOMAINDIR.\n" +"When used with the -s option the program behaves like the `echo' command.\n" +"But it does not simply copy its arguments to stdout. Instead those messages\n" +"found in the selected catalog are translated.\n" +"Standard search directory: %s\n" +msgstr "" + +#: src/gettextp.c:255 src/msgcmp.c:200 src/msgcomm.c:442 src/msgfmt.c:388 +#: src/msgmerge.c:334 src/msgunfmt.c:234 src/xgettext.c:584 +msgid "Report bugs to <[email protected]>.\n" +msgstr "" + +#: src/message.c:784 +#, c-format +msgid "" +"internationalized messages should not contain the `\\%c' escape sequence" +msgstr "" + +#: src/message.c:1115 +#, c-format +msgid "cannot create output file \"%s\"" +msgstr "" + +#: src/message.c:1122 +#, no-c-format +msgid "standard output" +msgstr "" + +#: src/message.c:1182 +#, c-format +msgid "error while writing \"%s\" file" +msgstr "" + +#: src/msgcmp.c:160 src/msgmerge.c:270 +msgid "no input files given" +msgstr "" + +#: src/msgcmp.c:165 src/msgmerge.c:275 +msgid "exactly 2 input files required" +msgstr "" + +#: src/msgcmp.c:186 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -h, --help display this help and exit\n" +" -V, --version output version information and exit\n" +"\n" +"Compare two Uniforum style .po files to check that both contain the same\n" +"set of msgid strings. The def.po file is an existing PO file with the\n" +"old translations. The ref.po file is the last created PO file\n" +"(generally by xgettext). This is useful for checking that you have\n" +"translated each and every message in your program. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better diagnostics.\n" +msgstr "" + +#: src/msgcmp.c:259 src/msgmerge.c:714 +msgid "this message is used but not defined..." +msgstr "" + +#: src/msgcmp.c:261 src/msgmerge.c:716 +msgid "...but this definition is similar" +msgstr "" + +#: src/msgcmp.c:267 src/msgmerge.c:743 +#, c-format +msgid "this message is used but not defined in %s" +msgstr "" + +#: src/msgcmp.c:281 +msgid "warning: this message is not used" +msgstr "" + +#: src/msgcmp.c:355 src/msgfmt.c:632 src/msgmerge.c:493 src/xgettext.c:1063 +msgid "duplicate message definition" +msgstr "" + +#: src/msgcmp.c:356 src/msgfmt.c:633 src/msgmerge.c:494 src/xgettext.c:1064 +msgid "...this is the location of the first definition" +msgstr "" + +#: src/msgcmp.c:396 src/msgmerge.c:542 +#, c-format +msgid "this message has no definition in the \"%s\" domain" +msgstr "" + +#. We are about to construct the absolute path to the +#. directory for the output files but asprintf failed. +#: src/msgcomm.c:238 src/xgettext.c:340 src/xgettext.c:1258 +msgid "while preparing output" +msgstr "" + +#: src/msgcomm.c:273 src/msgcomm.c:277 src/xgettext.c:378 src/xgettext.c:382 +#, c-format +msgid "%s and %s are mutually exclusive" +msgstr "" + +#: src/msgcomm.c:341 +msgid "at least two files must be specified" +msgstr "" + +#: src/msgcomm.c:360 +#, c-format +msgid "impossible selection criteria specified (%d < n < %d)" +msgstr "" + +#: src/msgcomm.c:400 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" -F, --sort-by-file sort output by file location\n" +" -h, --help display this help and exit\n" +msgstr "" + +#: src/msgcomm.c:412 +msgid "" +" -i, --indent write the .po file using indented style\n" +" --no-location do not write '#: filename:line' lines\n" +" -n, --add-location generate '#: filename:line' lines " +"(default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory " +"DIR\n" +" -s, --sort-output generate sorted output and remove " +"duplicates\n" +" --strict write out strict Uniforum conforming .po " +"file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -u, --unique shorthand for --less-than=2, requests\n" +" that only unique messages be printed\n" +msgstr "" + +#: src/msgcomm.c:425 +msgid "" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -<, --less-than=NUMBER print messages with less than this many\n" +" definitions, defaults to infinite if not\n" +" set\n" +" ->, --more-than=NUMBER print messages with more than this many\n" +" definitions, defaults to 1 if not set\n" +"\n" +"Find messages which are common to two or more of the specified PO files.\n" +"By using the --more-than option, greater commonality may be requested\n" +"before messages are printed. Conversely, the --less-than option may be\n" +"used to specify less commonality before messages are printed (i.e.\n" +"--less-than=2 will only print the unique messages). Translations,\n" +"comments and extract comments will be preserved, but only from the first\n" +"PO file to define them. File positions from all PO files will be\n" +"preserved.\n" +msgstr "" + +#: src/msgcomm.c:476 src/msgunfmt.c:357 src/po-lex.c:74 src/xget-lex.c:159 +#: src/xget-lex.c:174 src/xget-lex.c:191 src/xgettext.c:618 +#, c-format +msgid "error while opening \"%s\" for reading" +msgstr "" + +#: src/msgcomm.c:557 src/xgettext.c:660 src/xgettext.c:970 +msgid "this file may not contain domain directives" +msgstr "" + +#: src/msgfmt.c:273 src/xgettext.c:410 +msgid "no input file given" +msgstr "" + +#: src/msgfmt.c:321 +#, c-format +msgid "error while opening \"%s\" for writing" +msgstr "" + +#: src/msgfmt.c:343 +#, c-format +msgid "%d translated messages" +msgstr "" + +#: src/msgfmt.c:345 +#, c-format +msgid ", %d fuzzy translations" +msgstr "" + +#: src/msgfmt.c:347 +#, c-format +msgid ", %d untranslated messages" +msgstr "" + +#: src/msgfmt.c:366 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] filename.po ...\n" +"Generate binary message catalog from textual translation description.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n" +" -c, --check perform language dependent checks on strings\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -f, --use-fuzzy use fuzzy entries in output\n" +" -h, --help display this help and exit\n" +" --no-hash binary file will not include the hash table\n" +" -o, --output-file=FILE specify output file name as FILE\n" +" --statistics print statistics about translations\n" +" --strict enable strict Uniforum mode\n" +" -v, --verbose list input file anomalies\n" +" -V, --version output version information and exit\n" +"\n" +"Giving the -v option more than once increases the verbosity level.\n" +"\n" +"If input file is -, standard input is read. If output file is -,\n" +"output is written to standard output.\n" +msgstr "" + +#: src/msgfmt.c:409 +msgid "while creating hash table" +msgstr "" + +#: src/msgfmt.c:451 +#, c-format +msgid "%s: warning: no header entry found" +msgstr "" + +#: src/msgfmt.c:473 +#, c-format +msgid "domain name \"%s\" not suitable as file name" +msgstr "" + +#: src/msgfmt.c:478 +#, c-format +msgid "domain name \"%s\" not suitable as file name: will use prefix" +msgstr "" + +#. We don't change the exit status here because this is really +#. only an information. +#: src/msgfmt.c:491 +#, c-format +msgid "`domain %s' directive ignored" +msgstr "" + +#: src/msgfmt.c:519 +msgid "empty `msgstr' entry ignored" +msgstr "" + +#: src/msgfmt.c:520 +msgid "fuzzy `msgstr' entry ignored" +msgstr "" + +#: src/msgfmt.c:563 +#, c-format +msgid "headerfield `%s' missing in header" +msgstr "" + +#: src/msgfmt.c:566 +#, c-format +msgid "header field `%s' should start at beginning of line" +msgstr "" + +#: src/msgfmt.c:576 +msgid "some header fields still have the initial default value" +msgstr "" + +#: src/msgfmt.c:587 +#, c-format +msgid "field `%s' still has initial default value" +msgstr "" + +#: src/msgfmt.c:672 +#, c-format +msgid "%s: warning: source file contains fuzzy translation" +msgstr "" + +#: src/msgfmt.c:874 +msgid "`msgid' and `msgstr' entries do not both begin with '\\n'" +msgstr "" + +#: src/msgfmt.c:882 +msgid "`msgid' and `msgstr' entries do not both end with '\\n'" +msgstr "" + +#: src/msgfmt.c:896 +msgid "number of format specifications in `msgid' and `msgstr' does not match" +msgstr "" + +#: src/msgfmt.c:913 +#, c-format +msgid "format specifications for argument %u are not the same" +msgstr "" + +#: src/msgmerge.c:306 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent indented output style\n" +" -o, --output-file=FILE result will be written to FILE\n" +" --no-location suppress '#: filename:line' lines\n" +" --add-location preserve '#: filename:line' lines (default)\n" +" --strict strict Uniforum output style\n" +" -v, --verbose increase verbosity level\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" + +#: src/msgmerge.c:324 +#, no-wrap +msgid "" +"\n" +"Merges two Uniforum style .po files together. The def.po file is an\n" +"existing PO file with the old translations which will be taken over to\n" +"the newly created file as long as they still match; comments will be\n" +"preserved, but extract comments and file positions will be discarded.\n" +"The ref.po file is the last created PO file (generally by xgettext), any\n" +"translations or comments in the file will be discarded, however dot\n" +"comments and file positions will be preserved. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better results. The\n" +"results are written to stdout unless an output file is specified.\n" +msgstr "" + +#: src/msgmerge.c:772 +#, c-format +msgid "" +"%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete " +"%d.\n" +msgstr "" + +#: src/msgmerge.c:778 +msgid " done.\n" +msgstr "" + +#: src/msgunfmt.c:215 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [FILE]...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent write indented output style\n" +" -o, --output-file=FILE write output into FILE instead of standard output\n" +" --strict write strict uniforum style\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" + +#: src/msgunfmt.c:229 +#, no-wrap +msgid "" +"\n" +"Convert binary .mo files to Uniforum style .po files.\n" +"Both little-endian and big-endian .mo files are handled.\n" +"If no input file is given or it is -, standard input is read.\n" +"By default the output is written to standard output.\n" +msgstr "" + +#: src/msgunfmt.c:266 src/msgunfmt.c:330 src/po-lex.c:185 src/xget-lex.c:254 +#, c-format +msgid "error while reading \"%s\"" +msgstr "" + +#: src/msgunfmt.c:267 src/msgunfmt.c:331 +#, c-format +msgid "file \"%s\" truncated" +msgstr "" + +#: src/msgunfmt.c:298 +#, c-format +msgid "seek \"%s\" offset %ld failed" +msgstr "" + +#: src/msgunfmt.c:373 +#, c-format +msgid "file \"%s\" is not in GNU .mo format" +msgstr "" + +#: ../../src/po-gram.y:83 +msgid "missing `msgstr' section" +msgstr "" + +#: src/po-lex.c:84 +#, c-format +msgid "found %d fatal errors" +msgstr "" + +#: src/po-lex.c:129 src/po-lex.c:168 +msgid "too many errors, aborting" +msgstr "" + +#: src/po-lex.c:241 +#, c-format +msgid "keyword \"%s\" unknown" +msgstr "" + +#: src/po-lex.c:332 +msgid "illegal control sequence" +msgstr "" + +#: src/po-lex.c:415 +msgid "end-of-line within string" +msgstr "" + +#: src/po-lex.c:420 +msgid "end-of-file within string" +msgstr "" + +#: src/xget-lex.c:150 +msgid "standard input" +msgstr "" + +#: src/xget-lex.c:892 +#, c-format +msgid "%s:%d: warning: unterminated character constant" +msgstr "" + +#: src/xget-lex.c:914 +#, c-format +msgid "%s:%d: warning: unterminated string literal" +msgstr "" + +#: src/xgettext.c:386 +msgid "--join-existing cannot be used when output is written to stdout" +msgstr "" + +#: src/xgettext.c:501 +#, c-format +msgid "warning: file `%s' extension `%s' is unknown; will try C" +msgstr "" + +#: src/xgettext.c:537 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Extract translatable string from given input files.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --extract-all extract all strings\n" +" -c, --add-comments[=TAG] place comment block with TAG (or those\n" +" preceding keyword lines) in output file\n" +" -C, --c++ shorthand for --language=C++\n" +" --debug more detailed formatstring recognision result\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" --foreign-user omit FSF copyright in output for foreign user\n" +" -F, --sort-by-file sort output by file location\n" +msgstr "" + +#: src/xgettext.c:557 +#, c-format, no-wrap +msgid "" +" -h, --help display this help and exit\n" +" -i, --indent write the .po file using indented style\n" +" -j, --join-existing join messages with existing file\n" +" -k, --keyword[=WORD] additonal keyword to be looked for (without\n" +" WORD means not to use default keywords)\n" +" -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n" +" -L, --language=NAME recognise the specified language (C, C++, PO),\n" +" otherwise is guessed from file extension\n" +" -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n" +" -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n" +" --no-location do not write '#: filename:line' lines\n" +msgstr "" + +#: src/xgettext.c:571 +#, no-wrap +msgid "" +" -n, --add-location generate '#: filename:line' lines (default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory DIR\n" +" -s, --sort-output generate sorted output and remove duplicates\n" +" --strict write out strict Uniforum conforming .po file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -x, --exclude-file=FILE entries from FILE are not extracted\n" +"\n" +"If INPUTFILE is -, standard input is read.\n" +msgstr "" + +#: src/xgettext.c:1344 +#, c-format +msgid "language `%s' unknown" +msgstr "" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/ko.gmo b/debian/gettext-kde/gettext-kde-0.10.35/po/ko.gmo Binary files differnew file mode 100644 index 00000000..25f33557 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/ko.gmo diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/ko.po b/debian/gettext-kde/gettext-kde-0.10.35/po/ko.po new file mode 100644 index 00000000..397d049f --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/ko.po @@ -0,0 +1,809 @@ +# GNU gettext�� �ѱ��� �޽��� +# Copyright (C) 1996, 1997 Free Software Foundation, Inc. +# Bang Jun-Young <[email protected]>, 1995-1997. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU gettext 0.10.30\n" +"POT-Creation-Date: 1998-04-30 22:50-0700\n" +"PO-Revision-Date: 1997-09-03 12:52+0900\n" +"Last-Translator: Bang Jun-Young <[email protected]>\n" +"Language-Team: Korean <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=EUC-KR\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/error.c:103 +msgid "Unknown system error" +msgstr "�� �� ���� �ý��� ����" + +#: lib/getopt.c:680 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: `%s'�� ��ȣ�� �ɼ��Դϴ�\n" + +#: lib/getopt.c:704 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: `--%s' �ɼ��� ��� ������� �ʽ��ϴ�\n" + +#: lib/getopt.c:709 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: `%c%s' �ɼ��� ��� ������� �ʽ��ϴ�\n" + +#: lib/getopt.c:726 lib/getopt.c:899 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: `%s' �ɼ��� ��� �ʿ��մϴ�\n" + +#. --option +#: lib/getopt.c:755 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: ��� �� ���� �ɼ� `--%s'\n" + +#. +option or -option +#: lib/getopt.c:759 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: ��� �� ���� �ɼ� `%c%s'\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:785 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: �߸��� �ɼ� -- %c\n" + +#: lib/getopt.c:788 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: �������� �ɼ� -- %c\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:818 lib/getopt.c:948 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: �� �ɼ��� ��� �ʿ��մϴ� -- %c\n" + +#: lib/getopt.c:865 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: `-W %s'�� ��ȣ�� �ɼ��Դϴ�\n" + +#: lib/getopt.c:883 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: `-W %s' �ɼ��� ��� ������� �ʽ��ϴ�\n" + +#: lib/xmalloc.c:82 +msgid "Memory exhausted" +msgstr "�޸𸮰� �ٴڳ�" + +#: src/gettextp.c:134 src/msgcmp.c:144 src/msgcomm.c:285 src/msgfmt.c:257 +#: src/msgmerge.c:254 src/msgunfmt.c:175 src/xgettext.c:394 +#, c-format, no-wrap +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"���۱� (C) %s Free Software Foundation, Inc.\n" +"�� ���α׷��� ���� ����Ʈ�����Դϴ�. ���� ������ �ҽ��� �����Ͻʽÿ�. ��ǰ��\n" +"�̳� Ư�� ������ ���� ���ռ��� ����Ͽ�, ��� ������ ���� �ʽ��ϴ�.\n" + +#: src/gettextp.c:139 src/msgcmp.c:149 src/msgcomm.c:290 src/msgfmt.c:262 +#: src/msgmerge.c:259 src/msgunfmt.c:180 src/xgettext.c:399 +#, c-format +msgid "Written by %s.\n" +msgstr "%s�� ��������ϴ�.\n" + +#: src/gettextp.c:154 +msgid "missing arguments" +msgstr "��� ������" + +#: src/gettextp.c:164 +msgid "too many arguments" +msgstr "��� �ʹ� ����" + +#: src/gettextp.c:228 src/msgcmp.c:181 src/msgcomm.c:395 src/msgfmt.c:361 +#: src/msgmerge.c:301 src/msgunfmt.c:210 src/xgettext.c:532 +#, c-format +msgid "Try `%s --help' for more information.\n" +msgstr "�� ���� ������ ������ `%s --help' �Ͻʽÿ�\n" + +#: src/gettextp.c:233 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n" +" -e enable expansion of some escape sequences\n" +" -E (ignored for compatibility)\n" +" -h, --help display this help and exit\n" +" -n suppress trailing newline\n" +" -V, --version display version information and exit\n" +" [TEXTDOMAIN] MSGID retrieve translated message corresponding\n" +" to MSGID from TEXTDOMAIN\n" +msgstr "" +"����: %s [�ɼ�] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN ������ �޽����� TEXTDOMAIN���� �ҷ��ɴϴ�\n" +" -e ��� �̽������� ���ڿ��� Ȯ���� ������ �մϴ�\n" +" -E (ȣȯ���� ���� ���õ�)\n" +" -h, --help �� ������ �����ְ� �����մϴ�\n" +" -n ����ٴ� �ٹٲ� ���ڸ� �����մϴ�\n" +" -V, --version ���� ������ ǥ���ϰ� �����մϴ�\n" +" [TEXTDOMAIN] MSGID MSGID�� �����ϴ� ������ �޽����� TEXTDOMAIN����\n" +" �ҷ��ɴϴ�\n" + +#: src/gettextp.c:245 +#, c-format, no-wrap +msgid "" +"\n" +"If the TEXTDOMAIN parameter is not given, the domain is determined from the\n" +"environment variable TEXTDOMAIN. If the message catalog is not found in the\n" +"regular directory, another location can be specified with the environment\n" +"variable TEXTDOMAINDIR.\n" +"When used with the -s option the program behaves like the `echo' command.\n" +"But it does not simply copy its arguments to stdout. Instead those messages\n" +"found in the selected catalog are translated.\n" +"Standard search directory: %s\n" +msgstr "" +"\n" +"TEXTDOMAIN �������� �־����� ������ ������ ȯ�� ���� TEXTDOMAIN�����\n" +"�����˴ϴ�. �޽��� ����� �Ϲ����� ���丮�� ���� ������ ȯ�� ����\n" +"TEXTDOMAINDIR�� �ٸ� ��ġ�� ������ �� �ֽ��ϴ�.\n" +"-s �ɼ��� ���̸� ���α׷��� `echo' ����ó�� �����մϴ�. �׷��� �ܼ��� ���\n" +"ǥ����¿� ���������� �ʽ��ϴ�. ��� ���õ� ��Ͽ� �ִ� ������ �޽�����\n" +"��µ˴ϴ�.\n" +"�⺻ Ž�� ���丮: %s\n" + +#: src/gettextp.c:255 src/msgcmp.c:200 src/msgcomm.c:442 src/msgfmt.c:388 +#: src/msgmerge.c:334 src/msgunfmt.c:234 src/xgettext.c:584 +#, fuzzy +msgid "Report bugs to <[email protected]>.\n" +msgstr "<[email protected]>�� �������� �����Ͻʽÿ�.\n" + +#: src/message.c:784 +#, c-format +msgid "" +"internationalized messages should not contain the `\\%c' escape sequence" +msgstr "����È�� �޽����� `\\%c' �̽������� �������� ������ �� �����ϴ�" + +#: src/message.c:1115 +#, c-format +msgid "cannot create output file \"%s\"" +msgstr "��� ���� \"%s\"�� ���� �� �����ϴ�" + +#: src/message.c:1122 +#, no-c-format +msgid "standard output" +msgstr "ǥ�� ���" + +#: src/message.c:1182 +#, c-format +msgid "error while writing \"%s\" file" +msgstr "\"%s\" ������ ���� ���� ���� �߻�" + +#: src/msgcmp.c:160 src/msgmerge.c:270 +msgid "no input files given" +msgstr "�Է� ������ �־����� �ʾҽ��ϴ�" + +#: src/msgcmp.c:165 src/msgmerge.c:275 +msgid "exactly 2 input files required" +msgstr "��Ȯ�� 2���� �Է� ������ �ʿ��մϴ�" + +#: src/msgcmp.c:186 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -h, --help display this help and exit\n" +" -V, --version output version information and exit\n" +"\n" +"Compare two Uniforum style .po files to check that both contain the same\n" +"set of msgid strings. The def.po file is an existing PO file with the\n" +"old translations. The ref.po file is the last created PO file\n" +"(generally by xgettext). This is useful for checking that you have\n" +"translated each and every message in your program. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better diagnostics.\n" +msgstr "" +"����: %s [�ɼ�] def.po ref.po\n" +"�� �ɼǿ� �ΰ��Ǵ� ��� ª�� �ɼǿ��� ����˴ϴ�.\n" +" -D, --directory=DIRECTORY �Է� ���� Ž�� ���ܿ� DIRECTORY�� �߰��մϴ�\n" +" -h, --help �� ������ �����ְ� �����մϴ�\n" +" -V, --version ���� ������ ����ϰ� �����մϴ�\n" +"\n" +"���� ������ msgid ���ڿ��� �����ϰ� �ִ��� Ȯ���ϱ� ���� Uniforum\n" +"������ �� .po ������ ���մϴ�. def.po ������ �̹� �����ϴ� �����̸�\n" +"������ ������ �޽����� ��� �ֽ��ϴ�. ref.po ������ �ֱٿ� �������\n" +"PO �����Դϴ�(�Ϲ������� xgettext�� ����). �̰��� ���α׷� ���� �ִ�\n" +"������ �޽����� �����ߴ��� Ȯ���� �� �����մϴ�. ��Ȯ�� ¦�� � ����\n" +"���, ���� ���� ����� ��� ���� ���� ��Ī�� ���˴ϴ�.\n" + +#: src/msgcmp.c:259 src/msgmerge.c:714 +msgid "this message is used but not defined..." +msgstr "�� �޽����� �������� ���ǵ��� �ʾҽ��ϴ�..." + +#: src/msgcmp.c:261 src/msgmerge.c:716 +msgid "...but this definition is similar" +msgstr "...������ �� ���Ǵ� �����մϴ�" + +#: src/msgcmp.c:267 src/msgmerge.c:743 +#, c-format +msgid "this message is used but not defined in %s" +msgstr "�� �޽����� �������� %s���� ���ǵ��� �ʾҽ��ϴ�" + +#: src/msgcmp.c:281 +msgid "warning: this message is not used" +msgstr "���: �� �޽����� ������ �ʽ��ϴ�" + +#: src/msgcmp.c:355 src/msgfmt.c:632 src/msgmerge.c:493 src/xgettext.c:1063 +msgid "duplicate message definition" +msgstr "�ߺ��� �޽��� ����" + +#: src/msgcmp.c:356 src/msgfmt.c:633 src/msgmerge.c:494 src/xgettext.c:1064 +msgid "...this is the location of the first definition" +msgstr "...����� ù��° ������ ��ġ�Դϴ�" + +#: src/msgcmp.c:396 src/msgmerge.c:542 +#, c-format +msgid "this message has no definition in the \"%s\" domain" +msgstr "�� �޽����� \"%s\" ������ ���ǰ� �����ϴ�" + +#. We are about to construct the absolute path to the +#. directory for the output files but asprintf failed. +#: src/msgcomm.c:238 src/xgettext.c:340 src/xgettext.c:1258 +msgid "while preparing output" +msgstr "����� �غ��ϴ� ����" + +#: src/msgcomm.c:273 src/msgcomm.c:277 src/xgettext.c:378 src/xgettext.c:382 +#, c-format +msgid "%s and %s are mutually exclusive" +msgstr "%s�� %s�� ���� ��Ÿ���Դϴ�" + +#: src/msgcomm.c:341 +msgid "at least two files must be specified" +msgstr "" + +#: src/msgcomm.c:360 +#, c-format +msgid "impossible selection criteria specified (%d < n < %d)" +msgstr "" + +#: src/msgcomm.c:400 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" -F, --sort-by-file sort output by file location\n" +" -h, --help display this help and exit\n" +msgstr "" +"����: %s [�ɼ�] �Է����� ...\n" +"�� �ɼǿ� �ΰ��Ǵ� ��� ª�� �ɼǿ��� ����˴ϴ�.\n" +" -a, --extract-all ��� ���ڿ��� �����մϴ�\n" +" -c, --add-comments[=TAG] ��� ���Ͽ� TAG(�Ǵ� ���� ��)�� ���Ե� �ּ�\n" +" ������ �Ӵϴ�\n" +" -C, --c++ --language=C++�� ��� ǥ��\n" +" --debug �� �ڼ��� ���Ĺ��ڿ� �ν� ���\n" +" -d, --default-domain=NAME NAME.po�� ����մϴ� (messages.po ���)\n" +" -D, --directory=DIRECTORY �Է� ���� Ž�� ���ܿ� DIRECTORY�� �߰��մϴ�\n" +" -e, --no-escape ��¿� C �̽������� ���ڸ� ���� �ʽ��ϴ�\n" +" (������)\n" +" -E, --escape ��¿� C �̽������� ���ڸ� ����, Ȯ�� ���ڴ�\n" +" ���� �ʽ��ϴ�\n" +" -f, --files-from=FILE FILE���� �Է� ������ ������ �н��ϴ�\n" +" --force-po ��������� PO ���Ͽ� ����մϴ�\n" +" --foreign-user �ܺ� ����ڸ� ���� FSF ���۱� ������ ��¿���\n" +" �����մϴ�\n" +" -F, --sort-by-file ������ ��ġ�� ���� ����� �����մϴ�\n" + +#: src/msgcomm.c:412 +#, fuzzy +msgid "" +" -i, --indent write the .po file using indented style\n" +" --no-location do not write '#: filename:line' lines\n" +" -n, --add-location generate '#: filename:line' lines " +"(default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory " +"DIR\n" +" -s, --sort-output generate sorted output and remove " +"duplicates\n" +" --strict write out strict Uniforum conforming .po " +"file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -u, --unique shorthand for --less-than=2, requests\n" +" that only unique messages be printed\n" +msgstr "" +" -n, --add-location '#: filename:line' ���� �����մϴ� " +"(������)\n" +" --omit-header ǥ���� `msgid \"\"' �׸��� ���� �ʽ��ϴ�\n" +" -o, --output=FILE ������ ���Ͽ� ����� ����մϴ�\n" +" -p, --output-dir=DIR ��� ������ DIR ���丮�� ������ �����ϴ�\n" +" -s, --sort-output ���ĵ� ����� �����ϰ� �纻�� ����ϴ�\n" +" --strict Uniforum�� ������ ������ .po ������ " +"����ϴ�\n" +" -T, --trigraphs �Է¿� ���� ANSI C Ʈ���׶����� �ν��մϴ�\n" +" -V, --version ���� ������ ����ϰ� �����մϴ�\n" +" -w, --width=NUMBER ��� ������ ���� �����մϴ�\n" +" -x, --exclude-file=FILE FILE ���� �׸��� �������� �ʽ��ϴ�\n" +"\n" +"�Է������� - �̸� ǥ�� �Է��� �а� �˴ϴ�.\n" + +#: src/msgcomm.c:425 +msgid "" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -<, --less-than=NUMBER print messages with less than this many\n" +" definitions, defaults to infinite if not\n" +" set\n" +" ->, --more-than=NUMBER print messages with more than this many\n" +" definitions, defaults to 1 if not set\n" +"\n" +"Find messages which are common to two or more of the specified PO files.\n" +"By using the --more-than option, greater commonality may be requested\n" +"before messages are printed. Conversely, the --less-than option may be\n" +"used to specify less commonality before messages are printed (i.e.\n" +"--less-than=2 will only print the unique messages). Translations,\n" +"comments and extract comments will be preserved, but only from the first\n" +"PO file to define them. File positions from all PO files will be\n" +"preserved.\n" +msgstr "" + +#: src/msgcomm.c:476 src/msgunfmt.c:357 src/po-lex.c:74 src/xget-lex.c:159 +#: src/xget-lex.c:174 src/xget-lex.c:191 src/xgettext.c:618 +#, c-format +msgid "error while opening \"%s\" for reading" +msgstr "�б� ���� \"%s\"�� ���� ���� ���� �߻�" + +#: src/msgcomm.c:557 src/xgettext.c:660 src/xgettext.c:970 +msgid "this file may not contain domain directives" +msgstr "�� ������ ���� �����ڸ� �����ϰ� ���� ���� ���� �ֽ��ϴ�" + +#: src/msgfmt.c:273 src/xgettext.c:410 +msgid "no input file given" +msgstr "�Է� ������ �־����� �ʾҽ��ϴ�" + +#: src/msgfmt.c:321 +#, c-format +msgid "error while opening \"%s\" for writing" +msgstr "���� ���� \"%s\"�� ���� ���� ���� �߻�" + +#: src/msgfmt.c:343 +#, c-format +msgid "%d translated messages" +msgstr "������ �޽��� %d��" + +#: src/msgfmt.c:345 +#, c-format +msgid ", %d fuzzy translations" +msgstr ", ���� ������ %d��" + +#: src/msgfmt.c:347 +#, c-format +msgid ", %d untranslated messages" +msgstr ", �������� ���� �޽��� %d��" + +#: src/msgfmt.c:366 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] filename.po ...\n" +"Generate binary message catalog from textual translation description.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n" +" -c, --check perform language dependent checks on strings\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -f, --use-fuzzy use fuzzy entries in output\n" +" -h, --help display this help and exit\n" +" --no-hash binary file will not include the hash table\n" +" -o, --output-file=FILE specify output file name as FILE\n" +" --statistics print statistics about translations\n" +" --strict enable strict Uniforum mode\n" +" -v, --verbose list input file anomalies\n" +" -V, --version output version information and exit\n" +"\n" +"Giving the -v option more than once increases the verbosity level.\n" +"\n" +"If input file is -, standard input is read. If output file is -,\n" +"output is written to standard output.\n" +msgstr "" +"����: %s [�ɼ�] filename.po ...\n" +"�� �ɼǿ� �ΰ��Ǵ� ��� ª�� �ɼǿ��� ����˴ϴ�.\n" +" -a. --alignment=NUMBER ���ڿ��� NUMBER ����Ʈ�� �����մϴ�(������: %d)\n" +" -c, --check ���ڿ��� ���� ��� ���� �˻縦 �����մϴ�\n" +" -D, --directory=DIRECTORY �Է� ���� Ž�� ���ܿ� DIRECTORY�� �߰��մϴ�\n" +" -f, --fuzzy ��¿� ���� �׸��� ����մϴ�\n" +" -h, --help �� ������ �����ְ� �����մϴ�\n" +" --no-hash ���� ������ �ؽ� ���̺��� �������� �ʵ��� �մϴ�\n" +" -o, --output-file=FILE ��� ���� �̸��� FILE�� �����մϴ�\n" +" --statistics �������� ���� ��踦 ����մϴ�\n" +" --strict ������ Uniforum ��带 ������ �մϴ�\n" +" -v, --verbose �Է� ������ ������� ����մϴ�\n" +" -V, --version ���� ������ ����ϰ� �����մϴ�\n" +"\n" +"-v �ɼ��� �ѹ� �̻� �ָ� ��� ����� �ö󰩴ϴ�.\n" +"\n" +"�Է� ������ - �̸� ǥ�� �Է��� �а� �˴ϴ�. ��� ������ - �̸�\n" +"ǥ�� ��¿� ����մϴ�.\n" + +#: src/msgfmt.c:409 +msgid "while creating hash table" +msgstr "�ؽ� ���̺��� ����� ����" + +#: src/msgfmt.c:451 +#, c-format +msgid "%s: warning: no header entry found" +msgstr "%s: ���: ��� �׸��� � ������" + +#: src/msgfmt.c:473 +#, c-format +msgid "domain name \"%s\" not suitable as file name" +msgstr "������ \"%s\"�� ���� �̸����� �˸��� �ʽ��ϴ�" + +#: src/msgfmt.c:478 +#, c-format +msgid "domain name \"%s\" not suitable as file name: will use prefix" +msgstr "" +"������ \"%s\"�� ���� �̸����� �˸��� �ʽ��ϴ�. �׷��Ƿ� ���λ縦\n" +"����� ���Դϴ�" + +#. We don't change the exit status here because this is really +#. only an information. +#: src/msgfmt.c:491 +#, c-format +msgid "`domain %s' directive ignored" +msgstr "`domain %s' �����ڴ� ���õ�" + +#: src/msgfmt.c:519 +msgid "empty `msgstr' entry ignored" +msgstr "�� `msgstr' �׸��� ���õ�" + +#: src/msgfmt.c:520 +msgid "fuzzy `msgstr' entry ignored" +msgstr "���� `msgstr' �׸��� ���õ�" + +#: src/msgfmt.c:563 +#, c-format +msgid "headerfield `%s' missing in header" +msgstr "����� ����ʵ� `%s'�� ������" + +#: src/msgfmt.c:566 +#, c-format +msgid "header field `%s' should start at beginning of line" +msgstr "��� �ʵ� `%s'�� ���� ���� �����ؾ� �մϴ�" + +#: src/msgfmt.c:576 +msgid "some header fields still have the initial default value" +msgstr "��� ��� �ʵ尡 ������ �ʱ��� �������� ������ �ֽ��ϴ�" + +#: src/msgfmt.c:587 +#, c-format +msgid "field `%s' still has initial default value" +msgstr "`%s' �ʵ尡 ������ �ʱ��� �������� ������ �ֽ��ϴ�" + +#: src/msgfmt.c:672 +#, c-format +msgid "%s: warning: source file contains fuzzy translation" +msgstr "%s: ���: �ҽ� ������ ���� �������� �����ϰ� �ֽ��ϴ�" + +#: src/msgfmt.c:874 +msgid "`msgid' and `msgstr' entries do not both begin with '\\n'" +msgstr "`msgid'�� `msgstr' �׸��� ��� '\\n'���� �������� �ʽ��ϴ�" + +#: src/msgfmt.c:882 +msgid "`msgid' and `msgstr' entries do not both end with '\\n'" +msgstr "`msgid'�� `msgstr' �׸��� ��� '\\n'���� ������ �ʽ��ϴ�" + +#: src/msgfmt.c:896 +msgid "number of format specifications in `msgid' and `msgstr' does not match" +msgstr "`msgid'�� `msgstr'�� ���� ���� �������� ������ ��ġ���� �ʽ��ϴ�" + +#: src/msgfmt.c:913 +#, c-format +msgid "format specifications for argument %u are not the same" +msgstr "�μ� %u�� ���� ���� �����ڰ� ���� �ʽ��ϴ�" + +#: src/msgmerge.c:306 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent indented output style\n" +" -o, --output-file=FILE result will be written to FILE\n" +" --no-location suppress '#: filename:line' lines\n" +" --add-location preserve '#: filename:line' lines (default)\n" +" --strict strict Uniforum output style\n" +" -v, --verbose increase verbosity level\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"����: %s [�ɼ�] def.po ref.po\n" +"�� �ɼǿ� �ΰ��Ǵ� ��� ª�� �ɼǿ��� ����˴ϴ�.\n" +" -D, --directory=DIRECTORY �Է� ���� Ž�� ���ܿ� DIRECTORY�� �߰��մϴ�\n" +" -e, --no-escape ��¿� C �̽������� ���ڸ� ���� �ʽ��ϴ� (������)\n" +" -E, --escape ��¿� C �̽������� ���ڸ� ����, Ȯ�� ���ڴ� ����\n" +" �ʽ��ϴ�\n" +" --force-po ��������� PO ���Ͽ� ����մϴ�\n" +" -h, --help �� ������ �����ְ� �����մϴ�\n" +" -i, --indent �鿩����� ��� ����\n" +" -o, --output-file=FILE ����� FILE�� ���������� �մϴ�\n" +" --no-location `#: filename:line' ���� ���� �ʽ��ϴ�\n" +" --add-location `#: filename:line' ���� �����մϴ� (������)\n" +" --strict ������ Uniforum ��� ����\n" +" -v, --verbose ǥ�� ����� ���Դϴ�\n" +" -V, --version ���� ������ ����ϰ� �����մϴ�\n" +" -w, --width=NUMBER ��� ������ ���� �����մϴ�\n" + +#: src/msgmerge.c:324 +#, no-wrap +msgid "" +"\n" +"Merges two Uniforum style .po files together. The def.po file is an\n" +"existing PO file with the old translations which will be taken over to\n" +"the newly created file as long as they still match; comments will be\n" +"preserved, but extract comments and file positions will be discarded.\n" +"The ref.po file is the last created PO file (generally by xgettext), any\n" +"translations or comments in the file will be discarded, however dot\n" +"comments and file positions will be preserved. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better results. The\n" +"results are written to stdout unless an output file is specified.\n" +msgstr "" +"\n" +"Uniforum ������ �� ������ �ϳ��� �����մϴ�. def.po ������ �̹� �����ϴ�\n" +"�����̸� ������ ������ �޽����� ��� �ֽ��ϴ�. �� ���������� ¦�� �ִ� �Ϳ�\n" +"���� ���Ӱ� ������� ������ ������ ��ü�˴ϴ�; �ּ��� ���������� ���� �ּ���\n" +"���� ��ġ�� ���ŵ˴ϴ�. ref.po ������ �ֱٿ� ������� PO �����̸�\n" +"(�Ϲ������� xgettext�� ����), ���� ���� ��� �������̳� �ּ��� ���ŵ�����\n" +"�� �ּ��� ���� ��ġ�� �����˴ϴ�. ��Ȯ�� ¦�� � ���� ���, ���� ����\n" +"����� ��� ���� ���� ��Ī�� ���˴ϴ�. ���� ��� ������ �������� ������\n" +"����� ǥ����¿� �������ϴ�.\n" + +#: src/msgmerge.c:772 +#, c-format +msgid "" +"%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete " +"%d.\n" +msgstr "" +"%s%d���� ���� �� + %d���� ������, ���յ� �� %d, ���� %d, ���� �� %d, " +"������� �� %d���� �о����ϴ�.\n" + +#: src/msgmerge.c:778 +msgid " done.\n" +msgstr " �Ϸ�.\n" + +#: src/msgunfmt.c:215 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [FILE]...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent write indented output style\n" +" -o, --output-file=FILE write output into FILE instead of standard output\n" +" --strict write strict uniforum style\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"����: %s [�ɼ�] [����]...\n" +"�� �ɼǿ� �ΰ��Ǵ� ��� ª�� �ɼǿ��� ����˴ϴ�.\n" +" -e, --no-escape ��¿� C �̽������� ���ڸ� ���� �ʽ��ϴ� (������)\n" +" -E, --escape ��¿� C �̽������� ���ڸ� ����, Ȯ�� ���ڴ� ����\n" +" �ʽ��ϴ�\n" +" --force-po ��������� PO ���Ͽ� ����մϴ�\n" +" -h, --help �� ������ �����ְ� �����մϴ�\n" +" -i, --indent �鿩����� ��� ����\n" +" -o, --output-file=FILE ����� FILE�� ���������� �մϴ�\n" +" --strict ������ Uniforum ��� ����\n" +" -V, --version ���� ������ ����ϰ� �����մϴ�\n" +" -w, --width=NUMBER ��� ������ ���� �����մϴ�\n" + +#: src/msgunfmt.c:229 +#, no-wrap +msgid "" +"\n" +"Convert binary .mo files to Uniforum style .po files.\n" +"Both little-endian and big-endian .mo files are handled.\n" +"If no input file is given or it is -, standard input is read.\n" +"By default the output is written to standard output.\n" +msgstr "" +"\n" +"���� .mo ������ Uniforum ������ .po ���Ϸ� ��ȯ�մϴ�.\n" +"��Ʋ-������ ��-��������� �� .mo ������ ��� �ٷ� �� �ֽ��ϴ�.\n" +"�Է� ������ �־����� �ʰų� - �̸� ǥ�� �Է��� �а� �˴ϴ�.\n" +"���������� ����� ǥ�� ��¿� ��ϵ˴ϴ�.\n" + +#: src/msgunfmt.c:266 src/msgunfmt.c:330 src/po-lex.c:185 src/xget-lex.c:254 +#, c-format +msgid "error while reading \"%s\"" +msgstr "\"%s\"�� �д� ���� ���� �߻�" + +#: src/msgunfmt.c:267 src/msgunfmt.c:331 +#, c-format +msgid "file \"%s\" truncated" +msgstr "\"%s\" ������ �߷���" + +#: src/msgunfmt.c:298 +#, c-format +msgid "seek \"%s\" offset %ld failed" +msgstr "\"%s\" �ɼ� %ld Ž�� ����" + +#: src/msgunfmt.c:373 +#, c-format +msgid "file \"%s\" is not in GNU .mo format" +msgstr "\"%s\" ������ GNU .mo ������ �ƴմϴ�" + +#: ../../src/po-gram.y:83 +msgid "missing `msgstr' section" +msgstr "`msgstr' ��� �������ϴ�" + +#: src/po-lex.c:84 +#, c-format +msgid "found %d fatal errors" +msgstr "%d���� ġ������ ������ ã�ҽ��ϴ�" + +#: src/po-lex.c:129 src/po-lex.c:168 +msgid "too many errors, aborting" +msgstr "������ �ʹ� ���Ƽ� �ߴ��մϴ�" + +#: src/po-lex.c:241 +#, c-format +msgid "keyword \"%s\" unknown" +msgstr "�� �� ���� ���� \"%s\"" + +#: src/po-lex.c:332 +msgid "illegal control sequence" +msgstr "�߸��� ���� ������" + +#: src/po-lex.c:415 +msgid "end-of-line within string" +msgstr "���ڿ� ����� ���� ����" + +#: src/po-lex.c:420 +msgid "end-of-file within string" +msgstr "���ڿ� ����� ������ ����" + +#: src/xget-lex.c:150 +msgid "standard input" +msgstr "ǥ�� �Է�" + +#: src/xget-lex.c:892 +#, c-format +msgid "%s:%d: warning: unterminated character constant" +msgstr "%s:%d: ���: �ϰ���� ���� ���� ���" + +#: src/xget-lex.c:914 +#, c-format +msgid "%s:%d: warning: unterminated string literal" +msgstr "%s:%d: ���: �ϰ���� ���� ���ڿ� ���" + +#: src/xgettext.c:386 +msgid "--join-existing cannot be used when output is written to stdout" +msgstr "--join-exeisting�� ����� ǥ����¿� ������ �� ���� �� �����ϴ�" + +#: src/xgettext.c:501 +#, c-format +msgid "warning: file `%s' extension `%s' is unknown; will try C" +msgstr "���: `%s' ������ Ȯ���� `%s'�� �� �� �����ϴ�; C �������� ������" + +#: src/xgettext.c:537 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Extract translatable string from given input files.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --extract-all extract all strings\n" +" -c, --add-comments[=TAG] place comment block with TAG (or those\n" +" preceding keyword lines) in output file\n" +" -C, --c++ shorthand for --language=C++\n" +" --debug more detailed formatstring recognision result\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" --foreign-user omit FSF copyright in output for foreign user\n" +" -F, --sort-by-file sort output by file location\n" +msgstr "" +"����: %s [�ɼ�] �Է����� ...\n" +"�� �ɼǿ� �ΰ��Ǵ� ��� ª�� �ɼǿ��� ����˴ϴ�.\n" +" -a, --extract-all ��� ���ڿ��� �����մϴ�\n" +" -c, --add-comments[=TAG] ��� ���Ͽ� TAG(�Ǵ� ���� ��)�� ���Ե� �ּ�\n" +" ������ �Ӵϴ�\n" +" -C, --c++ --language=C++�� ��� ǥ��\n" +" --debug �� �ڼ��� ���Ĺ��ڿ� �ν� ���\n" +" -d, --default-domain=NAME NAME.po�� ����մϴ� (messages.po ���)\n" +" -D, --directory=DIRECTORY �Է� ���� Ž�� ���ܿ� DIRECTORY�� �߰��մϴ�\n" +" -e, --no-escape ��¿� C �̽������� ���ڸ� ���� �ʽ��ϴ�\n" +" (������)\n" +" -E, --escape ��¿� C �̽������� ���ڸ� ����, Ȯ�� ���ڴ�\n" +" ���� �ʽ��ϴ�\n" +" -f, --files-from=FILE FILE���� �Է� ������ ������ �н��ϴ�\n" +" --force-po ��������� PO ���Ͽ� ����մϴ�\n" +" --foreign-user �ܺ� ����ڸ� ���� FSF ���۱� ������ ��¿���\n" +" �����մϴ�\n" +" -F, --sort-by-file ������ ��ġ�� ���� ����� �����մϴ�\n" + +#: src/xgettext.c:557 +#, c-format, no-wrap +msgid "" +" -h, --help display this help and exit\n" +" -i, --indent write the .po file using indented style\n" +" -j, --join-existing join messages with existing file\n" +" -k, --keyword[=WORD] additonal keyword to be looked for (without\n" +" WORD means not to use default keywords)\n" +" -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n" +" -L, --language=NAME recognise the specified language (C, C++, PO),\n" +" otherwise is guessed from file extension\n" +" -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n" +" -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n" +" --no-location do not write '#: filename:line' lines\n" +msgstr "" +" -h, --help �� ������ �����ְ� �����մϴ�\n" +" -i, --indent �鿩����� ���·� .po ���Ͽ� ����մϴ�\n" +" -j, --join-existing �����ϴ� ���Ͽ� �޽����� �����մϴ�\n" +" -k, --keyword[=WORD] ������� Ž���� ���� (WORD�� ��������\n" +" �ʴ� ���� ������ Ű���带 ���� ���� ������\n" +" �ʽ��ϴ�)\n" +" -l, --string-limit=NUMBER ���ڿ��� ���̸� %u ��� NUMBER�� �����մϴ�\n" +" -L, --language=NAME ������ ���(C, C++, PO)�� �ν��ϸ�, �׷��� ����\n" +" ������ ���� Ȯ���ڸ� ���� �����մϴ�.\n" +" -m, --msgstr-prefix[=STRING] msgstr �׸��� ���� STRING�̳� \"\"��\n" +" ����մϴ�\n" +" -M, --msgstr-suffix[=STRING] msgstr �׸��� ���̻�� STRING�̳� \"\"��\n" +" ����մϴ�\n" +" --no-location '#: filename:line' ���� ���� �ʽ��ϴ�\n" + +#: src/xgettext.c:571 +#, no-wrap +msgid "" +" -n, --add-location generate '#: filename:line' lines (default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory DIR\n" +" -s, --sort-output generate sorted output and remove duplicates\n" +" --strict write out strict Uniforum conforming .po file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -x, --exclude-file=FILE entries from FILE are not extracted\n" +"\n" +"If INPUTFILE is -, standard input is read.\n" +msgstr "" +" -n, --add-location '#: filename:line' ���� �����մϴ� (������)\n" +" --omit-header ǥ���� `msgid \"\"' �׸��� ���� �ʽ��ϴ�\n" +" -o, --output=FILE ������ ���Ͽ� ����� ����մϴ�\n" +" -p, --output-dir=DIR ��� ������ DIR ���丮�� ������ �����ϴ�\n" +" -s, --sort-output ���ĵ� ����� �����ϰ� �纻�� ����ϴ�\n" +" --strict Uniforum�� ������ ������ .po ������ ����ϴ�\n" +" -T, --trigraphs �Է¿� ���� ANSI C Ʈ���׶����� �ν��մϴ�\n" +" -V, --version ���� ������ ����ϰ� �����մϴ�\n" +" -w, --width=NUMBER ��� ������ ���� �����մϴ�\n" +" -x, --exclude-file=FILE FILE ���� �׸��� �������� �ʽ��ϴ�\n" +"\n" +"�Է������� - �̸� ǥ�� �Է��� �а� �˴ϴ�.\n" + +#: src/xgettext.c:1344 +#, c-format +msgid "language `%s' unknown" +msgstr "`%s' �� �� �� ����" + +#~ msgid "Report bugs to <[email protected]>.\n" +#~ msgstr "<[email protected]>�� �������� �����Ͻʽÿ�.\n" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/nl.gmo b/debian/gettext-kde/gettext-kde-0.10.35/po/nl.gmo Binary files differnew file mode 100644 index 00000000..a45a3d6d --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/nl.gmo diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/nl.po b/debian/gettext-kde/gettext-kde-0.10.35/po/nl.po new file mode 100644 index 00000000..f26907c3 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/nl.po @@ -0,0 +1,818 @@ +# Dutch translation for GNU gettext messages. +# Copyright (C) 1996 Free Software Foundation, Inc. +# Erick Branderhorst <[email protected]>, 1996. +# +msgid "" +msgstr "" +"Project-Id-Version: gettext 0.10.31\n" +"POT-Creation-Date: 1998-04-30 22:50-0700\n" +"PO-Revision-Date: 1997-03-11 22:38 \n" +"Last-Translator: Erick Branderhorst <[email protected]>\n" +"Language-Team: Dutch <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/error.c:103 +msgid "Unknown system error" +msgstr "Onbekende systeemfout" + +#: lib/getopt.c:680 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: optie `%s' is ambiguous\n" + +#: lib/getopt.c:704 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: optie `--%s' verwacht geen argument\n" + +#: lib/getopt.c:709 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: optie `%c%s' verwacht geen argument\n" + +#: lib/getopt.c:726 lib/getopt.c:899 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: optie `%s' verwacht een argument\n" + +#. --option +#: lib/getopt.c:755 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: onbekende optie `--%s'\n" + +#. +option or -option +#: lib/getopt.c:759 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: onbekende optie `%c%s'\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:785 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: ongeldige optie -- %c\n" + +#: lib/getopt.c:788 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: ongeldige optie -- %c\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:818 lib/getopt.c:948 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: optie verwacht een argument -- %c\n" + +#: lib/getopt.c:865 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: optie `-W %s' is dubbelzinnig\n" + +#: lib/getopt.c:883 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: optie `-W %s' staat geen argument toe\n" + +#: lib/xmalloc.c:82 +msgid "Memory exhausted" +msgstr "Geen geheugen meer beschikbaar" + +#: src/gettextp.c:134 src/msgcmp.c:144 src/msgcomm.c:285 src/msgfmt.c:257 +#: src/msgmerge.c:254 src/msgunfmt.c:175 src/xgettext.c:394 +#, c-format, no-wrap +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Kopierecht (C) %s Free Software Foundation, Inc. Dit is vrije\n" +"programmatuur; zie de broncode voor kopieervoowaarden. Er is GEEN\n" +"garantie; zelfs niet voor VERKOOPBAARHEID of GESCHIKTHEID VOOR EEN\n" +"SPECIFIEK DOEL.\n" + +#: src/gettextp.c:139 src/msgcmp.c:149 src/msgcomm.c:290 src/msgfmt.c:262 +#: src/msgmerge.c:259 src/msgunfmt.c:180 src/xgettext.c:399 +#, c-format +msgid "Written by %s.\n" +msgstr "Geschreven door %s.\n" + +#: src/gettextp.c:154 +msgid "missing arguments" +msgstr "ontbrekende argumenten" + +#: src/gettextp.c:164 +msgid "too many arguments" +msgstr "te veel argumenten" + +#: src/gettextp.c:228 src/msgcmp.c:181 src/msgcomm.c:395 src/msgfmt.c:361 +#: src/msgmerge.c:301 src/msgunfmt.c:210 src/xgettext.c:532 +#, c-format +msgid "Try `%s --help' for more information.\n" +msgstr "Probeer `%s --help' voor meer informatie.\n" + +#: src/gettextp.c:233 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n" +" -e enable expansion of some escape sequences\n" +" -E (ignored for compatibility)\n" +" -h, --help display this help and exit\n" +" -n suppress trailing newline\n" +" -V, --version display version information and exit\n" +" [TEXTDOMAIN] MSGID retrieve translated message corresponding\n" +" to MSGID from TEXTDOMAIN\n" +msgstr "" +"Gebruik: %s [OPTIE] [[[TEXTDOMEIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEKSTDOMEIN haal vertaalde meldingen uit TEKSTDOMEIN\n" +" -e maak expansie van enkele escape sequences mogelijk\n" +" -E (genegeerd voor compatibiliteit)\n" +" -h, --help toon hulp-tekst en bekindig programma\n" +" -n onderdruk achtergevoegd nieuwe regel teken\n" +" -V, --version toon versie-informatie en bekindig programma\n" +" [TEXTDOMEIN] MSGID ontvang vertaalde meldingen corresponderend aan\n" +" MSGID vanuit TEKSTDOMEIN\n" + +#: src/gettextp.c:245 +#, c-format, no-wrap +msgid "" +"\n" +"If the TEXTDOMAIN parameter is not given, the domain is determined from the\n" +"environment variable TEXTDOMAIN. If the message catalog is not found in the\n" +"regular directory, another location can be specified with the environment\n" +"variable TEXTDOMAINDIR.\n" +"When used with the -s option the program behaves like the `echo' command.\n" +"But it does not simply copy its arguments to stdout. Instead those messages\n" +"found in the selected catalog are translated.\n" +"Standard search directory: %s\n" +msgstr "" +"\n" +"Als de TEKSTDOMEIN parameter niet gegeven is, zal het domein worden bepaald\n" +"door de omgevings variabele TEXTDOMAIN. Als de meldingen katalogus niet\n" +"gevonden is in de gebruikelijke directory, kan een andere lokatie worden\n" +"gespecificeerd met de omgevings variabele TEXTDOMAINDIR.\n" +"Als optie `-s' gegeven is, gedraagt het programma zich als het `echo' commando.\n" +"Maar het kopieert niet de argumenten naar standaard uitvoer. In plaats daarvan\n" +"worden de in de katalogus gevonden meldingen vertaald.\n" +"Standaard zoek directory: %s\n" + +#: src/gettextp.c:255 src/msgcmp.c:200 src/msgcomm.c:442 src/msgfmt.c:388 +#: src/msgmerge.c:334 src/msgunfmt.c:234 src/xgettext.c:584 +#, fuzzy +msgid "Report bugs to <[email protected]>.\n" +msgstr "Meld fouten via <[email protected]>.\n" + +#: src/message.c:784 +#, c-format +msgid "" +"internationalized messages should not contain the `\\%c' escape sequence" +msgstr "" +"geonternationaliseerde meldingen mogen geen `\\%c' escape sequences bevatten" + +#: src/message.c:1115 +#, c-format +msgid "cannot create output file \"%s\"" +msgstr "kan uitvoerbestand \"%s\" niet aanmaken" + +#: src/message.c:1122 +#, no-c-format +msgid "standard output" +msgstr "standaard uitvoer" + +#: src/message.c:1182 +#, c-format +msgid "error while writing \"%s\" file" +msgstr "fout bij schrijven bestand \"%s\"" + +#: src/msgcmp.c:160 src/msgmerge.c:270 +msgid "no input files given" +msgstr "geen invoerbestanden gegeven" + +#: src/msgcmp.c:165 src/msgmerge.c:275 +msgid "exactly 2 input files required" +msgstr "precies 2 invoerbestanden zijn benodigd" + +#: src/msgcmp.c:186 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -h, --help display this help and exit\n" +" -V, --version output version information and exit\n" +"\n" +"Compare two Uniforum style .po files to check that both contain the same\n" +"set of msgid strings. The def.po file is an existing PO file with the\n" +"old translations. The ref.po file is the last created PO file\n" +"(generally by xgettext). This is useful for checking that you have\n" +"translated each and every message in your program. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better diagnostics.\n" +msgstr "" +"Gebruik: %s [OPTION] def.po ref.po\n" +"Verplicht argumenten bij lange opties zijn ook verplicht bij korte opties.\n" +" -D, --directory=DIRECTORY voeg DIRECTORY toe aan lijst waar invoerbestanden\n" +" gezocht worden\n" +" -h, --help toon hulp-tekst en bekindig programma\n" +" -V, --version toon versie-informatie en bekindig programma\n" +"\n" +"Vergelijk twee Uniforum-stijl .po bestanden en kontroleer of beide dezelfde\n" +"set van msgid strings bevatten. Het def.po bestand is een bestaand PO bestand\n" +"met de oude vertalingen. Het ref.po bestand is het meest recente PO bestand\n" +"(over het algemeen aangemaakt door xgettext). Het is belangrijk om te\n" +"kontroleren of elke melding is vertaald in het programma. Wanneer een precieze\n" +"overeenkomst niet gevonden kan wrden, zal fuzzy(vage) matching worden gebruikt,\n" +"ter verkrijging van een betere diagnose.\n" + +#: src/msgcmp.c:259 src/msgmerge.c:714 +msgid "this message is used but not defined..." +msgstr "deze melding is gebruikt maar is niet gedefinieerd..." + +#: src/msgcmp.c:261 src/msgmerge.c:716 +msgid "...but this definition is similar" +msgstr "...maar de definitie is gelijksoortig" + +#: src/msgcmp.c:267 src/msgmerge.c:743 +#, c-format +msgid "this message is used but not defined in %s" +msgstr "deze melding is gebruikt maar niet gedefinieerd in %s" + +#: src/msgcmp.c:281 +msgid "warning: this message is not used" +msgstr "waarschuwing: deze melding is niet gebruikt" + +#: src/msgcmp.c:355 src/msgfmt.c:632 src/msgmerge.c:493 src/xgettext.c:1063 +msgid "duplicate message definition" +msgstr "dubbele melding definitie" + +#: src/msgcmp.c:356 src/msgfmt.c:633 src/msgmerge.c:494 src/xgettext.c:1064 +msgid "...this is the location of the first definition" +msgstr "...dit is de lokatie van de eerste definitie" + +#: src/msgcmp.c:396 src/msgmerge.c:542 +#, c-format +msgid "this message has no definition in the \"%s\" domain" +msgstr "deze melding heeft geen definitie in het \"%s\" domein" + +#. We are about to construct the absolute path to the +#. directory for the output files but asprintf failed. +#: src/msgcomm.c:238 src/xgettext.c:340 src/xgettext.c:1258 +msgid "while preparing output" +msgstr "bij voorbereiden uitvoer" + +#: src/msgcomm.c:273 src/msgcomm.c:277 src/xgettext.c:378 src/xgettext.c:382 +#, c-format +msgid "%s and %s are mutually exclusive" +msgstr "%s en %s zijn mutually exclusive" + +#: src/msgcomm.c:341 +msgid "at least two files must be specified" +msgstr "" + +#: src/msgcomm.c:360 +#, c-format +msgid "impossible selection criteria specified (%d < n < %d)" +msgstr "" + +#: src/msgcomm.c:400 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" -F, --sort-by-file sort output by file location\n" +" -h, --help display this help and exit\n" +msgstr "" +"Gebruik: %s [OPTIE] INVOERBESTAND ...\n" +"Verplichte argument bij lange opties zijn ook verplicht bij korte opties.\n" +" -a, --extract-all extraheer alle strings\n" +" -c, --add-comments[=TAG] plaats een kommentaar blok met TAG (of deze\n" +" voorafgaande sleutelwoord regels) in uitvoer\n" +" -C, --c++ herken C++ stijl kommentaar\n" +" --debug meer gedetaileerde formatstring resultaat\n" +" -d, --default-domain=NAAM gebruik NAAM.po voor uitvoer\n" +" (in plaats van messages.po)\n" +" -D, --directory=DIRECTORY zoek invoerbestanden ook in DIRECTORY\n" +" -e, --no-escape gebruik geen C escapes in uitvoer (standaard)\n" +" -E, --escape gebruik C escapes in uitvoer, geen extended\n" +" karakters\n" +" -f, --files-from=BESTAND haal lijst van invoerbestand uit BESTAND\n" +" --force-po maak altijd een (eventueel leeg) PO bestand\n" +" --foreign-user laat FSF kopierecht weg voor vreemde gebruiker\n" +" -F, --sort-by-file sorteer uitvoer bij bestandslokatie\n" + +#: src/msgcomm.c:412 +#, fuzzy +msgid "" +" -i, --indent write the .po file using indented style\n" +" --no-location do not write '#: filename:line' lines\n" +" -n, --add-location generate '#: filename:line' lines " +"(default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory " +"DIR\n" +" -s, --sort-output generate sorted output and remove " +"duplicates\n" +" --strict write out strict Uniforum conforming .po " +"file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -u, --unique shorthand for --less-than=2, requests\n" +" that only unique messages be printed\n" +msgstr "" +" -n, --add-location voeg '#: filename:line' regels toe " +"(standaard)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=BESTAND schrijf uitvoer naar gespecificeerd " +"bestand\n" +" -p, --output-dir=DIR plaats uitvoerbestanden in directory DIR\n" +" -s, --sort-output sorteer uitvoer en verwijder dubbelen\n" +" --strict uitvoer volgens strikte Uniforum stijl\n" +" -T, --trigraphs accepteer ANSI C trigraphs als invoer\n" +" -V, --version toon hulp-tekst en bekindig programma\n" +" -w, --width=NUMMER stel pagina uitvoer breedte in\n" +" -x, --exclude-file=BESTAND ingangen van BESTAND worden niet " +"gekxtraheerd\n" +"\n" +"Als INVOERBESTAND - is, lees standaardinvoer.\n" + +#: src/msgcomm.c:425 +msgid "" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -<, --less-than=NUMBER print messages with less than this many\n" +" definitions, defaults to infinite if not\n" +" set\n" +" ->, --more-than=NUMBER print messages with more than this many\n" +" definitions, defaults to 1 if not set\n" +"\n" +"Find messages which are common to two or more of the specified PO files.\n" +"By using the --more-than option, greater commonality may be requested\n" +"before messages are printed. Conversely, the --less-than option may be\n" +"used to specify less commonality before messages are printed (i.e.\n" +"--less-than=2 will only print the unique messages). Translations,\n" +"comments and extract comments will be preserved, but only from the first\n" +"PO file to define them. File positions from all PO files will be\n" +"preserved.\n" +msgstr "" + +#: src/msgcomm.c:476 src/msgunfmt.c:357 src/po-lex.c:74 src/xget-lex.c:159 +#: src/xget-lex.c:174 src/xget-lex.c:191 src/xgettext.c:618 +#, c-format +msgid "error while opening \"%s\" for reading" +msgstr "fout tijdens openen om te lezen van \"%s\"" + +#: src/msgcomm.c:557 src/xgettext.c:660 src/xgettext.c:970 +msgid "this file may not contain domain directives" +msgstr "dit bestand mag geen domein directives bevatten" + +#: src/msgfmt.c:273 src/xgettext.c:410 +msgid "no input file given" +msgstr "geen invoerbestand gegeven" + +#: src/msgfmt.c:321 +#, c-format +msgid "error while opening \"%s\" for writing" +msgstr "fout bij openen om te schrijven van \"%s\"" + +#: src/msgfmt.c:343 +#, c-format +msgid "%d translated messages" +msgstr "%d vertaalde meldingen" + +#: src/msgfmt.c:345 +#, c-format +msgid ", %d fuzzy translations" +msgstr ", %d vage vertalingen" + +#: src/msgfmt.c:347 +#, c-format +msgid ", %d untranslated messages" +msgstr ", %d onvertaalde meldingen" + +#: src/msgfmt.c:366 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] filename.po ...\n" +"Generate binary message catalog from textual translation description.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n" +" -c, --check perform language dependent checks on strings\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -f, --use-fuzzy use fuzzy entries in output\n" +" -h, --help display this help and exit\n" +" --no-hash binary file will not include the hash table\n" +" -o, --output-file=FILE specify output file name as FILE\n" +" --statistics print statistics about translations\n" +" --strict enable strict Uniforum mode\n" +" -v, --verbose list input file anomalies\n" +" -V, --version output version information and exit\n" +"\n" +"Giving the -v option more than once increases the verbosity level.\n" +"\n" +"If input file is -, standard input is read. If output file is -,\n" +"output is written to standard output.\n" +msgstr "" +"Gebruik: %s [OPTIE] bestandsnaam.po ...\n" +"Verplichte argument voor lange opties zijn ook verplicht voor korte opties.\n" +" -a, --alignment=NUMMER lijn strings uit tot NUMMER bytes (standaard: %d)\n" +" -c, --check voer taalafhankelijke kontrole uit op strings\n" +" -D, --directory=DIRECTORY voeg DIRECTORY toe aan lijst van directories\n" +" waarin invoerbestanden gezocht worden\n" +" -f, --use-fuzzy gebruik vage ingangen in uitvoer\n" +" -h, --help toon hulp-tekst en bekindig programma\n" +" --no-hash binair bestand zal niet de hash tabel bevatten\n" +" -o, --output-file=BESTAND uitvoerbestandsnaam is BESTAND\n" +" --statistics toon statistieken van vertalingen\n" +" --strict gebruik strikte Uniforum mode\n" +" -v, --verbose laat invoerbestand anomalies zien\n" +" -V, --version toon versie-informatie en bekindig programma\n" +"\n" +"Het meer dan eens geven van de -v optie verhoogt het verbosity nivo.\n" +"\n" +"Als invoerbestand - is, lees standaardinvoer. Als uitvoerbestand -\n" +"is, schrijf uitvoer naar standaarduitvoer.\n" + +#: src/msgfmt.c:409 +msgid "while creating hash table" +msgstr "tijdens aanmaken hash tabel" + +#: src/msgfmt.c:451 +#, c-format +msgid "%s: warning: no header entry found" +msgstr "%s: let op: geen header ingang gevonden" + +#: src/msgfmt.c:473 +#, c-format +msgid "domain name \"%s\" not suitable as file name" +msgstr "domeinnaam \"%s\" niet bruikbaar als bestandsnaam" + +#: src/msgfmt.c:478 +#, c-format +msgid "domain name \"%s\" not suitable as file name: will use prefix" +msgstr "" +"domeinnaam \"%s\" niet bruikbaar als bestandsnaam: zal voorvoegsel gebruiken" + +#. We don't change the exit status here because this is really +#. only an information. +#: src/msgfmt.c:491 +#, c-format +msgid "`domain %s' directive ignored" +msgstr "`domein %s' directive genegeerd" + +#: src/msgfmt.c:519 +msgid "empty `msgstr' entry ignored" +msgstr "lege `msgstr' entry genegeerd" + +#: src/msgfmt.c:520 +msgid "fuzzy `msgstr' entry ignored" +msgstr "lege `msgstr' ingang genegeerd" + +#: src/msgfmt.c:563 +#, c-format +msgid "headerfield `%s' missing in header" +msgstr "header(??)veld `%s' ontbreekt in header(??)" + +#: src/msgfmt.c:566 +#, c-format +msgid "header field `%s' should start at beginning of line" +msgstr "header(??)veld `%s' moet starten aan het begin van de regel" + +#: src/msgfmt.c:576 +msgid "some header fields still have the initial default value" +msgstr "" +"sommige header(??)velden hebben nog de oorspronkelijke standaard waarde" + +#: src/msgfmt.c:587 +#, c-format +msgid "field `%s' still has initial default value" +msgstr "veld `%s' heeft nog de oorspronkelijke standaard waarde" + +#: src/msgfmt.c:672 +#, c-format +msgid "%s: warning: source file contains fuzzy translation" +msgstr "%s: let op: broncode bevat vage vertaling" + +#: src/msgfmt.c:874 +msgid "`msgid' and `msgstr' entries do not both begin with '\\n'" +msgstr "`msgid' en `msgstr' ingangen beginnen niet allebei met '\\n'" + +#: src/msgfmt.c:882 +msgid "`msgid' and `msgstr' entries do not both end with '\\n'" +msgstr "`msgid' en `msgstr' ingangen eindigen niet allebei met '\\n'" + +#: src/msgfmt.c:896 +msgid "number of format specifications in `msgid' and `msgstr' does not match" +msgstr "aantal formaat specificaties in `msgid' en `msgstr' zijn niet gelijk" + +#: src/msgfmt.c:913 +#, c-format +msgid "format specifications for argument %u are not the same" +msgstr "formaat specificaties voor argument %u zijn niet dezelfde" + +#: src/msgmerge.c:306 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent indented output style\n" +" -o, --output-file=FILE result will be written to FILE\n" +" --no-location suppress '#: filename:line' lines\n" +" --add-location preserve '#: filename:line' lines (default)\n" +" --strict strict Uniforum output style\n" +" -v, --verbose increase verbosity level\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Gebruik: %s [OPTION] def.po ref.po\n" +"Verplichte argumenten bij lange opties zijn ook verplicht bij korte opties.\n" +" -D, --directory=DIRECTORY voeg DIRECTORY toe aan lijst waar van directories\n" +" invoerbestanden gezocht worden\n" +" -e, --no-escape gebruikt geen C escapes in uitvoer (standaard)\n" +" -E, --escape gebruik C escapes in uitvoer, geen extended chars\n" +" --force-po schrijf PO bestand zelfs als het leeg is\n" +" -h, --help toon hulp-tekst en bekindig programma\n" +" -i, --indent geondenteerde uitvoerstijl\n" +" -o, --output-file=BESTAND resultaat wordt naar BESTAND geschreven\n" +" --no-location onderdruk '#: bestandsnaam:regel' regels\n" +" --add-location behoud '#: bestandsnaam:regel' regels (standaard)\n" +" --strict stricte Uniforum uitvoerstijl\n" +" -v, --verbose verhoog verbosity nivo\n" +" -V, --version toon versie-informatie en bekindig programma\n" +" -W, --width=NUMBER stel uitvoer pagina breedte in\n" + +#: src/msgmerge.c:324 +#, no-wrap +msgid "" +"\n" +"Merges two Uniforum style .po files together. The def.po file is an\n" +"existing PO file with the old translations which will be taken over to\n" +"the newly created file as long as they still match; comments will be\n" +"preserved, but extract comments and file positions will be discarded.\n" +"The ref.po file is the last created PO file (generally by xgettext), any\n" +"translations or comments in the file will be discarded, however dot\n" +"comments and file positions will be preserved. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better results. The\n" +"results are written to stdout unless an output file is specified.\n" +msgstr "" +"\n" +"Voeg twee Uniforum stijl .po bestanden samen. Het def.po bestand is een\n" +"bestaand PO bestand met de oude vertaling welke overgenomen zal worden in het\n" +"nieuwe bestand als ze overeenkomen; kommentaren worden bewaard, maar\n" +"extractie kommentaar en bestandspositie's worden buiten beschouwing gelaten.\n" +"Het ref.po bestand is het laatst gekreeerd PO bestand (in het algemeen door\n" +"xgettext), vertaling of kommentaren in dit bestand worden buiten beshouwing\n" +"gelaten, maar punt kommentaar en bestandspositie's blijven bewaard.\n" +"Als geen precieze overeenkomst gevonden kan worden, zal fuzzy matching gebruikt\n" +"worden om betere resultaten te verkrijgen. De resultaten worden naar \n" +"standaarduitvoer geschreven tenzij een uitvoerbestand is gespecificeerd.\n" + +#: src/msgmerge.c:772 +#, c-format +msgid "" +"%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete " +"%d.\n" +msgstr "" +"%sLees %d oud + %d referentie, samengevoegd %d, fuzzied(gevaagd) %d, " +"ontbrekend %d, overbodig %d.\n" + +#: src/msgmerge.c:778 +msgid " done.\n" +msgstr " done.\n" + +#: src/msgunfmt.c:215 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [FILE]...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent write indented output style\n" +" -o, --output-file=FILE write output into FILE instead of standard output\n" +" --strict write strict uniforum style\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Gebruik: %s [OPTIE] [BESTAND]...\n" +"Verplichte argumenten voor lange opties zijn ook verplicht voor korte opties.\n" +" -e, --no-escape gebruik geen C escapes in uitvoer (standaard)\n" +" -E, --escape gebruik C escapes in uitvoer, geen extended\n" +" karakters\n" +" --force-po schrijf PO bestand zelfs als het leeg is\n" +" -h, --help laat hulp-tekst zien en bekindig programma\n" +" -i, --indent gebruik geindenteerde uitvoer-stijl\n" +" -o, --output-file=FILE uitvoer gaat naar BESTAND\n" +"\n" +" --strict gebruik strikte Uniforum-stijl\n" +" -V, --version toon versie-informatie en bekindig programma\n" +" -w, --width=NUMMER stel uitvoer paginabreedte in\n" + +#: src/msgunfmt.c:229 +#, no-wrap +msgid "" +"\n" +"Convert binary .mo files to Uniforum style .po files.\n" +"Both little-endian and big-endian .mo files are handled.\n" +"If no input file is given or it is -, standard input is read.\n" +"By default the output is written to standard output.\n" +msgstr "" +"\n" +"Konverteer binaire .mo bestanden naar Uniforum-stijl .po bestanden.\n" +"Zowel klein-endian en groot-endian .mo bestanden zijn toegestaan.\n" +"Als invoerbestand - is of leeg, lees standaardinvoer.\n" +"Standaard wordt de uitvoer gescreven naar standaarduitvoer.\n" + +#: src/msgunfmt.c:266 src/msgunfmt.c:330 src/po-lex.c:185 src/xget-lex.c:254 +#, c-format +msgid "error while reading \"%s\"" +msgstr "fout tijdens lezen \"%s\"" + +#: src/msgunfmt.c:267 src/msgunfmt.c:331 +#, c-format +msgid "file \"%s\" truncated" +msgstr "bestand \"%s\" ingekort" + +#: src/msgunfmt.c:298 +#, c-format +msgid "seek \"%s\" offset %ld failed" +msgstr "zoek \"%s\" offset %ld gefaald" + +#: src/msgunfmt.c:373 +#, c-format +msgid "file \"%s\" is not in GNU .mo format" +msgstr "bestand \"%s\" is geen GNU .mo bestand" + +#: ../../src/po-gram.y:83 +msgid "missing `msgstr' section" +msgstr "ontbrekend `msgstr' gedeelte" + +#: src/po-lex.c:84 +#, c-format +msgid "found %d fatal errors" +msgstr "%d fatale fouten gevonden" + +#: src/po-lex.c:129 src/po-lex.c:168 +msgid "too many errors, aborting" +msgstr "te veel fouten, afgebroken" + +#: src/po-lex.c:241 +#, c-format +msgid "keyword \"%s\" unknown" +msgstr "sleutelwoord \"%s\" onbekend" + +#: src/po-lex.c:332 +msgid "illegal control sequence" +msgstr "illegale kontrol sequence" + +#: src/po-lex.c:415 +msgid "end-of-line within string" +msgstr "einde-regel-teken in string" + +#: src/po-lex.c:420 +msgid "end-of-file within string" +msgstr "einde-bestand-teken in string" + +#: src/xget-lex.c:150 +msgid "standard input" +msgstr "standaard invoer" + +#: src/xget-lex.c:892 +#, c-format +msgid "%s:%d: warning: unterminated character constant" +msgstr "%s:%d: let op: niet getermineerde karakter konstante" + +#: src/xget-lex.c:914 +#, c-format +msgid "%s:%d: warning: unterminated string literal" +msgstr "%s:%d: let op: niet getermineerde string literal" + +#: src/xgettext.c:386 +msgid "--join-existing cannot be used when output is written to stdout" +msgstr "" +"--join-existing kan niet gebruikt worden indien uitvoer naar " +"standaarduitvoer\n" +"wordt geschreven" + +#: src/xgettext.c:501 +#, c-format +msgid "warning: file `%s' extension `%s' is unknown; will try C" +msgstr "let op: bestand `%s' extensie `%s' is onbekend; ga C proberen" + +#: src/xgettext.c:537 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Extract translatable string from given input files.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --extract-all extract all strings\n" +" -c, --add-comments[=TAG] place comment block with TAG (or those\n" +" preceding keyword lines) in output file\n" +" -C, --c++ shorthand for --language=C++\n" +" --debug more detailed formatstring recognision result\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" --foreign-user omit FSF copyright in output for foreign user\n" +" -F, --sort-by-file sort output by file location\n" +msgstr "" +"Gebruik: %s [OPTIE] INVOERBESTAND ...\n" +"Verplichte argument bij lange opties zijn ook verplicht bij korte opties.\n" +" -a, --extract-all extraheer alle strings\n" +" -c, --add-comments[=TAG] plaats een kommentaar blok met TAG (of deze\n" +" voorafgaande sleutelwoord regels) in uitvoer\n" +" -C, --c++ herken C++ stijl kommentaar\n" +" --debug meer gedetaileerde formatstring resultaat\n" +" -d, --default-domain=NAAM gebruik NAAM.po voor uitvoer\n" +" (in plaats van messages.po)\n" +" -D, --directory=DIRECTORY zoek invoerbestanden ook in DIRECTORY\n" +" -e, --no-escape gebruik geen C escapes in uitvoer (standaard)\n" +" -E, --escape gebruik C escapes in uitvoer, geen extended\n" +" karakters\n" +" -f, --files-from=BESTAND haal lijst van invoerbestand uit BESTAND\n" +" --force-po maak altijd een (eventueel leeg) PO bestand\n" +" --foreign-user laat FSF kopierecht weg voor vreemde gebruiker\n" +" -F, --sort-by-file sorteer uitvoer bij bestandslokatie\n" + +#: src/xgettext.c:557 +#, c-format, no-wrap +msgid "" +" -h, --help display this help and exit\n" +" -i, --indent write the .po file using indented style\n" +" -j, --join-existing join messages with existing file\n" +" -k, --keyword[=WORD] additonal keyword to be looked for (without\n" +" WORD means not to use default keywords)\n" +" -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n" +" -L, --language=NAME recognise the specified language (C, C++, PO),\n" +" otherwise is guessed from file extension\n" +" -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n" +" -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n" +" --no-location do not write '#: filename:line' lines\n" +msgstr "" +" -h, --help toon hulp-tekst en bekindig programma\n" +" -i, --indent indenteer uitvoer\n" +" -j, --join-existing voeg melding same met bestaand bestand\n" +" -k, --keyword[=WOORD] additioneel sleutelwoord om naar te zoeken\n" +" (WOORD = \"\": negeer standaard sleutelwoorden)\n" +" -l, --string-limit=NUMMER string lengte limiet is NUMMER i.p.v. %u\n" +" -L, --language=NAAM herken de gespecificeerde TAAL (C, C++, PO)\n" +" -m, --msgstr-prefix[=STRING] gebruik STRING of \"\" als voorvoegsel voor\n" +" msgstr ingangen\n" +" -M, --msgstr-suffix[=STRING] gebruik STRING of \"\" als achtervoegsel voor\n" +" msgstr ingangen\n" +" --no-location geen '#: filename:line' regels\n" + +#: src/xgettext.c:571 +#, no-wrap +msgid "" +" -n, --add-location generate '#: filename:line' lines (default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory DIR\n" +" -s, --sort-output generate sorted output and remove duplicates\n" +" --strict write out strict Uniforum conforming .po file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -x, --exclude-file=FILE entries from FILE are not extracted\n" +"\n" +"If INPUTFILE is -, standard input is read.\n" +msgstr "" +" -n, --add-location voeg '#: filename:line' regels toe (standaard)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=BESTAND schrijf uitvoer naar gespecificeerd bestand\n" +" -p, --output-dir=DIR plaats uitvoerbestanden in directory DIR\n" +" -s, --sort-output sorteer uitvoer en verwijder dubbelen\n" +" --strict uitvoer volgens strikte Uniforum stijl\n" +" -T, --trigraphs accepteer ANSI C trigraphs als invoer\n" +" -V, --version toon hulp-tekst en bekindig programma\n" +" -w, --width=NUMMER stel pagina uitvoer breedte in\n" +" -x, --exclude-file=BESTAND ingangen van BESTAND worden niet gekxtraheerd\n" +"\n" +"Als INVOERBESTAND - is, lees standaardinvoer.\n" + +#: src/xgettext.c:1344 +#, c-format +msgid "language `%s' unknown" +msgstr "taal `%s' onbekend" + +#~ msgid "Report bugs to <[email protected]>.\n" +#~ msgstr "Meld fouten via <[email protected]>.\n" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/no.gmo b/debian/gettext-kde/gettext-kde-0.10.35/po/no.gmo Binary files differnew file mode 100644 index 00000000..b4358721 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/no.gmo diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/no.po b/debian/gettext-kde/gettext-kde-0.10.35/po/no.po new file mode 100644 index 00000000..8542c6d9 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/no.po @@ -0,0 +1,801 @@ +# Norwegian messages for GNU gettext. (bokm�l dialect) +# Copyright (C) 1996 Free Software Foundation, Inc. +# Karl Anders �ygard <[email protected]>, 1996. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU gettext 0.10.12\n" +"POT-Creation-Date: 1998-04-30 22:50-0700\n" +"PO-Revision-Date: 1996-05-11 10:24 -0400\n" +"Last-Translator: Karl Anders �ygard <[email protected]>\n" +"Language-Team: Norwegian-bokm�l <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/error.c:103 +msgid "Unknown system error" +msgstr "Ukjent systemfeil" + +#: lib/getopt.c:680 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: flagg �%s� er flertydig\n" + +#: lib/getopt.c:704 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: flagg �--%s� tar ikke argumenter\n" + +#: lib/getopt.c:709 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: flagg �%c%s� tar ikke argumenter\n" + +#: lib/getopt.c:726 lib/getopt.c:899 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: flagg �%s� beh�ver et argument\n" + +#. --option +#: lib/getopt.c:755 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: ukjent flagg �--%s�\n" + +#. +option or -option +#: lib/getopt.c:759 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: ukjent flagg �%c%s�\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:785 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: ulovlig flagg -- %c\n" + +#: lib/getopt.c:788 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: ugyldig flagg -- %c\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:818 lib/getopt.c:948 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: flagg beh�ver et argument -- %c\n" + +#: lib/getopt.c:865 +#, fuzzy, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: flagg �%s� er flertydig\n" + +#: lib/getopt.c:883 +#, fuzzy, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: flagg �--%s� tar ikke argumenter\n" + +#: lib/xmalloc.c:82 +#, fuzzy +msgid "Memory exhausted" +msgstr "minnet oppbrukt" + +#: src/gettextp.c:134 src/msgcmp.c:144 src/msgcomm.c:285 src/msgfmt.c:257 +#: src/msgmerge.c:254 src/msgunfmt.c:175 src/xgettext.c:394 +#, c-format, no-wrap +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" + +#: src/gettextp.c:139 src/msgcmp.c:149 src/msgcomm.c:290 src/msgfmt.c:262 +#: src/msgmerge.c:259 src/msgunfmt.c:180 src/xgettext.c:399 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#: src/gettextp.c:154 +msgid "missing arguments" +msgstr "mangler argument" + +#: src/gettextp.c:164 +msgid "too many arguments" +msgstr "for mange argumenter" + +#: src/gettextp.c:228 src/msgcmp.c:181 src/msgcomm.c:395 src/msgfmt.c:361 +#: src/msgmerge.c:301 src/msgunfmt.c:210 src/xgettext.c:532 +#, fuzzy, c-format +msgid "Try `%s --help' for more information.\n" +msgstr "Pr�v �%s --help� for mer informasjon\n" + +#: src/gettextp.c:233 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n" +" -e enable expansion of some escape sequences\n" +" -E (ignored for compatibility)\n" +" -h, --help display this help and exit\n" +" -n suppress trailing newline\n" +" -V, --version display version information and exit\n" +" [TEXTDOMAIN] MSGID retrieve translated message corresponding\n" +" to MSGID from TEXTDOMAIN\n" +msgstr "" +"Bruk: %s [FLAGG] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN hent oversatte meldinger fra TEXTDOMAIN\n" +" -e sl� p� ekspandering av noen escape-sekvenser\n" +" -E (tillatt av kompatibilitetshensyn)\n" +" -h, --help vis denne hjelpeteksten og avslutt\n" +" -n undertrykk etterf�lgende linjeskift\n" +" -v, --version vis programversjon og avslutt\n" +" [TEXTDOMAIN] MSGID hent oversatt melding som stemmer overens med MSGID\n" +" fra TEXTDOMAIN\n" + +#: src/gettextp.c:245 +#, c-format, no-wrap +msgid "" +"\n" +"If the TEXTDOMAIN parameter is not given, the domain is determined from the\n" +"environment variable TEXTDOMAIN. If the message catalog is not found in the\n" +"regular directory, another location can be specified with the environment\n" +"variable TEXTDOMAINDIR.\n" +"When used with the -s option the program behaves like the `echo' command.\n" +"But it does not simply copy its arguments to stdout. Instead those messages\n" +"found in the selected catalog are translated.\n" +"Standard search directory: %s\n" +msgstr "" +"\n" +"Hvis TEXTDOMAIN-parameteren ikke er gitt, blir domenet valgt fra\n" +"milj�variabelen TEXTDOMAIN. Hvis meldingskatalogen ikke finnes i den\n" +"vanlige filkatalogen, kan en annen filkatalog spesifiseres ved hjelp av\n" +"milj�variabelen TEXTDOMAIN.\n" +"N�r flagget -s blir brukt, oppf�rer programmet seg som kommandoen �echo�.\n" +"Programmet kopierer imidlertid ikke sine argumenter til standard ut. I\n" +"stedet blir meldinger i den valgte katalogen oversatt.\n" +"Standard s�kekatalog er: %s\n" + +#: src/gettextp.c:255 src/msgcmp.c:200 src/msgcomm.c:442 src/msgfmt.c:388 +#: src/msgmerge.c:334 src/msgunfmt.c:234 src/xgettext.c:584 +msgid "Report bugs to <[email protected]>.\n" +msgstr "" + +#: src/message.c:784 +#, c-format +msgid "" +"internationalized messages should not contain the `\\%c' escape sequence" +msgstr "" +"internasjonaliserte meldinger skal ikke inneholde escape-sekvensen �\\%c�" + +#: src/message.c:1115 +#, c-format +msgid "cannot create output file \"%s\"" +msgstr "kan ikke opprette utfilen \"%s\"" + +#: src/message.c:1122 +#, no-c-format +msgid "standard output" +msgstr "standard ut" + +#: src/message.c:1182 +#, c-format +msgid "error while writing \"%s\" file" +msgstr "feil under skriving av filen \"%s\"" + +#: src/msgcmp.c:160 src/msgmerge.c:270 +msgid "no input files given" +msgstr "ingen innfiler spesifisert" + +#: src/msgcmp.c:165 src/msgmerge.c:275 +msgid "exactly 2 input files required" +msgstr "beh�ver n�yaktig to innfiler" + +#: src/msgcmp.c:186 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -h, --help display this help and exit\n" +" -V, --version output version information and exit\n" +"\n" +"Compare two Uniforum style .po files to check that both contain the same\n" +"set of msgid strings. The def.po file is an existing PO file with the\n" +"old translations. The ref.po file is the last created PO file\n" +"(generally by xgettext). This is useful for checking that you have\n" +"translated each and every message in your program. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better diagnostics.\n" +msgstr "" +"Bruk: %s [FLAGG] def.po ref.po\n" +"Obligatoriske argumenter til lange flagg er obligatoriske ogs� til korte flagg.\n" +" -h, --help vis denne hjelpeteksten og avslutt\n" +" -V, --version vis programversjon og avslutt\n" +"\n" +"Sammenligner to Uniforum .po-filer for � sjekke at begge inneholder det\n" +"samme settet msgid-strenger. def.po-filen er en eksisterende PO-fil med de\n" +"gamle oversettelsene. ref.po-filen er den sist genererte PO-filen\n" +"(vanligvis generert med xgettext). Dette er nyttig for � sjekke at du har\n" +"oversatt alle meldinger i programmet. Der en eksakt overensstemmelse ikke\n" +"finnes, blir �fuzzy� sammenligning brukt for � f� bedre diagnostikk.\n" + +#: src/msgcmp.c:259 src/msgmerge.c:714 +msgid "this message is used but not defined..." +msgstr "denne meldingen er brukt, men ikke definert..." + +#: src/msgcmp.c:261 src/msgmerge.c:716 +msgid "...but this definition is similar" +msgstr "... men denne definisjonen ligner" + +#: src/msgcmp.c:267 src/msgmerge.c:743 +#, c-format +msgid "this message is used but not defined in %s" +msgstr "denne meldingen er brukt, men ikke definert i %s" + +#: src/msgcmp.c:281 +msgid "warning: this message is not used" +msgstr "advarsel: denne meldingen er ikke brukt" + +#: src/msgcmp.c:355 src/msgfmt.c:632 src/msgmerge.c:493 src/xgettext.c:1063 +msgid "duplicate message definition" +msgstr "duplisert definisjon av melding" + +#: src/msgcmp.c:356 src/msgfmt.c:633 src/msgmerge.c:494 src/xgettext.c:1064 +msgid "...this is the location of the first definition" +msgstr "... dette er lokasjonen til den f�rste definisjonen" + +#: src/msgcmp.c:396 src/msgmerge.c:542 +#, c-format +msgid "this message has no definition in the \"%s\" domain" +msgstr "denne meldingen har ingen definisjon i \"%s\"-domenet" + +#. We are about to construct the absolute path to the +#. directory for the output files but asprintf failed. +#: src/msgcomm.c:238 src/xgettext.c:340 src/xgettext.c:1258 +msgid "while preparing output" +msgstr "under klargj�ring av utdata" + +#: src/msgcomm.c:273 src/msgcomm.c:277 src/xgettext.c:378 src/xgettext.c:382 +#, c-format +msgid "%s and %s are mutually exclusive" +msgstr "%s og %s utelukker hverandre" + +#: src/msgcomm.c:341 +msgid "at least two files must be specified" +msgstr "" + +#: src/msgcomm.c:360 +#, c-format +msgid "impossible selection criteria specified (%d < n < %d)" +msgstr "" + +#: src/msgcomm.c:400 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" -F, --sort-by-file sort output by file location\n" +" -h, --help display this help and exit\n" +msgstr "" +"Bruk: %s [FLAGG] INNFIL ...\n" +"Obligatoriske argumenter til lange flagg er obligatoriske ogs� til korte flagg.\n" +" -a, --extract-all ekstrah�r alle strenger\n" +" -c, --add-comments[=TAG] lagre kommentarblokker med TAG (eller\n" +" kommentarer i linjer som kommer foran\n" +" n�kkelord) i utfilen\n" +" -C, --c++ kjenn igjen C++-kommentarer\n" +" --debug mer detaljert resultat fra igjenkjenning av\n" +" formatstreng\n" +" -d, --default-domain=NAVN lagre utdata i NAVN.po (i stedet for\n" +" messages.po)\n" +" -D, --directory=FILKATALOG skift til FILKATALOG f�r prosessering\n" +" -e, --no-escape ikke bruk C-escapekoder i utdata (forvalgt)\n" +" -E, --escape bruk C-escapekoder i utdata, ingen utvidede tegn\n" +" -f, --files-from=FIL hent liste av innfiler fra FIL\n" +" --force-po skriv PO-fil selv om den vil bli tom\n" +" -F, --sort-by-file sorter utdata etter fil-lokasjon\n" + +#: src/msgcomm.c:412 +#, fuzzy +msgid "" +" -i, --indent write the .po file using indented style\n" +" --no-location do not write '#: filename:line' lines\n" +" -n, --add-location generate '#: filename:line' lines " +"(default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory " +"DIR\n" +" -s, --sort-output generate sorted output and remove " +"duplicates\n" +" --strict write out strict Uniforum conforming .po " +"file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -u, --unique shorthand for --less-than=2, requests\n" +" that only unique messages be printed\n" +msgstr "" +" -n, --add-location lag '#: filenavn:linje'-linjer (forvalgt)\n" +" --omit-header ikke lag startseksjon med �msgid \"\"�\n" +" -p, --output-dir=KAT plass�r utfiler i filkatalogen KAT\n" +" -s, --sort-output sort�r utdata og ta bort duplikater\n" +" --strict lag strengt Uniforum-konform .po-fil\n" +" -T, --trigraphs forst� ANSI C trigraphs i inndata\n" +" -V, --version vis programversjon og avslutt\n" +" -w, --width=NUMMER sett sidest�rrelse for utdata\n" +" -x, --exclude-file=FIL innslag fra FIL blir ikke ekstrahert\n" +"\n" +"Dersom INNFIL er -, vil det bli lest fra standard inn.\n" + +#: src/msgcomm.c:425 +msgid "" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -<, --less-than=NUMBER print messages with less than this many\n" +" definitions, defaults to infinite if not\n" +" set\n" +" ->, --more-than=NUMBER print messages with more than this many\n" +" definitions, defaults to 1 if not set\n" +"\n" +"Find messages which are common to two or more of the specified PO files.\n" +"By using the --more-than option, greater commonality may be requested\n" +"before messages are printed. Conversely, the --less-than option may be\n" +"used to specify less commonality before messages are printed (i.e.\n" +"--less-than=2 will only print the unique messages). Translations,\n" +"comments and extract comments will be preserved, but only from the first\n" +"PO file to define them. File positions from all PO files will be\n" +"preserved.\n" +msgstr "" + +#: src/msgcomm.c:476 src/msgunfmt.c:357 src/po-lex.c:74 src/xget-lex.c:159 +#: src/xget-lex.c:174 src/xget-lex.c:191 src/xgettext.c:618 +#, c-format +msgid "error while opening \"%s\" for reading" +msgstr "feil under �pning av �%s� for lesing" + +#: src/msgcomm.c:557 src/xgettext.c:660 src/xgettext.c:970 +msgid "this file may not contain domain directives" +msgstr "denne filen kan ikke inneholde domene-n�kkelord" + +#: src/msgfmt.c:273 src/xgettext.c:410 +msgid "no input file given" +msgstr "ingen innfil spesifisert" + +#: src/msgfmt.c:321 +#, c-format +msgid "error while opening \"%s\" for writing" +msgstr "feil under �pning av \"%s\" for skriving" + +#: src/msgfmt.c:343 +#, c-format +msgid "%d translated messages" +msgstr "%d oversatte meldinger" + +#: src/msgfmt.c:345 +#, c-format +msgid ", %d fuzzy translations" +msgstr ", %d antatte oversettelser" + +#: src/msgfmt.c:347 +#, c-format +msgid ", %d untranslated messages" +msgstr ", %d uoversatte meldinger" + +#: src/msgfmt.c:366 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] filename.po ...\n" +"Generate binary message catalog from textual translation description.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n" +" -c, --check perform language dependent checks on strings\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -f, --use-fuzzy use fuzzy entries in output\n" +" -h, --help display this help and exit\n" +" --no-hash binary file will not include the hash table\n" +" -o, --output-file=FILE specify output file name as FILE\n" +" --statistics print statistics about translations\n" +" --strict enable strict Uniforum mode\n" +" -v, --verbose list input file anomalies\n" +" -V, --version output version information and exit\n" +"\n" +"Giving the -v option more than once increases the verbosity level.\n" +"\n" +"If input file is -, standard input is read. If output file is -,\n" +"output is written to standard output.\n" +msgstr "" +"Bruk: %s [FLAGG] filnavn.po ...\n" +"Obligatoriske argumenter til lange flagg er obligatoriske ogs� til korte flagg.\n" +" -a, --alignment=ANTALL just�r strenger til ANTALL bytes (forvalgt: %d)\n" +" -c, --check gj�r spr�kavhengige tester p� strengene\n" +" -D, --directory=FILKATALOG legg FILKATALOG til kataloger � s�ke i\n" +" -f, --use-fuzzy bruk antatte linjer i utdata\n" +" -h, --help vis denne hjelpeteksten og avslutt\n" +" --no-hash bin�rfil skal ikke inneholde hash-tabell\n" +" -o, --output-file=FILNAVN sett utfil til FILNAVN\n" +" --statistics\n" +" --strict lag strengt Uniforum-konform .po-fil\n" +" -v, --verbose list alle avvik i innfil\n" +" -V, --version vis programversjon og avslutt\n" +"\n" +"Dersom flagget -v blir gitt flere ganger, gis mer fyldige meldinger.\n" +"\n" +"Hvis innfil er -, vil inndata bli lest fra standard inn. Dersom utfil er -,\n" +"vil utdata bli skrevet til standard ut.\n" + +#: src/msgfmt.c:409 +msgid "while creating hash table" +msgstr "mens hash-tabellen ble laget" + +#: src/msgfmt.c:451 +#, fuzzy, c-format +msgid "%s: warning: no header entry found" +msgstr "advarsel: intet filhode funnet" + +#: src/msgfmt.c:473 +#, c-format +msgid "domain name \"%s\" not suitable as file name" +msgstr "domenenavnet \"%s\" passer ikke som filnavn" + +#: src/msgfmt.c:478 +#, c-format +msgid "domain name \"%s\" not suitable as file name: will use prefix" +msgstr "domenenavnet \"%s\" passer ikke som filnavn: bruker prefiks" + +#. We don't change the exit status here because this is really +#. only an information. +#: src/msgfmt.c:491 +#, c-format +msgid "`domain %s' directive ignored" +msgstr "n�kkelord �domain %s� ignorert" + +#: src/msgfmt.c:519 +msgid "empty `msgstr' entry ignored" +msgstr "tom �msgstr�-linje ignorert" + +#: src/msgfmt.c:520 +msgid "fuzzy `msgstr' entry ignored" +msgstr "antatt �msgstr�-linje ignorert" + +#: src/msgfmt.c:563 +#, c-format +msgid "headerfield `%s' missing in header" +msgstr "filhodefelt �%s� mangler i filhode" + +#: src/msgfmt.c:566 +#, c-format +msgid "header field `%s' should start at beginning of line" +msgstr "filhodefelt �%s� skulle ha startet ved begynnelsen av linjen" + +#: src/msgfmt.c:576 +msgid "some header fields still have the initial default value" +msgstr "noen filhodefelt har fremdeles sin initielle verdi" + +#: src/msgfmt.c:587 +#, c-format +msgid "field `%s' still has initial default value" +msgstr "feltet �%s� har fremdeles sin forvalgte verdi" + +#: src/msgfmt.c:672 +#, fuzzy, c-format +msgid "%s: warning: source file contains fuzzy translation" +msgstr "ADVARSEL: kildefil har antatte oversettelser" + +#: src/msgfmt.c:874 +#, fuzzy +msgid "`msgid' and `msgstr' entries do not both begin with '\\n'" +msgstr "�msgid�- og �msgstr�-verdiene begynner ikke begge med '\\n'" + +#: src/msgfmt.c:882 +#, fuzzy +msgid "`msgid' and `msgstr' entries do not both end with '\\n'" +msgstr "�msgid�- og �msgstr�-verdiene slutter ikke begge med '\\n'" + +#: src/msgfmt.c:896 +msgid "number of format specifications in `msgid' and `msgstr' does not match" +msgstr "" +"antall format-spesifiseringer i �msgid� og �msgstr� stemmer ikke overens" + +#: src/msgfmt.c:913 +#, c-format +msgid "format specifications for argument %u are not the same" +msgstr "format-spesifiseringene for argument %u er ulike" + +#: src/msgmerge.c:306 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent indented output style\n" +" -o, --output-file=FILE result will be written to FILE\n" +" --no-location suppress '#: filename:line' lines\n" +" --add-location preserve '#: filename:line' lines (default)\n" +" --strict strict Uniforum output style\n" +" -v, --verbose increase verbosity level\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Bruk: %s [FLAGG] INNFIL ...\n" +"Obligatoriske argumenter til lange flagg er obligatoriske ogs� til korte flagg.\n" +" -D, --directory=FILKATALOG legg FILKATALOG til kataloger � s�ke i\n" +" -e, --no-escape ikke bruk C-escapekoder i utdata (forvalgt)\n" +" -E, --escape bruk C-escapekoder i utdata, ingen utvidede tegn\n" +" -h, --help vis denne hjelpeteksten og avslutt\n" +" -i, --indent indentert utdata\n" +" -o, --output-file=FIL resultat blir skrevet til FIL\n" +" --strict lag strengt Uniforum-konformt utdata\n" +" -v, --verbose gi mer fyldige meldinger\n" +" -V, --version vis programversjon og avslutt\n" +" -w, --width=NUMMER sett sidest�rrelse for utdata\n" + +#: src/msgmerge.c:324 +#, no-wrap +msgid "" +"\n" +"Merges two Uniforum style .po files together. The def.po file is an\n" +"existing PO file with the old translations which will be taken over to\n" +"the newly created file as long as they still match; comments will be\n" +"preserved, but extract comments and file positions will be discarded.\n" +"The ref.po file is the last created PO file (generally by xgettext), any\n" +"translations or comments in the file will be discarded, however dot\n" +"comments and file positions will be preserved. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better results. The\n" +"results are written to stdout unless an output file is specified.\n" +msgstr "" +"\n" +"Fletter sammen to Uniforum .po-filer. def.po-filen er en eksisterende\n" +"PO-fil med gamle oversettelser, som vil bli overf�rt til den nye filen\n" +"dersom de fremdeles stemmer. Kommentarer blir tatt med, men kommentarer om\n" +"selve ekstraheringen og fil-posisjoner blir slettet. ref.po-filen er den\n" +"sist genererte PO-filen (vanligvis generert med xgettext). Oversettelser\n" +"eller kommentarer i denne filen blir slettet, men punktum-kommentarer og\n" +"fil-posisjoner blir ivaretatt. Der det ikke lar seg gj�re � finne en\n" +"eksakt overensstemmelse, blir �fuzzy� sammenligning brukt for � f� bedre\n" +"resultater. Resultatet blir skrevet til standard ut, med mindre en utfil\n" +"er spesifisert.\n" + +#: src/msgmerge.c:772 +#, c-format +msgid "" +"%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete " +"%d.\n" +msgstr "" +"%sLeste %d gamle + %d referanser, flettet %d, antok %d, mangler %d,\n" +"foreldete %d.\n" + +#: src/msgmerge.c:778 +msgid " done.\n" +msgstr " ferdig.\n" + +#: src/msgunfmt.c:215 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [FILE]...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent write indented output style\n" +" -o, --output-file=FILE write output into FILE instead of standard output\n" +" --strict write strict uniforum style\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Bruk: %s [FLAGG] INNFIL ...\n" +"Obligatoriske argumenter til lange flagg er obligatoriske ogs� til korte flagg.\n" +" -e, --no-escape ikke bruk C-escapekoder i utdata (forvalgt)\n" +" -E, --escape bruk C-escapekoder i utdata, ingen utvidede tegn\n" +" -h, --help vis denne hjelpeteksten og avslutt\n" +" -i, --indent indentert utdata\n" +" -o, --output-file=FIL resultat blir skrevet til FIL i stedet for\n" +" standard ut\n" +" --strict lag strengt Uniforum-konformt utdata\n" +" -V, --version vis programversjon og avslutt\n" +" -w, --width=NUMMER sett sidest�rrelse for utdata\n" + +#: src/msgunfmt.c:229 +#, no-wrap +msgid "" +"\n" +"Convert binary .mo files to Uniforum style .po files.\n" +"Both little-endian and big-endian .mo files are handled.\n" +"If no input file is given or it is -, standard input is read.\n" +"By default the output is written to standard output.\n" +msgstr "" +"\n" +"Konverter bin�re .mo-filer til Uniforum .po-filer.\n" +"B�de �little-endian� og �big-endian� .mo filer blir h�ndtert.\n" +"Dersom innfil er -, blir standard inn lest.\n" +"Dersom intet annet er spesifisert, blir det skrevet til standard ut.\n" + +#: src/msgunfmt.c:266 src/msgunfmt.c:330 src/po-lex.c:185 src/xget-lex.c:254 +#, c-format +msgid "error while reading \"%s\"" +msgstr "feil under lesing av \"%s\"" + +#: src/msgunfmt.c:267 src/msgunfmt.c:331 +#, c-format +msgid "file \"%s\" truncated" +msgstr "filen \"%s\" er avkuttet" + +#: src/msgunfmt.c:298 +#, c-format +msgid "seek \"%s\" offset %ld failed" +msgstr "�seek� \"%s\" posisjon %ld feilet" + +#: src/msgunfmt.c:373 +#, c-format +msgid "file \"%s\" is not in GNU .mo format" +msgstr "filen \"%s\" er ikke i GNU .mo-format" + +#: ../../src/po-gram.y:83 +msgid "missing `msgstr' section" +msgstr "mangler �msgstr�-seksjon" + +#: src/po-lex.c:84 +#, c-format +msgid "found %d fatal errors" +msgstr "fant %d fatale feil" + +#: src/po-lex.c:129 src/po-lex.c:168 +msgid "too many errors, aborting" +msgstr "for mange feil, avslutter" + +#: src/po-lex.c:241 +#, c-format +msgid "keyword \"%s\" unknown" +msgstr "n�kkelord \"%s\" ukjent" + +#: src/po-lex.c:332 +msgid "illegal control sequence" +msgstr "ulovlig kontrollsekvens" + +#: src/po-lex.c:415 +msgid "end-of-line within string" +msgstr "slutt-p�-linje inne i streng" + +#: src/po-lex.c:420 +msgid "end-of-file within string" +msgstr "slutt-p�-fil inne i streng" + +#: src/xget-lex.c:150 +msgid "standard input" +msgstr "standard inn" + +#: src/xget-lex.c:892 +#, c-format +msgid "%s:%d: warning: unterminated character constant" +msgstr "" + +#: src/xget-lex.c:914 +#, c-format +msgid "%s:%d: warning: unterminated string literal" +msgstr "" + +#: src/xgettext.c:386 +msgid "--join-existing cannot be used when output is written to stdout" +msgstr "" +"--join-existing kan ikke brukes n�r utdata blir skrevet til standard ut" + +#: src/xgettext.c:501 +#, fuzzy, c-format +msgid "warning: file `%s' extension `%s' is unknown; will try C" +msgstr "advarsel: typen til fil �%s� med ekstensjon �%s� er ukjent, fors�ker C" + +#: src/xgettext.c:537 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Extract translatable string from given input files.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --extract-all extract all strings\n" +" -c, --add-comments[=TAG] place comment block with TAG (or those\n" +" preceding keyword lines) in output file\n" +" -C, --c++ shorthand for --language=C++\n" +" --debug more detailed formatstring recognision result\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" --foreign-user omit FSF copyright in output for foreign user\n" +" -F, --sort-by-file sort output by file location\n" +msgstr "" +"Bruk: %s [FLAGG] INNFIL ...\n" +"Obligatoriske argumenter til lange flagg er obligatoriske ogs� til korte flagg.\n" +" -a, --extract-all ekstrah�r alle strenger\n" +" -c, --add-comments[=TAG] lagre kommentarblokker med TAG (eller\n" +" kommentarer i linjer som kommer foran\n" +" n�kkelord) i utfilen\n" +" -C, --c++ kjenn igjen C++-kommentarer\n" +" --debug mer detaljert resultat fra igjenkjenning av\n" +" formatstreng\n" +" -d, --default-domain=NAVN lagre utdata i NAVN.po (i stedet for\n" +" messages.po)\n" +" -D, --directory=FILKATALOG skift til FILKATALOG f�r prosessering\n" +" -e, --no-escape ikke bruk C-escapekoder i utdata (forvalgt)\n" +" -E, --escape bruk C-escapekoder i utdata, ingen utvidede tegn\n" +" -f, --files-from=FIL hent liste av innfiler fra FIL\n" +" --force-po skriv PO-fil selv om den vil bli tom\n" +" -F, --sort-by-file sorter utdata etter fil-lokasjon\n" + +#: src/xgettext.c:557 +#, fuzzy, c-format, no-wrap +msgid "" +" -h, --help display this help and exit\n" +" -i, --indent write the .po file using indented style\n" +" -j, --join-existing join messages with existing file\n" +" -k, --keyword[=WORD] additonal keyword to be looked for (without\n" +" WORD means not to use default keywords)\n" +" -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n" +" -L, --language=NAME recognise the specified language (C, C++, PO),\n" +" otherwise is guessed from file extension\n" +" -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n" +" -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n" +" --no-location do not write '#: filename:line' lines\n" +msgstr "" +" -h, --help vis denne hjelpeteksten og avslutt\n" +" -i, --indent skriv .po-filen med indentering\n" +" -j, --join-existing flett sammen meldinger med eksisterende fil\n" +" -k, --keyword[=ORD] se ogs� etter n�kkelordet ORD (mangler ORD,\n" +" skal heller ikke vanlige n�kkelord brukes)\n" +" -l, --string-limit=NUMMER sett st�rste streng-lengde til NUMMER\n" +" i stedet for %u\n" +" -m, --msgstr-prefix[=STRENG] bruk STRENG eller \"\" som prefiks for\n" +" msgstr-verdier\n" +" -M, --msgstr-suffix[=STRENG] bruk STRENG eller \"\" som suffiks for\n" +" msgstr-verdier\n" +" --no-location ikke lag '#: filnavn:linje'-linjer\n" + +#: src/xgettext.c:571 +#, fuzzy, no-wrap +msgid "" +" -n, --add-location generate '#: filename:line' lines (default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory DIR\n" +" -s, --sort-output generate sorted output and remove duplicates\n" +" --strict write out strict Uniforum conforming .po file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -x, --exclude-file=FILE entries from FILE are not extracted\n" +"\n" +"If INPUTFILE is -, standard input is read.\n" +msgstr "" +" -n, --add-location lag '#: filenavn:linje'-linjer (forvalgt)\n" +" --omit-header ikke lag startseksjon med �msgid \"\"�\n" +" -p, --output-dir=KAT plass�r utfiler i filkatalogen KAT\n" +" -s, --sort-output sort�r utdata og ta bort duplikater\n" +" --strict lag strengt Uniforum-konform .po-fil\n" +" -T, --trigraphs forst� ANSI C trigraphs i inndata\n" +" -V, --version vis programversjon og avslutt\n" +" -w, --width=NUMMER sett sidest�rrelse for utdata\n" +" -x, --exclude-file=FIL innslag fra FIL blir ikke ekstrahert\n" +"\n" +"Dersom INNFIL er -, vil det bli lest fra standard inn.\n" + +#: src/xgettext.c:1344 +#, c-format +msgid "language `%s' unknown" +msgstr "" + +#~ msgid "this is the location of the first definition" +#~ msgstr "den f�rste definisjonen finnes her" + +#~ msgid "duplicate message ID" +#~ msgstr "duplisert meldings-id" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/[email protected] b/debian/gettext-kde/gettext-kde-0.10.35/po/[email protected] Binary files differnew file mode 100644 index 00000000..e2223525 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/[email protected] diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/[email protected] b/debian/gettext-kde/gettext-kde-0.10.35/po/[email protected] new file mode 100644 index 00000000..0ecaaa15 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/[email protected] @@ -0,0 +1,812 @@ +# Norwegian messages for GNU gettext. (nynorsk dialect) +# Copyright (C) 1996 Free Software Foundation, Inc. +# Karl Anders �ygard <[email protected]>, 1996. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU gettext 0.10\n" +"POT-Creation-Date: 1998-04-30 22:50-0700\n" +"PO-Revision-Date: 1996-03-21 08:46 EST\n" +"Last-Translator: Karl Anders �ygard <[email protected]>\n" +"Language-Team: Norwegian-nynorsk <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/error.c:103 +msgid "Unknown system error" +msgstr "" + +#: lib/getopt.c:680 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: flagg �%s� er fleirtydig\n" + +#: lib/getopt.c:704 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: flagg �--%s� tek ikkje argument\n" + +#: lib/getopt.c:709 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: flagg �%c%s� tek ikkje argument\n" + +#: lib/getopt.c:726 lib/getopt.c:899 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: flagg �%s� treng eit argument\n" + +#. --option +#: lib/getopt.c:755 +#, fuzzy, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: ulovleg flagg -- %c\n" + +#. +option or -option +#: lib/getopt.c:759 +#, fuzzy, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: ulovleg flagg -- %c\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:785 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: ulovleg flagg -- %c\n" + +#: lib/getopt.c:788 +#, fuzzy, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: ulovleg flagg -- %c\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:818 lib/getopt.c:948 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: flagg treng eit argument -- %c\n" + +#: lib/getopt.c:865 +#, fuzzy, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: flagg �%s� er fleirtydig\n" + +#: lib/getopt.c:883 +#, fuzzy, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: flagg �--%s� tek ikkje argument\n" + +#: lib/xmalloc.c:82 +msgid "Memory exhausted" +msgstr "" + +#: src/gettextp.c:134 src/msgcmp.c:144 src/msgcomm.c:285 src/msgfmt.c:257 +#: src/msgmerge.c:254 src/msgunfmt.c:175 src/xgettext.c:394 +#, c-format, no-wrap +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" + +#: src/gettextp.c:139 src/msgcmp.c:149 src/msgcomm.c:290 src/msgfmt.c:262 +#: src/msgmerge.c:259 src/msgunfmt.c:180 src/xgettext.c:399 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#: src/gettextp.c:154 +msgid "missing arguments" +msgstr "manglar argument" + +#: src/gettextp.c:164 +#, fuzzy +msgid "too many arguments" +msgstr "manglar argument" + +#: src/gettextp.c:228 src/msgcmp.c:181 src/msgcomm.c:395 src/msgfmt.c:361 +#: src/msgmerge.c:301 src/msgunfmt.c:210 src/xgettext.c:532 +#, fuzzy, c-format +msgid "Try `%s --help' for more information.\n" +msgstr "Pr�v �%s --help� for meir informasjon\n" + +#: src/gettextp.c:233 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n" +" -e enable expansion of some escape sequences\n" +" -E (ignored for compatibility)\n" +" -h, --help display this help and exit\n" +" -n suppress trailing newline\n" +" -V, --version display version information and exit\n" +" [TEXTDOMAIN] MSGID retrieve translated message corresponding\n" +" to MSGID from TEXTDOMAIN\n" +msgstr "" +"Bruk: %s [FLAGG] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN hent oversette meldingar fr� TEXTDOMAIN\n" +" -e sl� p� ekspansjon av nokre escape-sekvensar\n" +" -E (tillete av kompatibilitetsomsyn)\n" +" -h, --help vis denne hjelpeteksta og avslutt\n" +" -n undertrykk etterf�lgjande linjeskift\n" +" -v, --version vis programversjon og avslutt\n" +" [TEXTDOMAIN] MSGID hent oversett melding som stemmer overeins med\n" +" MSGID fr� TEXTDOMAIN\n" + +#: src/gettextp.c:245 +#, c-format, no-wrap +msgid "" +"\n" +"If the TEXTDOMAIN parameter is not given, the domain is determined from the\n" +"environment variable TEXTDOMAIN. If the message catalog is not found in the\n" +"regular directory, another location can be specified with the environment\n" +"variable TEXTDOMAINDIR.\n" +"When used with the -s option the program behaves like the `echo' command.\n" +"But it does not simply copy its arguments to stdout. Instead those messages\n" +"found in the selected catalog are translated.\n" +"Standard search directory: %s\n" +msgstr "" +"\n" +"Dersom TEXTDOMAIN-parameteren ikkje er gjeven, vert domenet valgt fr�\n" +"milj�-variabelen TEXTDOMAIN. Dersom meldingskatalogen ikkje finst i den\n" +"vanlege filkatalogen, kan ein annan filkatalog spesifiserast ved hjelp av\n" +"milj�-variabelen TEXTDOMAIN.\n" +"N�r flagget -s vert brukt, oppf�rer programmet seg som kommandoen �echo�,\n" +"men gjer ikkje ein enkel kopiering av argumenta sine til standard ut. I\n" +"staden vert meldingar som er funne i den valgte katalogen oversatt.\n" +"Standard s�kekatalog er: %s\n" + +#: src/gettextp.c:255 src/msgcmp.c:200 src/msgcomm.c:442 src/msgfmt.c:388 +#: src/msgmerge.c:334 src/msgunfmt.c:234 src/xgettext.c:584 +msgid "Report bugs to <[email protected]>.\n" +msgstr "" + +#: src/message.c:784 +#, c-format +msgid "" +"internationalized messages should not contain the `\\%c' escape sequence" +msgstr "" +"internasjonaliserte meldingar skal ikkje innehalde escape-sekvensen �\\%c�" + +#: src/message.c:1115 +#, c-format +msgid "cannot create output file \"%s\"" +msgstr "kan ikkje skape utfila \"%s\"" + +#: src/message.c:1122 +#, no-c-format +msgid "standard output" +msgstr "" + +#: src/message.c:1182 +#, c-format +msgid "error while writing \"%s\" file" +msgstr "feil under skriving av fila \"%s\"" + +#: src/msgcmp.c:160 src/msgmerge.c:270 +#, fuzzy +msgid "no input files given" +msgstr "inga innfil spesifisert" + +#: src/msgcmp.c:165 src/msgmerge.c:275 +msgid "exactly 2 input files required" +msgstr "treng n�yaktig to innfiler" + +#: src/msgcmp.c:186 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -h, --help display this help and exit\n" +" -V, --version output version information and exit\n" +"\n" +"Compare two Uniforum style .po files to check that both contain the same\n" +"set of msgid strings. The def.po file is an existing PO file with the\n" +"old translations. The ref.po file is the last created PO file\n" +"(generally by xgettext). This is useful for checking that you have\n" +"translated each and every message in your program. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better diagnostics.\n" +msgstr "" +"Bruk: %s [FLAGG] def.po ref.po\n" +"Obligatoriske argumenter til lange flagg er obligatoriske ogs� til korte flagg.\n" +" -h, --help vis denne hjelpeteksta og avslutt\n" +" -V, --version vis programversjon og avslutt\n" +"\n" +"Samanliknar to Uniforum .po-filer for � sjekke at begge inneheld det samme\n" +"settet msgid-strengar. def.po-filen er ein eksisterende PO-fil med dei\n" +"gamle oversetjingane. ref.po-filen er den sist genererte PO-fila\n" +"(vanligvis generert med xgettext). Dette er nyttig for � sjekke at du har\n" +"oversett alle meldingar i programmet. Der samsvar ikkje kan finnast, vert\n" +"�fuzzy� samanlikning brukt for � f� betre diagnostikk.\n" + +#: src/msgcmp.c:259 src/msgmerge.c:714 +msgid "this message is used but not defined..." +msgstr "denne meldinga er brukt, men ikkje definert..." + +#: src/msgcmp.c:261 src/msgmerge.c:716 +msgid "...but this definition is similar" +msgstr "... men denne definisjonen liknar" + +#: src/msgcmp.c:267 src/msgmerge.c:743 +#, c-format +msgid "this message is used but not defined in %s" +msgstr "denne meldinga er brukt, men ikkje definert i %s" + +#: src/msgcmp.c:281 +msgid "warning: this message is not used" +msgstr "advarsel: denne meldinga er ikkje brukt" + +#: src/msgcmp.c:355 src/msgfmt.c:632 src/msgmerge.c:493 src/xgettext.c:1063 +msgid "duplicate message definition" +msgstr "" + +#: src/msgcmp.c:356 src/msgfmt.c:633 src/msgmerge.c:494 src/xgettext.c:1064 +#, fuzzy +msgid "...this is the location of the first definition" +msgstr "den f�rste definisjonen finst her" + +#: src/msgcmp.c:396 src/msgmerge.c:542 +#, c-format +msgid "this message has no definition in the \"%s\" domain" +msgstr "denne meldinga har ingen definisjon i \"%s\"-domenet" + +#. We are about to construct the absolute path to the +#. directory for the output files but asprintf failed. +#: src/msgcomm.c:238 src/xgettext.c:340 src/xgettext.c:1258 +msgid "while preparing output" +msgstr "under klargjering av utdata" + +#: src/msgcomm.c:273 src/msgcomm.c:277 src/xgettext.c:378 src/xgettext.c:382 +#, c-format +msgid "%s and %s are mutually exclusive" +msgstr "%s og %s utelukker kvarandre" + +#: src/msgcomm.c:341 +#, fuzzy +msgid "at least two files must be specified" +msgstr "n�yaktig to filer m� spesifiserast" + +#: src/msgcomm.c:360 +#, c-format +msgid "impossible selection criteria specified (%d < n < %d)" +msgstr "" + +#: src/msgcomm.c:400 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" -F, --sort-by-file sort output by file location\n" +" -h, --help display this help and exit\n" +msgstr "" +"Bruk: %s [FLAGG] INNFIL ...\n" +"Obligatoriske argumenter til lange flagg er obligatoriske ogs� til korte flagg.\n" +" -a, --extract-all ekstrah�r alle strengar\n" +" -c, --add-comments[=TAG] lagre kommentarblokker med TAG (eller\n" +" kommentarar i linjer som kjem foran\n" +" n�kkelord) i utfila\n" +" -C, --c++ kjenn igjen C++-kommentarar\n" +" -d, --default-domain=NAVN lagre utdata i NAVN.po (i staden for\n" +" messages.po)\n" +" -D, --directory=FILKATALOG skift til FILKATALOG f�r prosessering\n" +" -e, --no-escape ikkje bruk C-escapekoder i utdata (forvalgt)\n" +" -E, --escape bruk C-escapekoder i utdata, ingen utvida teikn\n" +" -f, --files-from=FIL hent liste av innfiler fr� FIL\n" +" -F, --sort-by-file sorter utdata etter fil-lokasjon\n" +" -h, --help vis denne hjelpeteksta og avslutt\n" +" -i, --indent lag indentert utdata\n" +" -j, --join-existing flett saman meldingar med eksisterande fil\n" + +#: src/msgcomm.c:412 +#, fuzzy +msgid "" +" -i, --indent write the .po file using indented style\n" +" --no-location do not write '#: filename:line' lines\n" +" -n, --add-location generate '#: filename:line' lines " +"(default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory " +"DIR\n" +" -s, --sort-output generate sorted output and remove " +"duplicates\n" +" --strict write out strict Uniforum conforming .po " +"file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -u, --unique shorthand for --less-than=2, requests\n" +" that only unique messages be printed\n" +msgstr "" +" -p, --output-dir=KAT plass�r utfiler i filkatalogen KAT\n" +" -s, --sort-output sort�r utdata og ta bort duplikat\n" +" --strict lag strengt Uniforum-konform .po-fil\n" +" -T, --trigraphs forst� ANSI C trigraphs i inndata\n" +" -v, --verbose gje fyldige advarslar\n" +" -v, --version vis programversjon og avslutt\n" +" -x, --exclude-file=FIL innslag fr� FIL vert ikkje ekstrahert\n" +"\n" +"Dersom INNFIL er -, vil det verte lese fr� standard inn.\n" + +#: src/msgcomm.c:425 +msgid "" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -<, --less-than=NUMBER print messages with less than this many\n" +" definitions, defaults to infinite if not\n" +" set\n" +" ->, --more-than=NUMBER print messages with more than this many\n" +" definitions, defaults to 1 if not set\n" +"\n" +"Find messages which are common to two or more of the specified PO files.\n" +"By using the --more-than option, greater commonality may be requested\n" +"before messages are printed. Conversely, the --less-than option may be\n" +"used to specify less commonality before messages are printed (i.e.\n" +"--less-than=2 will only print the unique messages). Translations,\n" +"comments and extract comments will be preserved, but only from the first\n" +"PO file to define them. File positions from all PO files will be\n" +"preserved.\n" +msgstr "" + +#: src/msgcomm.c:476 src/msgunfmt.c:357 src/po-lex.c:74 src/xget-lex.c:159 +#: src/xget-lex.c:174 src/xget-lex.c:191 src/xgettext.c:618 +#, fuzzy, c-format +msgid "error while opening \"%s\" for reading" +msgstr "feil under skriving av fila \"%s\"" + +#: src/msgcomm.c:557 src/xgettext.c:660 src/xgettext.c:970 +msgid "this file may not contain domain directives" +msgstr "denne fila kan innehalde domene-n�kkelord" + +#: src/msgfmt.c:273 src/xgettext.c:410 +msgid "no input file given" +msgstr "inga innfil spesifisert" + +#: src/msgfmt.c:321 +#, fuzzy, c-format +msgid "error while opening \"%s\" for writing" +msgstr "feil under skriving av fila \"%s\"" + +#: src/msgfmt.c:343 +#, c-format +msgid "%d translated messages" +msgstr "" + +#: src/msgfmt.c:345 +#, c-format +msgid ", %d fuzzy translations" +msgstr "" + +#: src/msgfmt.c:347 +#, c-format +msgid ", %d untranslated messages" +msgstr "" + +#: src/msgfmt.c:366 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] filename.po ...\n" +"Generate binary message catalog from textual translation description.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n" +" -c, --check perform language dependent checks on strings\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -f, --use-fuzzy use fuzzy entries in output\n" +" -h, --help display this help and exit\n" +" --no-hash binary file will not include the hash table\n" +" -o, --output-file=FILE specify output file name as FILE\n" +" --statistics print statistics about translations\n" +" --strict enable strict Uniforum mode\n" +" -v, --verbose list input file anomalies\n" +" -V, --version output version information and exit\n" +"\n" +"Giving the -v option more than once increases the verbosity level.\n" +"\n" +"If input file is -, standard input is read. If output file is -,\n" +"output is written to standard output.\n" +msgstr "" +"Bruk: %s [FLAGG] filnavn.po ...\n" +"Obligatoriske argumenter til lange flagg er obligatoriske ogs� til korte flagg.\n" +" -a, --alignment=ANTALL just�r strengar til ANTALL bytes (forvalgt: %d)\n" +" -h, --help vis denne hjelpeteksta og avslutt\n" +" --no-hash bin�rfil skal ikkje innehalde hash-tabell\n" +" -o, --output-file=FILNAVN sett utfil til FILNAVN\n" +" --strict lag strengt Uniforum-konform .po-fil\n" +" -v, --verbose list alle avvik i innfil\n" +" -V, --version vis programversjon og avslutt\n" +"\n" +"Dersom innfil er -, vil inndata verte lest fr� standard inn. Dersom utfil\n" +"er -, vil utdata verte skrive til standard ut.\n" + +#: src/msgfmt.c:409 +msgid "while creating hash table" +msgstr "mens hash-tabellen vart laga" + +#: src/msgfmt.c:451 +#, fuzzy, c-format +msgid "%s: warning: no header entry found" +msgstr "advarsel: denne meldinga er ikkje brukt" + +#: src/msgfmt.c:473 +#, c-format +msgid "domain name \"%s\" not suitable as file name" +msgstr "domenenamn \"%s\" passar ikkje som filnavn" + +#: src/msgfmt.c:478 +#, c-format +msgid "domain name \"%s\" not suitable as file name: will use prefix" +msgstr "domenenamnet \"%s\" passar ikkje som filnavn: brukar prefiks" + +#. We don't change the exit status here because this is really +#. only an information. +#: src/msgfmt.c:491 +#, c-format +msgid "`domain %s' directive ignored" +msgstr "" + +#: src/msgfmt.c:519 +msgid "empty `msgstr' entry ignored" +msgstr "" + +#: src/msgfmt.c:520 +msgid "fuzzy `msgstr' entry ignored" +msgstr "" + +#: src/msgfmt.c:563 +#, c-format +msgid "headerfield `%s' missing in header" +msgstr "" + +#: src/msgfmt.c:566 +#, c-format +msgid "header field `%s' should start at beginning of line" +msgstr "" + +#: src/msgfmt.c:576 +msgid "some header fields still have the initial default value" +msgstr "" + +#: src/msgfmt.c:587 +#, c-format +msgid "field `%s' still has initial default value" +msgstr "" + +#: src/msgfmt.c:672 +#, c-format +msgid "%s: warning: source file contains fuzzy translation" +msgstr "" + +#: src/msgfmt.c:874 +#, fuzzy +msgid "`msgid' and `msgstr' entries do not both begin with '\\n'" +msgstr "�msgid�- og �msgstr�-verdiane byrjarr ikkje b�e med '\\n'" + +#: src/msgfmt.c:882 +#, fuzzy +msgid "`msgid' and `msgstr' entries do not both end with '\\n'" +msgstr "�msgid�- og �msgstr�-verdiane sluttar ikkje b�e med '\\n'" + +#: src/msgfmt.c:896 +msgid "number of format specifications in `msgid' and `msgstr' does not match" +msgstr "" +"antall format-spesifiseringar i �msgid� og �msgstr� stemmer ikkje overeins" + +#: src/msgfmt.c:913 +#, c-format +msgid "format specifications for argument %u are not the same" +msgstr "format-spesifiseringane for argument %u er ulike" + +#: src/msgmerge.c:306 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent indented output style\n" +" -o, --output-file=FILE result will be written to FILE\n" +" --no-location suppress '#: filename:line' lines\n" +" --add-location preserve '#: filename:line' lines (default)\n" +" --strict strict Uniforum output style\n" +" -v, --verbose increase verbosity level\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Bruk: %s [FLAGG] INNFIL ...\n" +"Obligatoriske argumenter til lange flagg er obligatoriske ogs� til korte flagg.\n" +" -e, --no-escape ikkje bruk C-escapekoder i utdata (forvalgt)\n" +" -E, --escape bruk C-escapekoder i utdata, ingen utvida teikn\n" +" -h, --help vis denne hjelpeteksta og avslutt\n" +" -i, --indent indentert utdata\n" +" -o, --output-file=FIL resultat vert skrive til FIL\n" +" -S, --strict lag strengt Uniforum-konformt utdata\n" +" -V, --version vis programversjon og avslutt\n" + +#: src/msgmerge.c:324 +#, no-wrap +msgid "" +"\n" +"Merges two Uniforum style .po files together. The def.po file is an\n" +"existing PO file with the old translations which will be taken over to\n" +"the newly created file as long as they still match; comments will be\n" +"preserved, but extract comments and file positions will be discarded.\n" +"The ref.po file is the last created PO file (generally by xgettext), any\n" +"translations or comments in the file will be discarded, however dot\n" +"comments and file positions will be preserved. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better results. The\n" +"results are written to stdout unless an output file is specified.\n" +msgstr "" +"\n" +"Fletter saman to Uniforum .po-filer. def.po-filen er ei eksisterande\n" +"PO-fil med gamle oversetjingar, som vil verte overf�rt til den nye fila\n" +"dersom dei framleis stemmer. Kommentarar vert teke med, men kommentarer om\n" +"sj�lve ekstraheringa og fil-posisjoner vert sletta. ref.po-filen er den\n" +"sist genererte PO-fila (vanlegvis generert med xgettext). Oversetjingar\n" +"eller kommentarer i denne fila vert sletta, men punktum-kommentarer og\n" +"fil-posisjonar vert teke vare p�. Der det ikkje er mogleg � finne ei\n" +"eksakt overeinsstemming, vert �fuzzy� samanlikning brukt for � f� betre\n" +"resultat. Resultatet vert skrive til standard ut, med mindre ei utfil er\n" +"spesifisert.\n" + +#: src/msgmerge.c:772 +#, c-format +msgid "" +"%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete " +"%d.\n" +msgstr "" + +#: src/msgmerge.c:778 +msgid " done.\n" +msgstr "" + +#: src/msgunfmt.c:215 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [FILE]...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent write indented output style\n" +" -o, --output-file=FILE write output into FILE instead of standard output\n" +" --strict write strict uniforum style\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Bruk: %s [FLAGG] INNFIL ...\n" +"Obligatoriske argumenter til lange flagg er obligatoriske ogs� til korte flagg.\n" +" -e, --no-escape ikkje bruk C-escapekoder i utdata (forvalgt)\n" +" -E, --escape bruk C-escapekoder i utdata, ingen utvida teikn\n" +" -h, --help vis denne hjelpeteksta og avslutt\n" +" -i, --indent indentert utdata\n" +" -o, --output-file=FIL resultat vert skrive til FIL\n" +" -S, --strict lag strengt Uniforum-konformt utdata\n" +" -V, --version vis programversjon og avslutt\n" + +#: src/msgunfmt.c:229 +#, fuzzy, no-wrap +msgid "" +"\n" +"Convert binary .mo files to Uniforum style .po files.\n" +"Both little-endian and big-endian .mo files are handled.\n" +"If no input file is given or it is -, standard input is read.\n" +"By default the output is written to standard output.\n" +msgstr "" +"\n" +"Konverter bin�re .mo-filer til Uniforum .po-filer. B�de �little-endian� og\n" +"�big-endian� .mo filer vert h�ndtert. Dersom innfil er -, blir standard\n" +"inn lest. Dersom utfil er -, vert det skrive til standard ut.\n" + +#: src/msgunfmt.c:266 src/msgunfmt.c:330 src/po-lex.c:185 src/xget-lex.c:254 +#, fuzzy, c-format +msgid "error while reading \"%s\"" +msgstr "feil under skriving av fila \"%s\"" + +#: src/msgunfmt.c:267 src/msgunfmt.c:331 +#, c-format +msgid "file \"%s\" truncated" +msgstr "filen \"%s\" er avkutta" + +#: src/msgunfmt.c:298 +#, c-format +msgid "seek \"%s\" offset %ld failed" +msgstr "�seek� \"%s\" posisjon %ld feila" + +#: src/msgunfmt.c:373 +#, c-format +msgid "file \"%s\" is not in GNU .mo format" +msgstr "fila \"%s\" er ikkje i GNU .mo-format" + +#: ../../src/po-gram.y:83 +msgid "missing `msgstr' section" +msgstr "manglar �msgstr�-seksjon" + +#: src/po-lex.c:84 +#, fuzzy, c-format +msgid "found %d fatal errors" +msgstr "%s: fann %d fatale feil" + +#: src/po-lex.c:129 src/po-lex.c:168 +#, fuzzy +msgid "too many errors, aborting" +msgstr "%s: for mange feil, avsluttar" + +#: src/po-lex.c:241 +#, c-format +msgid "keyword \"%s\" unknown" +msgstr "" + +#: src/po-lex.c:332 +msgid "illegal control sequence" +msgstr "" + +#: src/po-lex.c:415 +msgid "end-of-line within string" +msgstr "" + +#: src/po-lex.c:420 +msgid "end-of-file within string" +msgstr "" + +#: src/xget-lex.c:150 +msgid "standard input" +msgstr "" + +#: src/xget-lex.c:892 +#, c-format +msgid "%s:%d: warning: unterminated character constant" +msgstr "" + +#: src/xget-lex.c:914 +#, c-format +msgid "%s:%d: warning: unterminated string literal" +msgstr "" + +#: src/xgettext.c:386 +msgid "--join-existing cannot be used when output is written to stdout" +msgstr "" + +#: src/xgettext.c:501 +#, c-format +msgid "warning: file `%s' extension `%s' is unknown; will try C" +msgstr "" + +#: src/xgettext.c:537 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Extract translatable string from given input files.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --extract-all extract all strings\n" +" -c, --add-comments[=TAG] place comment block with TAG (or those\n" +" preceding keyword lines) in output file\n" +" -C, --c++ shorthand for --language=C++\n" +" --debug more detailed formatstring recognision result\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" --foreign-user omit FSF copyright in output for foreign user\n" +" -F, --sort-by-file sort output by file location\n" +msgstr "" +"Bruk: %s [FLAGG] INNFIL ...\n" +"Obligatoriske argumenter til lange flagg er obligatoriske ogs� til korte flagg.\n" +" -a, --extract-all ekstrah�r alle strengar\n" +" -c, --add-comments[=TAG] lagre kommentarblokker med TAG (eller\n" +" kommentarar i linjer som kjem foran\n" +" n�kkelord) i utfila\n" +" -C, --c++ kjenn igjen C++-kommentarar\n" +" -d, --default-domain=NAVN lagre utdata i NAVN.po (i staden for\n" +" messages.po)\n" +" -D, --directory=FILKATALOG skift til FILKATALOG f�r prosessering\n" +" -e, --no-escape ikkje bruk C-escapekoder i utdata (forvalgt)\n" +" -E, --escape bruk C-escapekoder i utdata, ingen utvida teikn\n" +" -f, --files-from=FIL hent liste av innfiler fr� FIL\n" +" -F, --sort-by-file sorter utdata etter fil-lokasjon\n" +" -h, --help vis denne hjelpeteksta og avslutt\n" +" -i, --indent lag indentert utdata\n" +" -j, --join-existing flett saman meldingar med eksisterande fil\n" + +#: src/xgettext.c:557 +#, fuzzy, c-format, no-wrap +msgid "" +" -h, --help display this help and exit\n" +" -i, --indent write the .po file using indented style\n" +" -j, --join-existing join messages with existing file\n" +" -k, --keyword[=WORD] additonal keyword to be looked for (without\n" +" WORD means not to use default keywords)\n" +" -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n" +" -L, --language=NAME recognise the specified language (C, C++, PO),\n" +" otherwise is guessed from file extension\n" +" -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n" +" -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n" +" --no-location do not write '#: filename:line' lines\n" +msgstr "" +" -k, --keyword[=ORD] sj� ogs� etter n�kkelordet ORD (manglar ORD,\n" +" skal ikkje dei vanlege n�kkelorda nyttast)\n" +" -l, --string-limit=NUMMER sett st�rste streng-lengde til NUMMER\n" +" i staden for %u\n" +" -m, --msgstr-prefix[=STRENG] bruk STRENG eller \"\" som prefiks for\n" +" msgstr-verdiar\n" +" -M, --msgstr-suffix[=STRENG] bruk STRENG eller \"\" som suffiks for\n" +" msgstr-verdiar\n" +" --no-location ikkje lag �#: filnavn:linje�-linjer\n" +" -n, --add-location lag �#: filenavn:linje�-linjer (forvalgt)\n" +" --omit-header ikkje lag startseksjon med �msgid \"\"�\n" + +#: src/xgettext.c:571 +#, fuzzy, no-wrap +msgid "" +" -n, --add-location generate '#: filename:line' lines (default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory DIR\n" +" -s, --sort-output generate sorted output and remove duplicates\n" +" --strict write out strict Uniforum conforming .po file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -x, --exclude-file=FILE entries from FILE are not extracted\n" +"\n" +"If INPUTFILE is -, standard input is read.\n" +msgstr "" +" -p, --output-dir=KAT plass�r utfiler i filkatalogen KAT\n" +" -s, --sort-output sort�r utdata og ta bort duplikat\n" +" --strict lag strengt Uniforum-konform .po-fil\n" +" -T, --trigraphs forst� ANSI C trigraphs i inndata\n" +" -v, --verbose gje fyldige advarslar\n" +" -v, --version vis programversjon og avslutt\n" +" -x, --exclude-file=FIL innslag fr� FIL vert ikkje ekstrahert\n" +"\n" +"Dersom INNFIL er -, vil det verte lese fr� standard inn.\n" + +#: src/xgettext.c:1344 +#, c-format +msgid "language `%s' unknown" +msgstr "" + +#~ msgid "this is the location of the first definition" +#~ msgstr "den f�rste definisjonen finst her" + +#~ msgid "cannot change to directory \"%s\"" +#~ msgstr "kan ikkje skifte til filkatalog \"%s\"" + +#~ msgid "cannot change back to directory \"%s\"" +#~ msgstr "kan ikkje skifte tilbake til filkatalog \"%s\"" + +#~ msgid "found %d errors" +#~ msgstr "fann %d feil" + +#~ msgid "" +#~ "Usage: %s [OPTION] filename.mo filename.po\n" +#~ "Mandatory arguments to long options are mandatory for short options too.\n" +#~ " -e, --no-escape do not use C escapes in output (default)\n" +#~ " -E, --escape use C escapes in output, no extended chars\n" +#~ " -h, --help display this help and exit\n" +#~ " -i, --indent write indented output style\n" +#~ " -S, --strict\t write strict uniforum style\n" +#~ " -V, --version output version information and exit\n" +#~ msgstr "" +#~ "Bruk: %s [FLAGG] INNFIL ...\n" +#~ "Obligatoriske argumenter til lange flagg er obligatoriske ogs� til korte " +#~ "flagg.\n" +#~ " -e, --no-escape ikkje bruk C-escapekoder i utdata (forvalgt)\n" +#~ " -E, --escape bruk C-escapekoder i utdata, ingen utvideda " +#~ "teikn\n" +#~ " -h, --help vis denne hjelpeteksta og avslutt\n" +#~ " -i, --indent lag indentert utdata\n" +#~ " -S, --strict\t lag utdata som er strengt Uniforum-konformt\n" +#~ " -V, --version vis programversjon og avslutt\n" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/pl.gmo b/debian/gettext-kde/gettext-kde-0.10.35/po/pl.gmo Binary files differnew file mode 100644 index 00000000..4f874f2f --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/pl.gmo diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/pl.po b/debian/gettext-kde/gettext-kde-0.10.35/po/pl.po new file mode 100644 index 00000000..1f6a6339 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/pl.po @@ -0,0 +1,798 @@ +# Polish translations for the GNU gettext messages +# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +# Rafa� Maszkowski <[email protected]>, 1995-1997 +# Piotr Pogorzelski <[email protected]>, 1995 +# +msgid "" +msgstr "" +"Project-Id-Version: GNU gettext 0.10.31\n" +"POT-Creation-Date: 1998-04-30 22:50-0700\n" +"PO-Revision-Date: 1997-08-19 19:55+0200\n" +"Last-Translator: Rafa� Maszkowski <[email protected]>\n" +"Language-Team: Polish <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/error.c:103 +msgid "Unknown system error" +msgstr "Nieznany b��d systemu" + +#: lib/getopt.c:680 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: opcja: `%s' jest niejednoznaczna\n" + +#: lib/getopt.c:704 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: opcja `--%s' nie mo�e mie� argumentu\n" + +#: lib/getopt.c:709 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: opcja `%c%s' nie mo�e mie� argumentu\n" + +#: lib/getopt.c:726 lib/getopt.c:899 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: opcja `%s' wymaga argumentu\n" + +#. --option +#: lib/getopt.c:755 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: nieznana opcja `--%s'\n" + +#. +option or -option +#: lib/getopt.c:759 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: nieznana opcja `%c%s'\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:785 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: niedozwolona opcja -- %c\n" + +#: lib/getopt.c:788 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: b��dna opcja -- %c\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:818 lib/getopt.c:948 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: opcja wymaga argumentu -- %c\n" + +#: lib/getopt.c:865 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: opcja `-W %s' jest niejednoznaczna\n" + +#: lib/getopt.c:883 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: opcja `-W %s' nie mo�e mie� argumentu\n" + +#: lib/xmalloc.c:82 +msgid "Memory exhausted" +msgstr "pami�� wyczerpana" + +#: src/gettextp.c:134 src/msgcmp.c:144 src/msgcomm.c:285 src/msgfmt.c:257 +#: src/msgmerge.c:254 src/msgunfmt.c:175 src/xgettext.c:394 +#, c-format, no-wrap +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"Ten program jest darmowy; warunki kopiowania s� opisane w �r�d�ach.\n" +"Autorzy nie daj� �ADNYCH gwarancji, w tym nawet gwarancji SPRZEDAWALNO�CI\n" +"lub PRZYDATNO�CI DO KONKRETNYCH CEL�W.\n" + +#: src/gettextp.c:139 src/msgcmp.c:149 src/msgcomm.c:290 src/msgfmt.c:262 +#: src/msgmerge.c:259 src/msgunfmt.c:180 src/xgettext.c:399 +#, c-format +msgid "Written by %s.\n" +msgstr "Zapisane przez %s.\n" + +#: src/gettextp.c:154 +msgid "missing arguments" +msgstr "brakuj�ce argumenty" + +#: src/gettextp.c:164 +msgid "too many arguments" +msgstr "za du�o argument�w" + +#: src/gettextp.c:228 src/msgcmp.c:181 src/msgcomm.c:395 src/msgfmt.c:361 +#: src/msgmerge.c:301 src/msgunfmt.c:210 src/xgettext.c:532 +#, c-format +msgid "Try `%s --help' for more information.\n" +msgstr "Spr�buj `%s --help' �eby otrzyma� wi�cej informacji.\n" + +#: src/gettextp.c:233 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n" +" -e enable expansion of some escape sequences\n" +" -E (ignored for compatibility)\n" +" -h, --help display this help and exit\n" +" -n suppress trailing newline\n" +" -V, --version display version information and exit\n" +" [TEXTDOMAIN] MSGID retrieve translated message corresponding\n" +" to MSGID from TEXTDOMAIN\n" +msgstr "" +"U�ycie: %s [OPCJA] [[TEXTDOMAIN] MSGID | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN wydob�d� przet�umaczone komunikaty z TEXTDOMAIN\n" +" -e w��cz rozwijanie niekt�rych sekwencji escape\n" +" -E (ignorowane, dla kompatybilno�ci)\n" +" -h, --help wy�wietl ten opis i zako�cz\n" +" -n wy��cz ko�cowy znak nowej linii\n" +" -V, --version wy�wietl informacj� o wersji i zako�cz\n" +" [TEXTDOMAIN] MSGID wydob�d� przet�umaczony komunikat odpowiadaj�cy\n" +" MSGID z TEXTDOMAIN\n" + +#: src/gettextp.c:245 +#, c-format, no-wrap +msgid "" +"\n" +"If the TEXTDOMAIN parameter is not given, the domain is determined from the\n" +"environment variable TEXTDOMAIN. If the message catalog is not found in the\n" +"regular directory, another location can be specified with the environment\n" +"variable TEXTDOMAINDIR.\n" +"When used with the -s option the program behaves like the `echo' command.\n" +"But it does not simply copy its arguments to stdout. Instead those messages\n" +"found in the selected catalog are translated.\n" +"Standard search directory: %s\n" +msgstr "" +"\n" +"Je�eli parametr TEXTDOMAIN nie jest podany, domena jest wyznaczana ze zmiennej\n" +"�rodowiska TEXTDOMAIN. Je�eli katalog komunikat�w nie zostanie znaleziony w\n" +"zwyk�ym katalogu, inna lokalizacja mo�e by� podana przez zmienn� �rodowiska\n" +"TEXTDOMAINDIR.\n" +"Je�eli u�yty z opcj� -s, program zachowuje si� jak komenda `echo', ale zamiast\n" +"kopiowa� argumenty na standardowe wyj�cie t�umaczy komunikaty znalezione w\n" +"wybranym katalogu.\n" +"Domy�lnie przeszukiwany katalog: %s\n" + +#: src/gettextp.c:255 src/msgcmp.c:200 src/msgcomm.c:442 src/msgfmt.c:388 +#: src/msgmerge.c:334 src/msgunfmt.c:234 src/xgettext.c:584 +#, fuzzy +msgid "Report bugs to <[email protected]>.\n" +msgstr "Raporty o b��dach wysy�aj do <[email protected]>.\n" + +#: src/message.c:784 +#, c-format +msgid "" +"internationalized messages should not contain the `\\%c' escape sequence" +msgstr "umi�dzynaradawiane komunikaty nie powinny zawiera� sekwenji `\\%c'" + +#: src/message.c:1115 +#, c-format +msgid "cannot create output file \"%s\"" +msgstr "nie mog� utworzy� pliku wyj�ciowego \"%s\"" + +#: src/message.c:1122 +#, no-c-format +msgid "standard output" +msgstr "standardowe wyj�cie" + +#: src/message.c:1182 +#, c-format +msgid "error while writing \"%s\" file" +msgstr "b��d podczas pisania do pliku \"%s\"" + +#: src/msgcmp.c:160 src/msgmerge.c:270 +msgid "no input files given" +msgstr "nie podano nazw plik�w wej�ciowych" + +#: src/msgcmp.c:165 src/msgmerge.c:275 +msgid "exactly 2 input files required" +msgstr "wymagane s� dok�adnie dwa pliki wej�ciowe" + +#: src/msgcmp.c:186 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -h, --help display this help and exit\n" +" -V, --version output version information and exit\n" +"\n" +"Compare two Uniforum style .po files to check that both contain the same\n" +"set of msgid strings. The def.po file is an existing PO file with the\n" +"old translations. The ref.po file is the last created PO file\n" +"(generally by xgettext). This is useful for checking that you have\n" +"translated each and every message in your program. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better diagnostics.\n" +msgstr "" +"U�ycie: %s [OPCJA] def.po ref.po\n" +"Argumenty obowi�zkowe dla opcji d�ugich obowi�zuj� r�wnie� dla kr�tkich.\n" +" -D, --directory=KATALOG szukaj plik�w wej�ciowych r�wnie� w KATALOGu\n" +" -h, --help wy�wietl ten opis i zako�cz\n" +" -V, --version wy�wietl informacj� o wersji i zako�cz\n" +"\n" +"Por�wnaj dwa pliki .po w stylu Uniforum, �eby sprawdzi� czy zawieraj� te\n" +"same zbiory �a�cuch�w msgid. Plik def.po to istniej�cy plik PO ze starymi\n" +"t�umaczeniami. Plik ref.po jest ostatnio utworzonym plikiem PO \n" +"(zwykle przez xgettext). Jest to przydatne do stwierdzenia czy wszystkie\n" +"komunikaty w programie zosta�y przet�umaczone. Tam gdzie nie mo�na\n" +"por�wna� dok�adnie u�ywane jest por�wnanie rozmyte, dla lepszej diagnostyki.\n" + +#: src/msgcmp.c:259 src/msgmerge.c:714 +msgid "this message is used but not defined..." +msgstr "ten komunikat jest u�yty, ale nie zdefiniowany..." + +#: src/msgcmp.c:261 src/msgmerge.c:716 +msgid "...but this definition is similar" +msgstr "...ale ta definicja jest podobna" + +#: src/msgcmp.c:267 src/msgmerge.c:743 +#, c-format +msgid "this message is used but not defined in %s" +msgstr "ten komunikat jest u�yty, ale nie zdefiniowany w %s" + +#: src/msgcmp.c:281 +msgid "warning: this message is not used" +msgstr "uwaga: ten komunikat nie jest u�yty" + +#: src/msgcmp.c:355 src/msgfmt.c:632 src/msgmerge.c:493 src/xgettext.c:1063 +msgid "duplicate message definition" +msgstr "podw�jna definicja komunikatu" + +#: src/msgcmp.c:356 src/msgfmt.c:633 src/msgmerge.c:494 src/xgettext.c:1064 +msgid "...this is the location of the first definition" +msgstr "...to jest po�o�enie pierwszej definicji" + +#: src/msgcmp.c:396 src/msgmerge.c:542 +#, c-format +msgid "this message has no definition in the \"%s\" domain" +msgstr "ten komunikat nie ma definicji w domenie \"%s\"" + +#. We are about to construct the absolute path to the +#. directory for the output files but asprintf failed. +#: src/msgcomm.c:238 src/xgettext.c:340 src/xgettext.c:1258 +msgid "while preparing output" +msgstr "podczas przygotowywania wyniku" + +#: src/msgcomm.c:273 src/msgcomm.c:277 src/xgettext.c:378 src/xgettext.c:382 +#, c-format +msgid "%s and %s are mutually exclusive" +msgstr "%s i %s wzajemnie si� wykluczaj�" + +#: src/msgcomm.c:341 +msgid "at least two files must be specified" +msgstr "" + +#: src/msgcomm.c:360 +#, c-format +msgid "impossible selection criteria specified (%d < n < %d)" +msgstr "" + +#: src/msgcomm.c:400 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" -F, --sort-by-file sort output by file location\n" +" -h, --help display this help and exit\n" +msgstr "" +"U�ycie: %s [OPCJA] PLIK_WEJ�CIOWY ...\n" +"Argumenty obowi�zkowe dla opcji d�ugich obowi�zuj� r�wnie� dla kr�tkich.\n" +" -a, --extract-all wydob�d� wszystkie komunikaty\n" +" -c, --add-comments[=ZNACZNIK] umie�� blok komentarza ze ZNACZNIKiem (lub\n" +" z poprzedzaj�cymi liniami s��w kluczowych) w\n" +" pliku wyj�ciowym\n" +" -C, --c++ rozpoznawaj komentarze w stylu C++\n" +" --debug bardziej wnikliwe rozpoznwanie formatu\n" +" -d, --domain=TEXTDOMAIN wydob�d� przet�umaczone komunikaty z TEXTDOMAIN\n" +" -D, --directory=KATALOG szukaj plik�w wej�ciowych r�wnie� w KATALOGu\n" +" -e, --no-escape nie u�ywaj sekwencji escape w wynikach (domy�lne)\n" +" -E, --escape u�yj sekwencji escape C, bez znak�w rozszerzonych\n" +" -f, --files-from=PLIK pobierz list� plik�w wej�ciowych z PLIKu\n" +" --force-po zapisz nawet pusty plik PO\n" +" --foreign-user omi� informacj� o prawach autorskich FSF\n" +" -F, --sort-by-file sortuj wyniki wg po�o�enia plik�w\n" + +#: src/msgcomm.c:412 +#, fuzzy +msgid "" +" -i, --indent write the .po file using indented style\n" +" --no-location do not write '#: filename:line' lines\n" +" -n, --add-location generate '#: filename:line' lines " +"(default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory " +"DIR\n" +" -s, --sort-output generate sorted output and remove " +"duplicates\n" +" --strict write out strict Uniforum conforming .po " +"file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -u, --unique shorthand for --less-than=2, requests\n" +" that only unique messages be printed\n" +msgstr "" +" -n, --add-location pisz linie '#: nazwa_pliku:linia' " +"(domy�lnie)\n" +" --omit-header nie zapisuj nag��wka z `msgid \"\"'\n" +" -o, --output=FILE zapisz do podanego pliku\n" +" -p, --output-dir=KATALOG pliki wynikowe b�d� w katalogu KATALOG\n" +" -s, --sort-output wynik posortuj i usu� duplikaty\n" +" --strict zapisz plik .po �ci�le w stylu Uniforum\n" +" -T, --trigraphs rozumiej tr�jznaki ANSI C w danych " +"wej�ciowych\n" +" -V, --version wy�wietl informacj� o wersji i zako�cz\n" +" -w, --width=LICZBA ustal szeroko�� strony\n" +" -x, --exclude-file=PLIK nie wydobywaj rekord�w zapisanych w PLIKu\n" + +#: src/msgcomm.c:425 +msgid "" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -<, --less-than=NUMBER print messages with less than this many\n" +" definitions, defaults to infinite if not\n" +" set\n" +" ->, --more-than=NUMBER print messages with more than this many\n" +" definitions, defaults to 1 if not set\n" +"\n" +"Find messages which are common to two or more of the specified PO files.\n" +"By using the --more-than option, greater commonality may be requested\n" +"before messages are printed. Conversely, the --less-than option may be\n" +"used to specify less commonality before messages are printed (i.e.\n" +"--less-than=2 will only print the unique messages). Translations,\n" +"comments and extract comments will be preserved, but only from the first\n" +"PO file to define them. File positions from all PO files will be\n" +"preserved.\n" +msgstr "" + +#: src/msgcomm.c:476 src/msgunfmt.c:357 src/po-lex.c:74 src/xget-lex.c:159 +#: src/xget-lex.c:174 src/xget-lex.c:191 src/xgettext.c:618 +#, c-format +msgid "error while opening \"%s\" for reading" +msgstr "b��d w czasie otwierania \"%s\" do czytania" + +#: src/msgcomm.c:557 src/xgettext.c:660 src/xgettext.c:970 +msgid "this file may not contain domain directives" +msgstr "ten plik nie mo�e zawiera� dyrektyw domen" + +#: src/msgfmt.c:273 src/xgettext.c:410 +msgid "no input file given" +msgstr "nie podano nazwy pliku wej�ciowego" + +#: src/msgfmt.c:321 +#, c-format +msgid "error while opening \"%s\" for writing" +msgstr "b��d otwarcia \"%s\" do pisania" + +#: src/msgfmt.c:343 +#, c-format +msgid "%d translated messages" +msgstr "%d przet�umaczonych komunikat�w" + +#: src/msgfmt.c:345 +#, c-format +msgid ", %d fuzzy translations" +msgstr ", %d t�umacze� budzi w�tpliwo�ci" + +#: src/msgfmt.c:347 +#, c-format +msgid ", %d untranslated messages" +msgstr ", %d nie przet�umaczonych komunikat�w" + +#: src/msgfmt.c:366 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] filename.po ...\n" +"Generate binary message catalog from textual translation description.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n" +" -c, --check perform language dependent checks on strings\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -f, --use-fuzzy use fuzzy entries in output\n" +" -h, --help display this help and exit\n" +" --no-hash binary file will not include the hash table\n" +" -o, --output-file=FILE specify output file name as FILE\n" +" --statistics print statistics about translations\n" +" --strict enable strict Uniforum mode\n" +" -v, --verbose list input file anomalies\n" +" -V, --version output version information and exit\n" +"\n" +"Giving the -v option more than once increases the verbosity level.\n" +"\n" +"If input file is -, standard input is read. If output file is -,\n" +"output is written to standard output.\n" +msgstr "" +"U�ycie: %s [OPCJA] plik.po ...\n" +"Argumenty obowi�zkowe dla opcji d�ugich obowi�zuj� r�wnie� dla kr�tkich.\n" +" -a, --alignment=ILO�� dosu� do r�wnej ILO�Ci bajt�w (domy�lnie: %d)\n" +" -c, --check dokonaj zale�nych od j�zyka sprawdze� znak�w\n" +" -D, --directory=KATALOG szukaj plik�w wej�ciowych r�wnie� w KATALOGu\n" +" -f, --use-fuzzy u�yj t�umacze� niepewnych w danych wyj�ciowych\n" +" -h, --help wy�wietl ten opis i zako�cz prac�\n" +" --no-hash w pliku binarnym nie b�dzie tablicy mieszaj�cej\n" +" -o, --output-file=PLIK podaj nazw� pliku wyj�ciowego PLIK\n" +" --statistics wypisz statystyk� t�umacze�\n" +" --strict przejd� na �cis�y tyryb Uniforum\n" +" -v, --verbose wypisz anomalie w pliku wej�ciowym\n" +" -V, --version wypisz informacj� o wersji i zako�cz\n" +"\n" +"Podanie opcji -v wiec�j ni� raz zwi�ksza ilo�� podawanych informacji.\n" +"\n" +"Je�eli plik wej�ciowy to -, czytane jest wej�cie standardowe. Jezeli plik\n" +"wyj�ciowy to -, wyniki s� wysy�ane do standardowego wyj�cia.\n" + +#: src/msgfmt.c:409 +msgid "while creating hash table" +msgstr "podczas tworzenia tablicy mieszaj�cej" + +#: src/msgfmt.c:451 +#, c-format +msgid "%s: warning: no header entry found" +msgstr "%s: uwaga: nie znaleziono nag��wka" + +#: src/msgfmt.c:473 +#, c-format +msgid "domain name \"%s\" not suitable as file name" +msgstr "nazwa domeny \"%s\" nie jest odpowiedni� nazwa pliku" + +#: src/msgfmt.c:478 +#, c-format +msgid "domain name \"%s\" not suitable as file name: will use prefix" +msgstr "nazwa domeny \"%s\" nie jest dobra jako nazwa pliku: u�yj� przedrostka" + +#. We don't change the exit status here because this is really +#. only an information. +#: src/msgfmt.c:491 +#, c-format +msgid "`domain %s' directive ignored" +msgstr "dyrektywa `domena %s' zignorowana" + +#: src/msgfmt.c:519 +msgid "empty `msgstr' entry ignored" +msgstr "zignorowana pusta warto�� `msgstr'" + +#: src/msgfmt.c:520 +msgid "fuzzy `msgstr' entry ignored" +msgstr "zignorowana niepewna (fuzzy) warto�� `msgstr'" + +#: src/msgfmt.c:563 +#, c-format +msgid "headerfield `%s' missing in header" +msgstr "w nag��wku brakuje pola `%s'" + +#: src/msgfmt.c:566 +#, c-format +msgid "header field `%s' should start at beginning of line" +msgstr "pole nag��wka `%s' powinno si� zaczyna� na pocz�tku linii" + +#: src/msgfmt.c:576 +msgid "some header fields still have the initial default value" +msgstr "niekt�re pola nag��wka nadal zawieraj� pocz�tkowe warto�ci domy�lne" + +#: src/msgfmt.c:587 +#, c-format +msgid "field `%s' still has initial default value" +msgstr "pole `%s' ma nadal pocz�tkow� warto�� domy�ln�" + +#: src/msgfmt.c:672 +#, c-format +msgid "%s: warning: source file contains fuzzy translation" +msgstr "%s: uwaga: plik �r�d�owy zawiera t�umaczenie budz�ce w�tpliwo�ci" + +#: src/msgfmt.c:874 +msgid "`msgid' and `msgstr' entries do not both begin with '\\n'" +msgstr "`msgid' i `msgstr' nie zaczynaj� si� oba od '\\n'`" + +#: src/msgfmt.c:882 +msgid "`msgid' and `msgstr' entries do not both end with '\\n'" +msgstr "`msgid' i `msgstr' nie ko�cz� si� oba na '\\n'" + +#: src/msgfmt.c:896 +msgid "number of format specifications in `msgid' and `msgstr' does not match" +msgstr "nie zgadza si� ilo�� specyfikacji formatu w `msgid' i w `msgstr'" + +#: src/msgfmt.c:913 +#, c-format +msgid "format specifications for argument %u are not the same" +msgstr "specyfikacje formatu dla argumentu %u nie s� takie same" + +#: src/msgmerge.c:306 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent indented output style\n" +" -o, --output-file=FILE result will be written to FILE\n" +" --no-location suppress '#: filename:line' lines\n" +" --add-location preserve '#: filename:line' lines (default)\n" +" --strict strict Uniforum output style\n" +" -v, --verbose increase verbosity level\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"U�ycie: %s [OPCJA] def.po ref.po\n" +"Argumenty obowi�zkowe dla opcji d�ugich obowi�zuj� r�wnie� dla kr�tkich.\n" +" -D, --directory=KATALOG szukaj plik�w wej�ciowych r�wnie� w KATALOGu\n" +" -e --no-escape nie u�ywaj rozwijania sekwencji escape (domy�lne)\n" +" -E --escape u�yj sekwencje escape, bez znak�w rozszerzonych\n" +" --force-po zapisz nawet pusty plik PO\n" +" -h, --help wy�wietl ten opis i zako�cz\n" +" -i, --indent wyniki z wci�ciami\n" +" -o, --output-file=PLIK wyniki b�d� zapisane do PLIKu\n" +" --no-location nie generuj linii '#: filename:line'\n" +" --add-location generuj linie '#: filename:line' (domy�lne)\n" +" --strict �cis�y styl Uniforum\n" +" -v, --verbose podawaj wi�cej informacji\n" +" -V, --version wy�wietl informacj� o wersji i zako�cz\n" +" -w, --width=LICZBA ustal szeroko�� strony\n" + +#: src/msgmerge.c:324 +#, no-wrap +msgid "" +"\n" +"Merges two Uniforum style .po files together. The def.po file is an\n" +"existing PO file with the old translations which will be taken over to\n" +"the newly created file as long as they still match; comments will be\n" +"preserved, but extract comments and file positions will be discarded.\n" +"The ref.po file is the last created PO file (generally by xgettext), any\n" +"translations or comments in the file will be discarded, however dot\n" +"comments and file positions will be preserved. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better results. The\n" +"results are written to stdout unless an output file is specified.\n" +msgstr "" +"\n" +"��czy razem dwa pliki .po w stylu Uniforum. Plik def.po jest istniej�cym\n" +"plikiem PO ze starymi t�umaczeniami, kt�re b�d� przeniesione do nowo\n" +"utworzonego pliku je�eli nadal pasuj�; komentarze b�d� zachowane, ale\n" +"komentarze wydobyte i pozycje w pliku b�d� zignorowane.\n" +"Plik ref.po jest ostanio utworzonym plikiem PO (zwykle przez xgettext),\n" +"t�umaczenia i komentarze w nim zawarte b�d� zignorowane, ale komentarze z\n" +"kropk� i pozycje w plikach b�d� zachowane. Tam gdzie nie mo�na por�wna�\n" +"dok�adnie u�ywane jest por�wnanie rozmyte, dla lepszych wynik�w. Wyniki s�\n" +"pisane na standardowe wyj�cie je�eli plik wyj�iowy nie jest podany.\n" + +#: src/msgmerge.c:772 +#, c-format +msgid "" +"%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete " +"%d.\n" +msgstr "" +"%sPrzeczytane %d starych + %d odno�nik�w, %d do��czonych, %d niedok�adnych, " +"%d brakuj�cych, %d przestarza�ych.\n" + +#: src/msgmerge.c:778 +msgid " done.\n" +msgstr " zrobione.\n" + +#: src/msgunfmt.c:215 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [FILE]...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent write indented output style\n" +" -o, --output-file=FILE write output into FILE instead of standard output\n" +" --strict write strict uniforum style\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"U�ycie: %s [OPCJA] def.po ref.po\n" +"Argumenty obowi�zkowe dla opcji d�ugich obowi�zuj� r�wnie� dla kr�tkich.\n" +" -e --no-escape nie u�ywaj rozwijania sekwencji escape (domy�lne)\n" +" -E --escape u�yj sekwencje escape, bez znak�w rozszerzonych\n" +" --force-po zapisz nawet pusty plik PO\n" +" -h, --help wy�wietl ten opis i zako�cz\n" +" -i, --indent wyniki z wci�ciami\n" +" -o, --output-file=PLIK wyniki b�d� zapisane do PLIKu\n" +" --strict �cis�y styl Uniforum\n" +" -V, --version wy�wietl informacj� o wersji i zako�cz\n" +" -w, --width=LICZBA ustal szeroko�� strony\n" + +#: src/msgunfmt.c:229 +#, no-wrap +msgid "" +"\n" +"Convert binary .mo files to Uniforum style .po files.\n" +"Both little-endian and big-endian .mo files are handled.\n" +"If no input file is given or it is -, standard input is read.\n" +"By default the output is written to standard output.\n" +msgstr "" +"\n" +"Konwersja binarnych plik�w .mo do plik�w .po w stylu Uniforum.\n" +"U�yte mog� by� zar�wno pliki .mo little-endian i big-endian.\n" +"Je�eli plik wej�ciowy to -, czytane jest wej�cie standardowe. Jezeli plik\n" +"wyj�ciowy to -, wyniki s� wysy�ane do standardowego wyj�cia.\n" + +#: src/msgunfmt.c:266 src/msgunfmt.c:330 src/po-lex.c:185 src/xget-lex.c:254 +#, c-format +msgid "error while reading \"%s\"" +msgstr "b��d w czasie czytania \"%s\"" + +#: src/msgunfmt.c:267 src/msgunfmt.c:331 +#, c-format +msgid "file \"%s\" truncated" +msgstr "obci�ty plik \"%s\"" + +#: src/msgunfmt.c:298 +#, c-format +msgid "seek \"%s\" offset %ld failed" +msgstr "nieudane przej�cie do pozycji w \"%s\", ofset %ld" + +#: src/msgunfmt.c:373 +#, c-format +msgid "file \"%s\" is not in GNU .mo format" +msgstr "plik \"%s\" nie jest w formacie .mo GNU" + +#: ../../src/po-gram.y:83 +msgid "missing `msgstr' section" +msgstr "brak cz�sci `msgstr'" + +#: src/po-lex.c:84 +#, c-format +msgid "found %d fatal errors" +msgstr "znaleziono %d b��d�w krytycznych" + +#: src/po-lex.c:129 src/po-lex.c:168 +msgid "too many errors, aborting" +msgstr "%s: za du�o b��d�w, przerywam" + +#: src/po-lex.c:241 +#, c-format +msgid "keyword \"%s\" unknown" +msgstr "nieznane s�owo kluczowe \"%s\"" + +#: src/po-lex.c:332 +msgid "illegal control sequence" +msgstr "niedozwolona sekwencja steruj�ca" + +#: src/po-lex.c:415 +msgid "end-of-line within string" +msgstr "znak ko�ca wiersza wewn�trz �a�cucha" + +#: src/po-lex.c:420 +msgid "end-of-file within string" +msgstr "znak ko�ca pliku wewn�trz �a�cucha" + +#: src/xget-lex.c:150 +msgid "standard input" +msgstr "wej�cie standardowe" + +#: src/xget-lex.c:892 +#, c-format +msgid "%s:%d: warning: unterminated character constant" +msgstr "%s:%d: uwaga: niezako�czona sta�a znakowa" + +#: src/xget-lex.c:914 +#, c-format +msgid "%s:%d: warning: unterminated string literal" +msgstr "%s:%d: uwaga: niezako�czona sta�a �a�cuchowa" + +#: src/xgettext.c:386 +msgid "--join-existing cannot be used when output is written to stdout" +msgstr "--join-existing nie mo�e by� u�yte kiedy wyniki" + +#: src/xgettext.c:501 +#, c-format +msgid "warning: file `%s' extension `%s' is unknown; will try C" +msgstr "uwaga: typ pliku `%s' z rozszerzeniem `%s' jest nieznany; spr�buj� C" + +#: src/xgettext.c:537 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Extract translatable string from given input files.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --extract-all extract all strings\n" +" -c, --add-comments[=TAG] place comment block with TAG (or those\n" +" preceding keyword lines) in output file\n" +" -C, --c++ shorthand for --language=C++\n" +" --debug more detailed formatstring recognision result\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" --foreign-user omit FSF copyright in output for foreign user\n" +" -F, --sort-by-file sort output by file location\n" +msgstr "" +"U�ycie: %s [OPCJA] PLIK_WEJ�CIOWY ...\n" +"Argumenty obowi�zkowe dla opcji d�ugich obowi�zuj� r�wnie� dla kr�tkich.\n" +" -a, --extract-all wydob�d� wszystkie komunikaty\n" +" -c, --add-comments[=ZNACZNIK] umie�� blok komentarza ze ZNACZNIKiem (lub\n" +" z poprzedzaj�cymi liniami s��w kluczowych) w\n" +" pliku wyj�ciowym\n" +" -C, --c++ rozpoznawaj komentarze w stylu C++\n" +" --debug bardziej wnikliwe rozpoznwanie formatu\n" +" -d, --domain=TEXTDOMAIN wydob�d� przet�umaczone komunikaty z TEXTDOMAIN\n" +" -D, --directory=KATALOG szukaj plik�w wej�ciowych r�wnie� w KATALOGu\n" +" -e, --no-escape nie u�ywaj sekwencji escape w wynikach (domy�lne)\n" +" -E, --escape u�yj sekwencji escape C, bez znak�w rozszerzonych\n" +" -f, --files-from=PLIK pobierz list� plik�w wej�ciowych z PLIKu\n" +" --force-po zapisz nawet pusty plik PO\n" +" --foreign-user omi� informacj� o prawach autorskich FSF\n" +" -F, --sort-by-file sortuj wyniki wg po�o�enia plik�w\n" + +#: src/xgettext.c:557 +#, c-format, no-wrap +msgid "" +" -h, --help display this help and exit\n" +" -i, --indent write the .po file using indented style\n" +" -j, --join-existing join messages with existing file\n" +" -k, --keyword[=WORD] additonal keyword to be looked for (without\n" +" WORD means not to use default keywords)\n" +" -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n" +" -L, --language=NAME recognise the specified language (C, C++, PO),\n" +" otherwise is guessed from file extension\n" +" -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n" +" -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n" +" --no-location do not write '#: filename:line' lines\n" +msgstr "" +" -h, --help wy�wietl ten opis i zako�cz\n" +" -i, --indent zapisz plik .po z wci�ciami\n" +" -j, --join-existing po��cz komunikaty z istniej�cymi\n" +" -k, --keyword[=S�OWO] dodatkowe s�owo kluczowe do wyszukania (bez\n" +" S�OWO oznacza nieu�ywanie s��w domy�lnych)\n" +" -l, --string-limit=ILO�� ustaw limit d�ugo�ci �a�cucha ILO�� zamiast %u\n" +" -L, --language=NAZWA interpretuj podany j�zyk (C, C++, PO), w przeciwnym\n" +" wypadku zgadywany z rozszerzenia nazwy pliku\n" +" -m, --msgstr-prefix[=�A�CUCH] u�yj �A�CUCH lub \"\" jako przedrostka msgstr\n" +" -M, --msgstr-suffix[=�A�CUCH] u�yj �A�CUCH lub \"\" jako przyrostka msgstr\n" +" --no-location nie zapisuj linii '#: nazwa_pliku:linia'\n" + +#: src/xgettext.c:571 +#, no-wrap +msgid "" +" -n, --add-location generate '#: filename:line' lines (default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory DIR\n" +" -s, --sort-output generate sorted output and remove duplicates\n" +" --strict write out strict Uniforum conforming .po file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -x, --exclude-file=FILE entries from FILE are not extracted\n" +"\n" +"If INPUTFILE is -, standard input is read.\n" +msgstr "" +" -n, --add-location pisz linie '#: nazwa_pliku:linia' (domy�lnie)\n" +" --omit-header nie zapisuj nag��wka z `msgid \"\"'\n" +" -o, --output=FILE zapisz do podanego pliku\n" +" -p, --output-dir=KATALOG pliki wynikowe b�d� w katalogu KATALOG\n" +" -s, --sort-output wynik posortuj i usu� duplikaty\n" +" --strict zapisz plik .po �ci�le w stylu Uniforum\n" +" -T, --trigraphs rozumiej tr�jznaki ANSI C w danych wej�ciowych\n" +" -V, --version wy�wietl informacj� o wersji i zako�cz\n" +" -w, --width=LICZBA ustal szeroko�� strony\n" +" -x, --exclude-file=PLIK nie wydobywaj rekord�w zapisanych w PLIKu\n" + +#: src/xgettext.c:1344 +#, c-format +msgid "language `%s' unknown" +msgstr "nieznany j�zyk `%s'" + +#~ msgid "Report bugs to <[email protected]>.\n" +#~ msgstr "Raporty o b��dach wysy�aj do <[email protected]>.\n" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/pt.gmo b/debian/gettext-kde/gettext-kde-0.10.35/po/pt.gmo Binary files differnew file mode 100644 index 00000000..1710043f --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/pt.gmo diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/pt.po b/debian/gettext-kde/gettext-kde-0.10.35/po/pt.po new file mode 100644 index 00000000..dcf16731 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/pt.po @@ -0,0 +1,852 @@ +# Portuguese translation of the "gettext" messages +# Copyright (C) 1996 Free Software Foundation, Inc. +# Nuno Oliveira <[email protected]>, 1996. +# +msgid "" +msgstr "" +"Project-Id-Version: gettext 0.10.23\n" +"POT-Creation-Date: 1998-04-30 22:50-0700\n" +"PO-Revision-Date: 1996-09-18 20:51 WET DST\n" +"Last-Translator: Nuno Oliveira <[email protected]>\n" +"Language-Team: Portuguese <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/error.c:103 +msgid "Unknown system error" +msgstr "Erro desconhecido do sistema" + +#: lib/getopt.c:680 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: a op��o `%s' � amb�gua\n" + +#: lib/getopt.c:704 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: a op��o `--%s' n�o permite um argumento\n" + +#: lib/getopt.c:709 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: a op��o `%c%s' n�o permite um argumento\n" + +#: lib/getopt.c:726 lib/getopt.c:899 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: a op��o `%s' requere um argumento\n" + +#. --option +#: lib/getopt.c:755 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: op��o n�o reconhecida `--%s'\n" + +#. +option or -option +#: lib/getopt.c:759 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: op��o n�o reconhecida `%c%s'\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:785 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: op��o ilegal -- %c\n" + +#: lib/getopt.c:788 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: op��o ilegal -- %c\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:818 lib/getopt.c:948 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: op��o requere um argumento -- %c\n" + +#: lib/getopt.c:865 +#, fuzzy, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: a op��o `%s' � amb�gua\n" + +#: lib/getopt.c:883 +#, fuzzy, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: a op��o `--%s' n�o permite um argumento\n" + +#: lib/xmalloc.c:82 +#, fuzzy +msgid "Memory exhausted" +msgstr "mem�ria exausta" + +#: src/gettextp.c:134 src/msgcmp.c:144 src/msgcomm.c:285 src/msgfmt.c:257 +#: src/msgmerge.c:254 src/msgunfmt.c:175 src/xgettext.c:394 +#, c-format, no-wrap +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" + +#: src/gettextp.c:139 src/msgcmp.c:149 src/msgcomm.c:290 src/msgfmt.c:262 +#: src/msgmerge.c:259 src/msgunfmt.c:180 src/xgettext.c:399 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#: src/gettextp.c:154 +msgid "missing arguments" +msgstr "argumentos insuficientes" + +#: src/gettextp.c:164 +msgid "too many arguments" +msgstr "demasiados argumentos" + +#: src/gettextp.c:228 src/msgcmp.c:181 src/msgcomm.c:395 src/msgfmt.c:361 +#: src/msgmerge.c:301 src/msgunfmt.c:210 src/xgettext.c:532 +#, fuzzy, c-format +msgid "Try `%s --help' for more information.\n" +msgstr "Tente `%s --help' para mais informa��o\n" + +#: src/gettextp.c:233 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n" +" -e enable expansion of some escape sequences\n" +" -E (ignored for compatibility)\n" +" -h, --help display this help and exit\n" +" -n suppress trailing newline\n" +" -V, --version display version information and exit\n" +" [TEXTDOMAIN] MSGID retrieve translated message corresponding\n" +" to MSGID from TEXTDOMAIN\n" +msgstr "" +"Utiliza��o: %s [OP��O] [[[DIALECTO] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=DIALECTO obt�m as mensagems traduzidas do DIALECTO\n" +" -e permite a expans�o de algumas sequ�ncias de escape\n" +" -E (ignorado para compatibilidade)\n" +" -h, --help mostra esta ajuda e sai\n" +" -n suprime o newline final\n" +" -V, --version mostra a informa��o de vers�o e sai\n" +" [DIALECTO] MSGID obt�m a mensagem traduzida correspondente a\n" +" MSGID do DIALECTO\n" + +#: src/gettextp.c:245 +#, c-format, no-wrap +msgid "" +"\n" +"If the TEXTDOMAIN parameter is not given, the domain is determined from the\n" +"environment variable TEXTDOMAIN. If the message catalog is not found in the\n" +"regular directory, another location can be specified with the environment\n" +"variable TEXTDOMAINDIR.\n" +"When used with the -s option the program behaves like the `echo' command.\n" +"But it does not simply copy its arguments to stdout. Instead those messages\n" +"found in the selected catalog are translated.\n" +"Standard search directory: %s\n" +msgstr "" +"\n" +"Se o par�metro DIALECTO n�o for fornecido, o dom�nio � determinado a\n" +"partir da vari�vel TEXTDOMAIN do ambiente. Se o cat�logo de mensagens\n" +"n�o for encontrado no direct�rio regular, pode ser especificada outra\n" +"localiza��o atrav�s da vari�vel TEXTDOMAINDIR do ambiente.\n" +"Quando usado com a op��o -s, o programa comporta-se como o comando\n" +"`echo'. Contudo ele n�o copia simplesmente os seus argumentos para o\n" +"stdout. Em vez disso as mensagens encontradas no cat�logo seleccionado\n" +"s�o traduzidas.\n" +"Direct�rio standard de pesquisa: %s\n" + +#: src/gettextp.c:255 src/msgcmp.c:200 src/msgcomm.c:442 src/msgfmt.c:388 +#: src/msgmerge.c:334 src/msgunfmt.c:234 src/xgettext.c:584 +msgid "Report bugs to <[email protected]>.\n" +msgstr "" + +#: src/message.c:784 +#, c-format +msgid "" +"internationalized messages should not contain the `\\%c' escape sequence" +msgstr "" +"as mensagens de internacionaliza��o n�o devem conter\n" +"a sequ�ncia de escape `\\%c'" + +#: src/message.c:1115 +#, c-format +msgid "cannot create output file \"%s\"" +msgstr "imposs�vel criar o ficheiro de sa�da \"%s\"" + +#: src/message.c:1122 +#, no-c-format +msgid "standard output" +msgstr "canal de sa�da por defeito (stdout)" + +#: src/message.c:1182 +#, c-format +msgid "error while writing \"%s\" file" +msgstr "erro durante a escrita do ficheiro \"%s\"" + +#: src/msgcmp.c:160 src/msgmerge.c:270 +msgid "no input files given" +msgstr "ficheiros de entrada n�o fornecidos" + +#: src/msgcmp.c:165 src/msgmerge.c:275 +msgid "exactly 2 input files required" +msgstr "s�o necess�rios exactamente 2 ficheiros" + +#: src/msgcmp.c:186 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -h, --help display this help and exit\n" +" -V, --version output version information and exit\n" +"\n" +"Compare two Uniforum style .po files to check that both contain the same\n" +"set of msgid strings. The def.po file is an existing PO file with the\n" +"old translations. The ref.po file is the last created PO file\n" +"(generally by xgettext). This is useful for checking that you have\n" +"translated each and every message in your program. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better diagnostics.\n" +msgstr "" +"Utiliza��o: %s [OP��O] def.po ref.po\n" +"Os argumentos obrigat�rios para as op��es longas s�o igualmente\n" +"obrigat�rios para as op��es curtas.\n" +" -D, --directory=DIRECT�RIO adiciona DIRECT�RIO � lista de procura para\n" +" os ficheiros de entrada\n" +" -h, --help mostra esta ajuda e sai\n" +" -V, --version mostra a informa��o de vers�o e sai\n" +"\n" +"Compara dois ficheiros .po do tipo Uniforum verificando se ambos\n" +"cont�m o mesmo conjunto de cadeias msgid. O ficheiro def.po dever� ser\n" +"um ficheiro PO existente, com as tradu��es antigas. O ficheiro ref.po\n" +"ser� o �ltimo ficheiro PO criado (geralmente pelo xgettext). Isto �\n" +"�til para verificar que todas as mensagens no seu programa foram\n" +"traduzidas. Quando um emparelhamento exacto n�o puder ser efectuado,\n" +"� usado um emparelhamento aproximado para produzir melhores\n" +"diagn�sticos.\n" + +#: src/msgcmp.c:259 src/msgmerge.c:714 +msgid "this message is used but not defined..." +msgstr "esta mensagem � usada mas n�o definida..." + +#: src/msgcmp.c:261 src/msgmerge.c:716 +msgid "...but this definition is similar" +msgstr "...mas esta defini��o � semelhante" + +#: src/msgcmp.c:267 src/msgmerge.c:743 +#, c-format +msgid "this message is used but not defined in %s" +msgstr "esta mensagem � usada mas n�o definida em %s" + +#: src/msgcmp.c:281 +msgid "warning: this message is not used" +msgstr "aten��o: esta mensagem n�o � usada" + +#: src/msgcmp.c:355 src/msgfmt.c:632 src/msgmerge.c:493 src/xgettext.c:1063 +msgid "duplicate message definition" +msgstr "defini��o de mensagem duplicada" + +#: src/msgcmp.c:356 src/msgfmt.c:633 src/msgmerge.c:494 src/xgettext.c:1064 +msgid "...this is the location of the first definition" +msgstr "...este � o local da primeira defini��o" + +#: src/msgcmp.c:396 src/msgmerge.c:542 +#, c-format +msgid "this message has no definition in the \"%s\" domain" +msgstr "esta mensagem n�o tem defini��o no dom�nio \"%s\"" + +#. We are about to construct the absolute path to the +#. directory for the output files but asprintf failed. +#: src/msgcomm.c:238 src/xgettext.c:340 src/xgettext.c:1258 +msgid "while preparing output" +msgstr "durante a prepara��o da sa�da" + +#: src/msgcomm.c:273 src/msgcomm.c:277 src/xgettext.c:378 src/xgettext.c:382 +#, c-format +msgid "%s and %s are mutually exclusive" +msgstr "%s e %s s�o mutuamente exclusivas" + +#: src/msgcomm.c:341 +msgid "at least two files must be specified" +msgstr "" + +#: src/msgcomm.c:360 +#, c-format +msgid "impossible selection criteria specified (%d < n < %d)" +msgstr "" + +#: src/msgcomm.c:400 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" -F, --sort-by-file sort output by file location\n" +" -h, --help display this help and exit\n" +msgstr "" +"Utiliza��o: %s [OP��O] FICHEIRODEENTRADA...\n" +"Os argumentos obrigat�rios para as op��es longas s�o igualmente\n" +"obrigat�rios para as op��es curtas.\n" +" -a, --extract-all extrai todas as cadeias\n" +" -c, --add-comments[=TAG] coloca o bloco comentado com TAG (ou as\n" +" linhas de cabe�alho precedentes) no ficheiro\n" +" de sa�da.\n" +" -C, --c++ reconhece coment�rios do tipo C++\n" +" --debug produz resultados mais detalhados do\n" +" reconhecimento das cadeias de formata��o\n" +" -d, --default-domain=NOME usa NOME.po para a sa�da (em vez de\n" +" messages.po)\n" +" -D, --directory=DIRECT�RIO adiciona DIRECT�RIO � lista de procura para\n" +" \" os ficheiros de entrada\n" +" -e, --no-escape n�o usa sequ�ncias de escape do C na sa�da\n" +" (op��o por defeito)\n" +" -E, --escape usa sequ�ncias de escape do C na sa�da, n�o\n" +" usando caracteres especiais\n" +" -f, --files-from=FICHEIRO obt�m lista de ficheiros de entrada de\n" +" FICHEIRO\n" +" --force-po escreve o ficheiro PO mesmo se este estiver\n" +" vazio\n" +" -F, --sort-by-file ordena a sa�da pela localiza��o dos ficheiros\n" + +#: src/msgcomm.c:412 +#, fuzzy +msgid "" +" -i, --indent write the .po file using indented style\n" +" --no-location do not write '#: filename:line' lines\n" +" -n, --add-location generate '#: filename:line' lines " +"(default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory " +"DIR\n" +" -s, --sort-output generate sorted output and remove " +"duplicates\n" +" --strict write out strict Uniforum conforming .po " +"file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -u, --unique shorthand for --less-than=2, requests\n" +" that only unique messages be printed\n" +msgstr "" +" -n, --add-location gera linhas do tipo '#: filename:line'\n" +" (op��o utilizada por defeito)\n" +" --omit-header n�o escreve cabe�alhos com campos " +"`msgid\"\"'\n" +" -p, --output-dir=DIR os ficheiros de sa�da ser�o colocados no\n" +" direct�rio DIR\n" +" -s, --sort-output gera resultados ordenados, removendo os\n" +" duplicados\n" +" --strict escreve um ficheiro .po de acordo com o\n" +" modo Uniforum estrito\n" +" -T, --trigraphs entende trigrafos ANSI C na entrada\n" +" -V, --version mostra a informa��o de vers�o e sai\n" +" -w, --width=N�MERO especifica a largura de p�gina na sa�da\n" +" -x, --exclude-file=FICHEIRO os campos do FICHEIRO n�o s�o extra�dos\n" +"\n" +"Se o ficheiro de entrada for -, o canal de entrada por defeito (stdin) �\n" +"usado.\n" + +#: src/msgcomm.c:425 +msgid "" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -<, --less-than=NUMBER print messages with less than this many\n" +" definitions, defaults to infinite if not\n" +" set\n" +" ->, --more-than=NUMBER print messages with more than this many\n" +" definitions, defaults to 1 if not set\n" +"\n" +"Find messages which are common to two or more of the specified PO files.\n" +"By using the --more-than option, greater commonality may be requested\n" +"before messages are printed. Conversely, the --less-than option may be\n" +"used to specify less commonality before messages are printed (i.e.\n" +"--less-than=2 will only print the unique messages). Translations,\n" +"comments and extract comments will be preserved, but only from the first\n" +"PO file to define them. File positions from all PO files will be\n" +"preserved.\n" +msgstr "" + +#: src/msgcomm.c:476 src/msgunfmt.c:357 src/po-lex.c:74 src/xget-lex.c:159 +#: src/xget-lex.c:174 src/xget-lex.c:191 src/xgettext.c:618 +#, c-format +msgid "error while opening \"%s\" for reading" +msgstr "erro durante a abertura de \"%s\" para leitura" + +#: src/msgcomm.c:557 src/xgettext.c:660 src/xgettext.c:970 +msgid "this file may not contain domain directives" +msgstr "este ficheiro n�o pode conter directivas de dom�nio" + +#: src/msgfmt.c:273 src/xgettext.c:410 +msgid "no input file given" +msgstr "nenhum ficheiro de entrada fornecido" + +#: src/msgfmt.c:321 +#, c-format +msgid "error while opening \"%s\" for writing" +msgstr "erro durante a abertura de \"%s\" para escrita" + +#: src/msgfmt.c:343 +#, c-format +msgid "%d translated messages" +msgstr "%d mensagens traduzidas" + +#: src/msgfmt.c:345 +#, c-format +msgid ", %d fuzzy translations" +msgstr ", %d tradu��es aproximadas" + +#: src/msgfmt.c:347 +#, c-format +msgid ", %d untranslated messages" +msgstr ", %d mensagens n�o traduzidas" + +#: src/msgfmt.c:366 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] filename.po ...\n" +"Generate binary message catalog from textual translation description.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n" +" -c, --check perform language dependent checks on strings\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -f, --use-fuzzy use fuzzy entries in output\n" +" -h, --help display this help and exit\n" +" --no-hash binary file will not include the hash table\n" +" -o, --output-file=FILE specify output file name as FILE\n" +" --statistics print statistics about translations\n" +" --strict enable strict Uniforum mode\n" +" -v, --verbose list input file anomalies\n" +" -V, --version output version information and exit\n" +"\n" +"Giving the -v option more than once increases the verbosity level.\n" +"\n" +"If input file is -, standard input is read. If output file is -,\n" +"output is written to standard output.\n" +msgstr "" +"Utiliza��o: %s [OP��O] ficheiro.po ...\n" +"Os argumentos obrigat�rios para as op��es longas s�o igualmente\n" +"obrigat�rios para as op��es curtas.\n" +" -a, --alignment=N�MERO alinha as cadeias a N�MERO bytes (defeito: %d)\n" +" -c, --check executa testes dependentes da linguagem na\n" +" cadeia\n" +" -D, --directory=DIRECT�RIO adiciona DIRECT�RIO � lista de procura para\n" +" os ficheiros de entrada\n" +" -h, --help mostra esta ajuda e sai\n" +" --no-hash o ficheiro bin�rio n�o ir� incluir a tabela\n" +" de dispers�o\n" +" -o, --output-file=FICHEIRO especifica o nome do ficheiro de sa�da como\n" +" FICHEIRO\n" +" --statistics escreve informa��o estat�stica sobre as\n" +" tradu��es\n" +" --strict usa o modo Uniforum estrito\n" +" -v, --verbose lista as anormalias no ficheiro de entrada\n" +" -V, --version mostra a informa��o de vers�o e sai\n" +"\n" +"Se o ficheiro de entrada � -, � usado o canal de entrada stdin. Se o\n" +"ficheiro de sa�da � -, a sa�da � escrita no canal de sa�da stdout.\n" + +#: src/msgfmt.c:409 +msgid "while creating hash table" +msgstr "durante a cria��o da tabela de dispers�o" + +#: src/msgfmt.c:451 +#, fuzzy, c-format +msgid "%s: warning: no header entry found" +msgstr "cuidado: nenhum elemento encontrado no cabe�alho" + +#: src/msgfmt.c:473 +#, c-format +msgid "domain name \"%s\" not suitable as file name" +msgstr "nome de dom�nio \"%s\" n�o apropriado como nome de ficheiro" + +#: src/msgfmt.c:478 +#, c-format +msgid "domain name \"%s\" not suitable as file name: will use prefix" +msgstr "" +"nome de dom�nio \"%s\" n�o apropriado como nome de ficheiro:\n" +"prefixo usado" + +#. We don't change the exit status here because this is really +#. only an information. +#: src/msgfmt.c:491 +#, c-format +msgid "`domain %s' directive ignored" +msgstr "directiva `dom�nio %s' ignorada" + +#: src/msgfmt.c:519 +msgid "empty `msgstr' entry ignored" +msgstr "elemento `msgstr' vazio ignorada" + +#: src/msgfmt.c:520 +#, fuzzy +msgid "fuzzy `msgstr' entry ignored" +msgstr "elemento `msgstr' vazio ignorada" + +#: src/msgfmt.c:563 +#, c-format +msgid "headerfield `%s' missing in header" +msgstr "o campo `%s' falta no cabe�alho" + +#: src/msgfmt.c:566 +#, c-format +msgid "header field `%s' should start at beginning of line" +msgstr "o campo `%s' do cabe�alho deve come�ar no in�cio da linha" + +#: src/msgfmt.c:576 +#, fuzzy +msgid "some header fields still have the initial default value" +msgstr "alguns campos do cabe�alho ainda t�m o valor inicial por defeito" + +#: src/msgfmt.c:587 +#, c-format +msgid "field `%s' still has initial default value" +msgstr "o campo `%s' ainda tem o valor por defeito inicial" + +#: src/msgfmt.c:672 +#, fuzzy, c-format +msgid "%s: warning: source file contains fuzzy translation" +msgstr "CUIDADO: o ficheiro fonte cont�m tradu��es aproximadas" + +#: src/msgfmt.c:874 +#, fuzzy +msgid "`msgid' and `msgstr' entries do not both begin with '\\n'" +msgstr "os campos `msgid' e `msgstr' n�o come�am ambos por '\\n'" + +#: src/msgfmt.c:882 +#, fuzzy +msgid "`msgid' and `msgstr' entries do not both end with '\\n'" +msgstr "os campos `msgid' e `msgstr' n�o terminam ambos por '\\n'" + +#: src/msgfmt.c:896 +msgid "number of format specifications in `msgid' and `msgstr' does not match" +msgstr "o n�mero de especifica��es em `msgid' e `msgstr' � diferente" + +#: src/msgfmt.c:913 +#, c-format +msgid "format specifications for argument %u are not the same" +msgstr "as especifica��es do argumento %u s�o diferentes" + +#: src/msgmerge.c:306 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent indented output style\n" +" -o, --output-file=FILE result will be written to FILE\n" +" --no-location suppress '#: filename:line' lines\n" +" --add-location preserve '#: filename:line' lines (default)\n" +" --strict strict Uniforum output style\n" +" -v, --verbose increase verbosity level\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Utiliza��o: %s [OP��O] def.po ref.po\n" +"Os argumentos obrigat�rios para as op��es longas s�o igualmente\n" +"obrigat�rios para as op��es curtas.\n" +" -D, --directory=DIRECT�RIO adiciona DIRECT�RIO � lista de procura para\n" +" os ficheiros de entrada\n" +" -e, --no-escape n�o usa sequ�ncias de escape do C na sa�da\n" +" (op��o por defeito)\n" +" -E, --escape usa sequ�ncias de escape do C na sa�da, n�o\n" +" usando caracteres especiais\n" +" -h, --help mostra esta ajuda e sai\n" +" -i, --indent modo de sa�da alinhado\n" +" -o, --output-file=FICHEIRO os resultados de sa�da ser�o escritos no FICHEIRO\n" +" --strict modo de sa�da Uniforum estrito\n" +" -v, --verbose aumenta o n�vel de verbosidade da sa�da\n" +" -V, --version mostra a informa��o de vers�o e sai\n" +" -w, --width=N�MERO especifica a largura de p�gina na sa�da\n" + +#: src/msgmerge.c:324 +#, no-wrap +msgid "" +"\n" +"Merges two Uniforum style .po files together. The def.po file is an\n" +"existing PO file with the old translations which will be taken over to\n" +"the newly created file as long as they still match; comments will be\n" +"preserved, but extract comments and file positions will be discarded.\n" +"The ref.po file is the last created PO file (generally by xgettext), any\n" +"translations or comments in the file will be discarded, however dot\n" +"comments and file positions will be preserved. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better results. The\n" +"results are written to stdout unless an output file is specified.\n" +msgstr "" +"\n" +"Combina 2 ficheiros .po do tipo Uniforum num s�. O ficheiro def.po\n" +"dever� ser um ficheiro PO existente com as tradu��es a manter no novo\n" +"ficheiro criado, desde que ainda aplic�veis; os coment�rios ser�o\n" +"mantidos, mas os coment�rios relativos � extra��o das mensagens e das\n" +"suas posi��es nos ficheiros ser�o eliminados. O ficheiro ref.po dever�\n" +"ser o �ltimo ficheiro PO criado (geralmente pelo xgettext); todas as\n" +"tradu��es e coment�rios neste ficheiro ser�o eliminados, sendo\n" +"preservados os coment�rios e as posi��es nos ficheiros. Quando um\n" +"emparelhamento exacto n�o puder ser efectuado � efectuado um\n" +"emparelhamento aproximado para produzir melhores resultados. Os\n" +"resultados ser�o escritos no canal de sa�da por defeito (stdout) a\n" +"menos que seja especificado um ficheiro de sa�da.\n" + +#: src/msgmerge.c:772 +#, c-format +msgid "" +"%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete " +"%d.\n" +msgstr "" +"%sLidas %d antigas + %d refer�ncias, combinadas %d, aproximadas %d, faltam " +"%d, obsoletas %d.\n" + +#: src/msgmerge.c:778 +msgid " done.\n" +msgstr "terminado.\n" + +#: src/msgunfmt.c:215 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [FILE]...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent write indented output style\n" +" -o, --output-file=FILE write output into FILE instead of standard output\n" +" --strict write strict uniforum style\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Utiliza��o: %s [OP��O] [FICHEIRO]...\n" +"Os argumentos obrigat�rios para as op��es longas s�o igualmente\n" +"obrigat�rios para as op��es curtas.\n" +" -e, --no-escape n�o usa sequ�ncias de escape do C na sa�da\n" +" (op��o por defeito)\n" +" -E, --escape usa sequ�ncias de escape do C na sa�da, n�o\n" +" usando caracteres especiais\n" +" -h, --help mostra esta ajuda e sai\n" +" -i, --indent usa o modo de sa�da alinhado\n" +" -o, --output-file=FICHEIRO os resultados de sa�da ser�o escritos no FICHEIRO\n" +" em vez do canal de sa�da por defeito (stdout)\n" +" --strict usa o modo de sa�da Uniforum estrito\n" +" -V, --version mostra a informa��o de vers�o e sai\n" +" -w, --width=N�MERO especifica a largura de p�gina na sa�da\n" + +#: src/msgunfmt.c:229 +#, no-wrap +msgid "" +"\n" +"Convert binary .mo files to Uniforum style .po files.\n" +"Both little-endian and big-endian .mo files are handled.\n" +"If no input file is given or it is -, standard input is read.\n" +"By default the output is written to standard output.\n" +msgstr "" +"\n" +"Converte ficheiros .mo bin�rios em ficheiros .po no modo Uniforum.\n" +"Ficheiros .mo \"little-endian\" e \"big-endian\" s�o simultaneamente\n" +"tratados. Se n�o for indicado ficheiro de entrada ou este for -, �\n" +"usado o canal de entrada stdin. Por defeito a sa�da � escrita no\n" +"stdout.\n" + +#: src/msgunfmt.c:266 src/msgunfmt.c:330 src/po-lex.c:185 src/xget-lex.c:254 +#, c-format +msgid "error while reading \"%s\"" +msgstr "erro durante a leitura de \"%s\"" + +#: src/msgunfmt.c:267 src/msgunfmt.c:331 +#, c-format +msgid "file \"%s\" truncated" +msgstr "ficheiro \"%s\"truncado" + +#: src/msgunfmt.c:298 +#, fuzzy, c-format +msgid "seek \"%s\" offset %ld failed" +msgstr "seek \"%s\" offset %ld falhou" + +#: src/msgunfmt.c:373 +#, c-format +msgid "file \"%s\" is not in GNU .mo format" +msgstr "o ficheiro \"%s\" n�o est� no formato .mo GNU" + +#: ../../src/po-gram.y:83 +msgid "missing `msgstr' section" +msgstr "falta a sec��o `msgstr'" + +#: src/po-lex.c:84 +#, c-format +msgid "found %d fatal errors" +msgstr "encontrados %d erros fatais" + +#: src/po-lex.c:129 src/po-lex.c:168 +msgid "too many errors, aborting" +msgstr "demasiados erros, interrompendo" + +#: src/po-lex.c:241 +#, c-format +msgid "keyword \"%s\" unknown" +msgstr "palavra chave \"%s\" desconhecida" + +#: src/po-lex.c:332 +msgid "illegal control sequence" +msgstr "sequ�ncia de controlo ilegal" + +#: src/po-lex.c:415 +msgid "end-of-line within string" +msgstr "fim-de-linha dentro da cadeia" + +#: src/po-lex.c:420 +msgid "end-of-file within string" +msgstr "fim-de-ficheiro dentro da cadeia" + +#: src/xget-lex.c:150 +msgid "standard input" +msgstr "entrada standard" + +#: src/xget-lex.c:892 +#, c-format +msgid "%s:%d: warning: unterminated character constant" +msgstr "" + +#: src/xget-lex.c:914 +#, c-format +msgid "%s:%d: warning: unterminated string literal" +msgstr "" + +#: src/xgettext.c:386 +msgid "--join-existing cannot be used when output is written to stdout" +msgstr "" +"--join-existing n�o pode ser usada quando a sa�da\n" +"� escrita no stdout" + +#: src/xgettext.c:501 +#, fuzzy, c-format +msgid "warning: file `%s' extension `%s' is unknown; will try C" +msgstr "" +"cuidado: o tipo do ficheiro `%s' com a extens�o `%s' � desconhecido;\n" +"ser� tentado C" + +#: src/xgettext.c:537 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Extract translatable string from given input files.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --extract-all extract all strings\n" +" -c, --add-comments[=TAG] place comment block with TAG (or those\n" +" preceding keyword lines) in output file\n" +" -C, --c++ shorthand for --language=C++\n" +" --debug more detailed formatstring recognision result\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" --foreign-user omit FSF copyright in output for foreign user\n" +" -F, --sort-by-file sort output by file location\n" +msgstr "" +"Utiliza��o: %s [OP��O] FICHEIRODEENTRADA...\n" +"Os argumentos obrigat�rios para as op��es longas s�o igualmente\n" +"obrigat�rios para as op��es curtas.\n" +" -a, --extract-all extrai todas as cadeias\n" +" -c, --add-comments[=TAG] coloca o bloco comentado com TAG (ou as\n" +" linhas de cabe�alho precedentes) no ficheiro\n" +" de sa�da.\n" +" -C, --c++ reconhece coment�rios do tipo C++\n" +" --debug produz resultados mais detalhados do\n" +" reconhecimento das cadeias de formata��o\n" +" -d, --default-domain=NOME usa NOME.po para a sa�da (em vez de\n" +" messages.po)\n" +" -D, --directory=DIRECT�RIO adiciona DIRECT�RIO � lista de procura para\n" +" \" os ficheiros de entrada\n" +" -e, --no-escape n�o usa sequ�ncias de escape do C na sa�da\n" +" (op��o por defeito)\n" +" -E, --escape usa sequ�ncias de escape do C na sa�da, n�o\n" +" usando caracteres especiais\n" +" -f, --files-from=FICHEIRO obt�m lista de ficheiros de entrada de\n" +" FICHEIRO\n" +" --force-po escreve o ficheiro PO mesmo se este estiver\n" +" vazio\n" +" -F, --sort-by-file ordena a sa�da pela localiza��o dos ficheiros\n" + +#: src/xgettext.c:557 +#, fuzzy, c-format, no-wrap +msgid "" +" -h, --help display this help and exit\n" +" -i, --indent write the .po file using indented style\n" +" -j, --join-existing join messages with existing file\n" +" -k, --keyword[=WORD] additonal keyword to be looked for (without\n" +" WORD means not to use default keywords)\n" +" -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n" +" -L, --language=NAME recognise the specified language (C, C++, PO),\n" +" otherwise is guessed from file extension\n" +" -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n" +" -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n" +" --no-location do not write '#: filename:line' lines\n" +msgstr "" +" -h, --help mostra esta ajuda e sai\n" +" -i, --indent escreve o ficheiro .po usando o modo de\n" +" sa�da alinhado\n" +" -j, --join-existing combina as mensagens com o ficheiro existente\n" +" -k, --keyword[=PALAVRA] palavra chave adicional a ser procurada\n" +" (sem PALAVRA significa n�o usar as palavras\n" +" chave por defeito)\n" +" -l, --string-limit=N�MERO especifica o tamanho m�ximo das cadeias como\n" +" N�MERO, em vez de %u\n" +" -m, --msgstr-prefix[=CADEIA] usa CADEIA or \"\" como prefixo para os\n" +" campos `msgstr'\n" +" -M, --msgstr-suffix[=STRING] usa CADEIA ou \"\" como sufixo para as cadeias\n" +" `msgstr'\n" +" --no-location n�o escreve linhas do tipo '#: filename:line'\n" + +#: src/xgettext.c:571 +#, fuzzy, no-wrap +msgid "" +" -n, --add-location generate '#: filename:line' lines (default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory DIR\n" +" -s, --sort-output generate sorted output and remove duplicates\n" +" --strict write out strict Uniforum conforming .po file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -x, --exclude-file=FILE entries from FILE are not extracted\n" +"\n" +"If INPUTFILE is -, standard input is read.\n" +msgstr "" +" -n, --add-location gera linhas do tipo '#: filename:line'\n" +" (op��o utilizada por defeito)\n" +" --omit-header n�o escreve cabe�alhos com campos `msgid\"\"'\n" +" -p, --output-dir=DIR os ficheiros de sa�da ser�o colocados no\n" +" direct�rio DIR\n" +" -s, --sort-output gera resultados ordenados, removendo os\n" +" duplicados\n" +" --strict escreve um ficheiro .po de acordo com o\n" +" modo Uniforum estrito\n" +" -T, --trigraphs entende trigrafos ANSI C na entrada\n" +" -V, --version mostra a informa��o de vers�o e sai\n" +" -w, --width=N�MERO especifica a largura de p�gina na sa�da\n" +" -x, --exclude-file=FICHEIRO os campos do FICHEIRO n�o s�o extra�dos\n" +"\n" +"Se o ficheiro de entrada for -, o canal de entrada por defeito (stdin) �\n" +"usado.\n" + +#: src/xgettext.c:1344 +#, c-format +msgid "language `%s' unknown" +msgstr "" + +#~ msgid "this is the location of the first definition" +#~ msgstr "este � o local da primeira defini��o" + +#~ msgid "duplicate message ID" +#~ msgstr "ID de mensagem duplicada" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/sl.gmo b/debian/gettext-kde/gettext-kde-0.10.35/po/sl.gmo Binary files differnew file mode 100644 index 00000000..5cdb6c51 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/sl.gmo diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/sl.po b/debian/gettext-kde/gettext-kde-0.10.35/po/sl.po new file mode 100644 index 00000000..d4481af1 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/sl.po @@ -0,0 +1,807 @@ +# Slovenian messages for GNU gettext package. +# Copyright (C) 1996 Free Software Foundation, Inc. +# Primoz Peterlin <[email protected]>, 1996. +# +# $Header: /home/drepper/fsf/gettext/po/RCS/sl.po,v 1.4 1996/09/18 16:01:47 drepper Exp drepper $ +# +msgid "" +msgstr "" +"Project-Id-Version: GNU gettext 0.10.24\n" +"POT-Creation-Date: 1998-04-30 22:50-0700\n" +"PO-Revision-Date: 1996-09-12 21:15\n" +"Last-Translator: Primoz Peterlin <[email protected]>\n" +"Language-Team: Slovenian <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-2\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: lib/error.c:103 +msgid "Unknown system error" +msgstr "Neznana sistemska napaka" + +#: lib/getopt.c:680 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: izbira ,%s' je dvoumna\n" + +#: lib/getopt.c:704 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: izbira ,--%s' ne dovoljuje argumenta\n" + +#: lib/getopt.c:709 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: izbira ,%c%s' ne dovoljuje argumenta\n" + +#: lib/getopt.c:726 lib/getopt.c:899 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: izbira ,%s' zahteva argument\n" + +#. --option +#: lib/getopt.c:755 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: neprepoznana izbira ,--%s'\n" + +#. +option or -option +#: lib/getopt.c:759 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: neprepoznana izbira ,%c%s'\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:785 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: nedovoljena izbira -- %c\n" + +#: lib/getopt.c:788 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: neveljavna izbira -- %c\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:818 lib/getopt.c:948 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: izbira zahteva argument -- %c\n" + +#: lib/getopt.c:865 +#, fuzzy, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: izbira ,%s' je dvoumna\n" + +#: lib/getopt.c:883 +#, fuzzy, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: izbira ,--%s' ne dovoljuje argumenta\n" + +# Morda ,,Zmanjkalo pomnilnika''? +#: lib/xmalloc.c:82 +#, fuzzy +msgid "Memory exhausted" +msgstr "pomnilnik iz�rpan" + +#: src/gettextp.c:134 src/msgcmp.c:144 src/msgcomm.c:285 src/msgfmt.c:257 +#: src/msgmerge.c:254 src/msgunfmt.c:175 src/xgettext.c:394 +#, c-format, no-wrap +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" + +#: src/gettextp.c:139 src/msgcmp.c:149 src/msgcomm.c:290 src/msgfmt.c:262 +#: src/msgmerge.c:259 src/msgunfmt.c:180 src/xgettext.c:399 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#: src/gettextp.c:154 +msgid "missing arguments" +msgstr "argumenti manjkajo" + +#: src/gettextp.c:164 +msgid "too many arguments" +msgstr "preve� argumentov" + +#: src/gettextp.c:228 src/msgcmp.c:181 src/msgcomm.c:395 src/msgfmt.c:361 +#: src/msgmerge.c:301 src/msgunfmt.c:210 src/xgettext.c:532 +#, fuzzy, c-format +msgid "Try `%s --help' for more information.\n" +msgstr "Poskusite ,%s --help' za iz�rpnej�a navodila\n" + +#: src/gettextp.c:233 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n" +" -e enable expansion of some escape sequences\n" +" -E (ignored for compatibility)\n" +" -h, --help display this help and exit\n" +" -n suppress trailing newline\n" +" -V, --version display version information and exit\n" +" [TEXTDOMAIN] MSGID retrieve translated message corresponding\n" +" to MSGID from TEXTDOMAIN\n" +msgstr "" +"Usage: %s [IZBIRA] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n" +" -e enable expansion of some escape sequences\n" +" -E (ignored for compatibility)\n" +" -h, --help display this help and exit\n" +" -n suppress trailing newline\n" +" -V, --version display version information and exit\n" +" [TEXTDOMAIN] MSGID retrieve translated message corresponding\n" +" to MSGID from TEXTDOMAIN\n" + +#: src/gettextp.c:245 +#, c-format, no-wrap +msgid "" +"\n" +"If the TEXTDOMAIN parameter is not given, the domain is determined from the\n" +"environment variable TEXTDOMAIN. If the message catalog is not found in the\n" +"regular directory, another location can be specified with the environment\n" +"variable TEXTDOMAINDIR.\n" +"When used with the -s option the program behaves like the `echo' command.\n" +"But it does not simply copy its arguments to stdout. Instead those messages\n" +"found in the selected catalog are translated.\n" +"Standard search directory: %s\n" +msgstr "" +"\n" +"�e parameter TEXTDOMAIN ni podan, se uporabi vrednost spremenljivke TEXTDOMAIN\n" +"iz okolja. �e kataloga sporo�il ni mo� najti na obi�ajnem mestu, lahko \n" +"dolo�imo alternativno lokacijo s spremenljivko TEXTDOMAINDIR.\n" +"Z izbiro -s se program obna�a podobno kot ukaz ,echo', s to razliko, da\n" +"na standardni izhod niso prepisani argumenti, ampak njihovi prevodi iz kataloga\n" +"sporo�il.\n" +"Privzet imenik s katalogom sporo�il: %s\n" + +#: src/gettextp.c:255 src/msgcmp.c:200 src/msgcomm.c:442 src/msgfmt.c:388 +#: src/msgmerge.c:334 src/msgunfmt.c:234 src/xgettext.c:584 +msgid "Report bugs to <[email protected]>.\n" +msgstr "" + +#: src/message.c:784 +#, c-format +msgid "" +"internationalized messages should not contain the `\\%c' escape sequence" +msgstr "" +"internacionalizirana sporo�ila ne smejo vsebovati ube�ne sekvence ,\\%c'" + +#: src/message.c:1115 +#, c-format +msgid "cannot create output file \"%s\"" +msgstr "izhodne datoteke \"%s\" ni mogo�e ustvariti" + +#: src/message.c:1122 +#, no-c-format +msgid "standard output" +msgstr "standardni izhod" + +#: src/message.c:1182 +#, c-format +msgid "error while writing \"%s\" file" +msgstr "napaka pri pisanju na datoteko \"%s\"" + +#: src/msgcmp.c:160 src/msgmerge.c:270 +msgid "no input files given" +msgstr "vhodni datoteki nista podani" + +#: src/msgcmp.c:165 src/msgmerge.c:275 +msgid "exactly 2 input files required" +msgstr "potrebni sta natan�no dve vhodni datoteki" + +#: src/msgcmp.c:186 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -h, --help display this help and exit\n" +" -V, --version output version information and exit\n" +"\n" +"Compare two Uniforum style .po files to check that both contain the same\n" +"set of msgid strings. The def.po file is an existing PO file with the\n" +"old translations. The ref.po file is the last created PO file\n" +"(generally by xgettext). This is useful for checking that you have\n" +"translated each and every message in your program. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better diagnostics.\n" +msgstr "" +"Uporaba: %s [IZBIRA] def.po ref.po\n" +"Argumenti, obvezni za dolge oblike izbire, so obvezni tudi za kratke.\n" +" -D, --directory=IMENIK vhodne datoteke i��emo tudi v imeniku IMENIK\n" +" -h, --help ta navodila\n" +" -V, --version verzija programa\n" +"\n" +"Preverimo, �e dve podani datoteki v obliki Uniforum vsebujeta isti nabor\n" +"sporo�il msgid. Datoteka def.po je obstoje�a datoteka PO s starimi prevodi,\n" +"datoteka ref.po pa nazadnje ustvarjena datoteka PO (v splo�nem z xgettext).\n" +"To je uporabno, ko �elimo preveriti, �e so prevedena res vsa sporo�ila\n" +"v programu. Kadar ne najdemo natan�nega ujemanja msgid, zaradi bolj�e\n" +"diagnostike poskusimo z ohlapnim (fuzzy) algoritmom.\n" + +#: src/msgcmp.c:259 src/msgmerge.c:714 +msgid "this message is used but not defined..." +msgstr "to sporo�ilo je uporabljeno, a ne definirano..." + +#: src/msgcmp.c:261 src/msgmerge.c:716 +msgid "...but this definition is similar" +msgstr "...a ta definicija je podobna" + +#: src/msgcmp.c:267 src/msgmerge.c:743 +#, c-format +msgid "this message is used but not defined in %s" +msgstr "to sporo�ilo je uporabljeno, a ne definirano v %s" + +#: src/msgcmp.c:281 +msgid "warning: this message is not used" +msgstr "pozor: to sporo�ilo ni uporabljeno" + +#: src/msgcmp.c:355 src/msgfmt.c:632 src/msgmerge.c:493 src/xgettext.c:1063 +msgid "duplicate message definition" +msgstr "podvojena definicija sporo�ila" + +#: src/msgcmp.c:356 src/msgfmt.c:633 src/msgmerge.c:494 src/xgettext.c:1064 +msgid "...this is the location of the first definition" +msgstr "...to je kraj prve definicije" + +#: src/msgcmp.c:396 src/msgmerge.c:542 +#, c-format +msgid "this message has no definition in the \"%s\" domain" +msgstr "to sporo�ilo ni definirano v domeni \"%s\"" + +#. We are about to construct the absolute path to the +#. directory for the output files but asprintf failed. +#: src/msgcomm.c:238 src/xgettext.c:340 src/xgettext.c:1258 +msgid "while preparing output" +msgstr "med pripravo izpisa" + +#: src/msgcomm.c:273 src/msgcomm.c:277 src/xgettext.c:378 src/xgettext.c:382 +#, c-format +msgid "%s and %s are mutually exclusive" +msgstr "%s in %s se med seboj izklju�ujeta" + +#: src/msgcomm.c:341 +msgid "at least two files must be specified" +msgstr "" + +#: src/msgcomm.c:360 +#, c-format +msgid "impossible selection criteria specified (%d < n < %d)" +msgstr "" + +# POZOR! Nepopolni prevodi +#: src/msgcomm.c:400 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" -F, --sort-by-file sort output by file location\n" +" -h, --help display this help and exit\n" +msgstr "" +"Uporaba: %s [IZBIRA] VHODNA_DATOTEKA ...\n" +"Argumenti, obvezni za dolge oblike izbire, so obvezni tudi za kratke.\n" +" -a, --extract-all iz datotek potegnemo vse nize\n" +" -c, --add-comments[=ZNA�KA] komentarji ozna�eni z ZNA�KO (ali tisti\n" +" pred vrsticami s klju�nimi besedami) naj se\n" +" izpi�ejo\n" +" -C, --c++ prepoznavanje komentarjev v stilu C++\n" +" -d, --default-domain=IME izhod na IME.po (namesto messages.po)\n" +" -D, --directory=IMENIK vhodne datoteke i��emo tudi v imeniku IMENIK\n" +" -e, --no-escape brez ube�nih sekvenc v stilu C (privzeto)\n" +" -E, --escape z ube�nimi sekvencami C, brez raz�irjenega\n" +" nabora znakov\n" +" -f, --files-from=DATOTEKA seznam vhodnih datotek preberemo z DATOTEKE\n" +" --force-po datoteko PO zapi�emo, �etudi je prazna\n" +" -F, --sort-by-file izhod sortiramo po lokaciji datotek\n" + +# POZOR! Nepopolni prevodi +#: src/msgcomm.c:412 +#, fuzzy +msgid "" +" -i, --indent write the .po file using indented style\n" +" --no-location do not write '#: filename:line' lines\n" +" -n, --add-location generate '#: filename:line' lines " +"(default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory " +"DIR\n" +" -s, --sort-output generate sorted output and remove " +"duplicates\n" +" --strict write out strict Uniforum conforming .po " +"file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -u, --unique shorthand for --less-than=2, requests\n" +" that only unique messages be printed\n" +msgstr "" +" -n, --add-location z vrsticami '#: filename:line' (privzeto)\n" +" --omit-header brez glave z ,msgid \"\"'\n" +" -p, --output-dir=IMENIK izhodne datoteke zapisane v IMENIK\n" +" -s, --sort-output sortiran izpis brez podvojenih vnosov\n" +" --strict strogi stil Uniforum pri izpisu datoteke " +".po\n" +" -T, --trigraphs razumi trigrafe ANSI C na vhodu\n" +" -V, --version verzija programa\n" +" -w, --width=�TEVILO �irina vrstice pri izpisu, v znakih\n" +" -x, --exclude-file=DATOTEKA entries from FILE are not extracted\n" +"\n" +"�e je ime vhodne datoteke - (minus), beremo s standardnega vhoda.\n" + +#: src/msgcomm.c:425 +msgid "" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -<, --less-than=NUMBER print messages with less than this many\n" +" definitions, defaults to infinite if not\n" +" set\n" +" ->, --more-than=NUMBER print messages with more than this many\n" +" definitions, defaults to 1 if not set\n" +"\n" +"Find messages which are common to two or more of the specified PO files.\n" +"By using the --more-than option, greater commonality may be requested\n" +"before messages are printed. Conversely, the --less-than option may be\n" +"used to specify less commonality before messages are printed (i.e.\n" +"--less-than=2 will only print the unique messages). Translations,\n" +"comments and extract comments will be preserved, but only from the first\n" +"PO file to define them. File positions from all PO files will be\n" +"preserved.\n" +msgstr "" + +#: src/msgcomm.c:476 src/msgunfmt.c:357 src/po-lex.c:74 src/xget-lex.c:159 +#: src/xget-lex.c:174 src/xget-lex.c:191 src/xgettext.c:618 +#, c-format +msgid "error while opening \"%s\" for reading" +msgstr "datoteke \"%s\" ni mo� odpreti za branje" + +#: src/msgcomm.c:557 src/xgettext.c:660 src/xgettext.c:970 +msgid "this file may not contain domain directives" +msgstr "ta datoteka morda ne vsebuje direktiv domene" + +#: src/msgfmt.c:273 src/xgettext.c:410 +msgid "no input file given" +msgstr "vhodna datoteka ni podana" + +#: src/msgfmt.c:321 +#, c-format +msgid "error while opening \"%s\" for writing" +msgstr "napaka pri pisanju na \"%s\"" + +#: src/msgfmt.c:343 +#, fuzzy, c-format +msgid "%d translated messages" +msgstr "%d prevedenih sporo�il" + +#: src/msgfmt.c:345 +#, c-format +msgid ", %d fuzzy translations" +msgstr ", %d ohlapnih prevodov" + +#: src/msgfmt.c:347 +#, fuzzy, c-format +msgid ", %d untranslated messages" +msgstr ", %d neprevedenih sporo�il" + +#: src/msgfmt.c:366 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] filename.po ...\n" +"Generate binary message catalog from textual translation description.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n" +" -c, --check perform language dependent checks on strings\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -f, --use-fuzzy use fuzzy entries in output\n" +" -h, --help display this help and exit\n" +" --no-hash binary file will not include the hash table\n" +" -o, --output-file=FILE specify output file name as FILE\n" +" --statistics print statistics about translations\n" +" --strict enable strict Uniforum mode\n" +" -v, --verbose list input file anomalies\n" +" -V, --version output version information and exit\n" +"\n" +"Giving the -v option more than once increases the verbosity level.\n" +"\n" +"If input file is -, standard input is read. If output file is -,\n" +"output is written to standard output.\n" +msgstr "" +"Uporaba: %s [IZBIRA] filename.po ...\n" +"Argumenti, obvezni za dolge oblike izbire, so obvezni tudi za kratke.\n" +" -a, --alignment=�TEVILO poravnaj nize znakov na �TEVILO bytov (privzeto: %d)\n" +" -c, --check na nizih izvedi teste, odvisne od jezika\n" +" -D, --directory=IMENIK vhodne datoteke i��emo tudi v imeniku IMENIK\n" +" -f, --use-fuzzy uporaba ohlapnih prevodov pri izpisu\n" +" -h, --help ta navodila\n" +" --no-hash binarna datoteka naj bo brez razpr�ne tabele\n" +" -o, --output-file=DATOTEKA izhodna DATOTEKA\n" +" --statistics s statistiko glede prevodov\n" +" --strict stroga oblika Uniforum\n" +" -v, --verbose z izpisom anomalij vhodne datoteke\n" +" -V, --version verzija programa\n" +"\n" +"�e je kot ime vhodne datoteke navedeno - (minus), program bere s standardnega\n" +"vhoda. �e je kot ime izhodne datoteke navedeno - (minus), program pi�e na\n" +"standardni izhod.\n" + +#: src/msgfmt.c:409 +msgid "while creating hash table" +msgstr "med ustvarjanjem razpr�ene tabele" + +#: src/msgfmt.c:451 +#, fuzzy, c-format +msgid "%s: warning: no header entry found" +msgstr "pozor: glava manjka" + +#: src/msgfmt.c:473 +#, c-format +msgid "domain name \"%s\" not suitable as file name" +msgstr "ime domene \"%s\" ni primerno kot ime datoteke" + +#: src/msgfmt.c:478 +#, c-format +msgid "domain name \"%s\" not suitable as file name: will use prefix" +msgstr "ime domene \"%s\" ni primerno kot ime datoteke: uporabimo predpono" + +#. We don't change the exit status here because this is really +#. only an information. +#: src/msgfmt.c:491 +#, c-format +msgid "`domain %s' directive ignored" +msgstr "direktiva ,domain %s' ni bila upo�tevana" + +#: src/msgfmt.c:519 +msgid "empty `msgstr' entry ignored" +msgstr "prazno polje ,msgstr' ignorirano" + +#: src/msgfmt.c:520 +#, fuzzy +msgid "fuzzy `msgstr' entry ignored" +msgstr "ohlapen vnos za polje ,msgstr' ignoriran" + +#: src/msgfmt.c:563 +#, c-format +msgid "headerfield `%s' missing in header" +msgstr "v glavi manjka polje ,%s'" + +#: src/msgfmt.c:566 +#, c-format +msgid "header field `%s' should start at beginning of line" +msgstr "polje ,%s' v glavi se mora za�eti na za�etku vrstice" + +#: src/msgfmt.c:576 +msgid "some header fields still have the initial default value" +msgstr "nekatera polja v glavi imajo �e vedno za�etne privzete vrednosti" + +#: src/msgfmt.c:587 +#, c-format +msgid "field `%s' still has initial default value" +msgstr "polje ,%s' ima �e vedno za�etno privzeto vrednost" + +#: src/msgfmt.c:672 +#, fuzzy, c-format +msgid "%s: warning: source file contains fuzzy translation" +msgstr "POZOR: vhodna datoteka vsebuje ohlapne (fuzzy) prevode" + +#: src/msgfmt.c:874 +#, fuzzy +msgid "`msgid' and `msgstr' entries do not both begin with '\\n'" +msgstr "polji ,msgid' in ,msgstr' se ne za�neta obe z ,\\n'" + +#: src/msgfmt.c:882 +#, fuzzy +msgid "`msgid' and `msgstr' entries do not both end with '\\n'" +msgstr "polji ,msgid' in ,msgstr' se ne kon�ata obe z ,\\n'" + +#: src/msgfmt.c:896 +msgid "number of format specifications in `msgid' and `msgstr' does not match" +msgstr "�tevili formatnih dolo�il v ,msgid' in ,msgstr' se ne ujemata" + +#: src/msgfmt.c:913 +#, c-format +msgid "format specifications for argument %u are not the same" +msgstr "formatni dolo�ili za argument %u nista enaki" + +#: src/msgmerge.c:306 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent indented output style\n" +" -o, --output-file=FILE result will be written to FILE\n" +" --no-location suppress '#: filename:line' lines\n" +" --add-location preserve '#: filename:line' lines (default)\n" +" --strict strict Uniforum output style\n" +" -v, --verbose increase verbosity level\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Uporaba: %s [IZBIRA] def.po ref.po\n" +"Argumenti, obvezni za dolge oblike izbire, so obvezni tudi za kratke.\n" +" -D, --directory=IMENIK vhodne datoteke i��emo tudi v imeniku IMENIK\n" +" -e, --no-escape brez ube�nih sekvenc v stilu C (privzeto)\n" +" -E, --escape z ube�nimi sekvencami C, brez raz�irjenega nabora\n" +" znakov\n" +" -h, --help ta navodila\n" +" -i, --indent izpis z zamiki\n" +" -o, --output-file=DATOTEKA izhodna DATOTEKA\n" +" --strict strogi stil Uniforum pri izpisu\n" +" -v, --verbose z dodatnimi sporo�ili med potekom\n" +" -V, --version verzija programa\n" +" -w, --width=�TEVILO �irina strani pri izpisu, v znakih\n" + +#: src/msgmerge.c:324 +#, no-wrap +msgid "" +"\n" +"Merges two Uniforum style .po files together. The def.po file is an\n" +"existing PO file with the old translations which will be taken over to\n" +"the newly created file as long as they still match; comments will be\n" +"preserved, but extract comments and file positions will be discarded.\n" +"The ref.po file is the last created PO file (generally by xgettext), any\n" +"translations or comments in the file will be discarded, however dot\n" +"comments and file positions will be preserved. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better results. The\n" +"results are written to stdout unless an output file is specified.\n" +msgstr "" +"\n" +"Zdru�i dve datoteki .po v stilu Uniforum. Datoteka def.po je obstoje�a\n" +"datoteka s starimi prevodi, ki bodo, kadar se ujemajo, prene�eni v novo\n" +"datoteko. Pri prevedbi se komentarji prevajalca ohranijo, strojno ustvarjeni\n" +"komentarji in podatki o �tevilki vrstice pa ne. Datoteka ref.po je nazadnje\n" +"ustvarjena datoteka PO (v splo�nem z xgettext). Kakrksnikoli prevodi ali\n" +"komentarji prevajalca v njej bodo zavr�eni, ohranjeni pa bodo strojno\n" +"ustvarjeni komentarji in podatki o �tevilki vrstice. Kjer eksaktnega prevoda\n" +"ni, se uporabi ohlapni (fuzzy) algoritem. �e izhodna datoteka ni podana, gre\n" +"izpis na standardni izhod.\n" + +#: src/msgmerge.c:772 +#, c-format +msgid "" +"%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete " +"%d.\n" +msgstr "" +"%sPrebrano %d starih + %d referen�nih, zdru�enih %d, ohlapnih %d, " +"manjkajo�ih %d, zastarelih %d.\n" + +#: src/msgmerge.c:778 +msgid " done.\n" +msgstr " opravljeno.\n" + +#: src/msgunfmt.c:215 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [FILE]...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent write indented output style\n" +" -o, --output-file=FILE write output into FILE instead of standard output\n" +" --strict write strict uniforum style\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Uporaba: %s [IZBIRA] [DATOTEKA]\n" +"Argumenti, obvezni za dolge oblike izbire, so obvezni tudi za kratke.\n" +" -e, --no-escape brez ube�nih sekvenc v stilu C (privzeto)\n" +" -E, --escape z ube�nimi sekvencami C, brez raz�irjenega nabora\n" +" znakov\n" +" -h, --help ta navodila\n" +" -i, --indent izpis z zamiki\n" +" -o, --output-file=DATOTEKA izhodna DATOTEKA\n" +" --strict strogi stil Uniforum pri izpisu\n" +" -V, --version verzija programa\n" +" -w, --width=�TEVILO �irina strani pri izpisu, v znakih\n" + +#: src/msgunfmt.c:229 +#, no-wrap +msgid "" +"\n" +"Convert binary .mo files to Uniforum style .po files.\n" +"Both little-endian and big-endian .mo files are handled.\n" +"If no input file is given or it is -, standard input is read.\n" +"By default the output is written to standard output.\n" +msgstr "" +"\n" +"Pretvorba datoteke iz binarne oblike .mo v obliko Uniforum .po\n" +"Datoteke .mo so lahko little-endian ali big-endian.\n" +"�e vhodna datoteka ni podana, ali pa je podano ime -, beremo standardni vhod.\n" +"�e ni izbrano druga�e, gre izpis na standardni izhod.\n" + +#: src/msgunfmt.c:266 src/msgunfmt.c:330 src/po-lex.c:185 src/xget-lex.c:254 +#, c-format +msgid "error while reading \"%s\"" +msgstr "napaka pri branju \"%s\"" + +#: src/msgunfmt.c:267 src/msgunfmt.c:331 +#, c-format +msgid "file \"%s\" truncated" +msgstr "datoteka \"%s\" okrnjena" + +#: src/msgunfmt.c:298 +#, c-format +msgid "seek \"%s\" offset %ld failed" +msgstr "dostop do \"%s\" ofset %ld ni mo�en" + +#: src/msgunfmt.c:373 +#, c-format +msgid "file \"%s\" is not in GNU .mo format" +msgstr "datoteka \"%s\" ni v obliki GNU .mo" + +#: ../../src/po-gram.y:83 +msgid "missing `msgstr' section" +msgstr "manjka ,msgstr'" + +#: src/po-lex.c:84 +#, c-format +msgid "found %d fatal errors" +msgstr "%d kriti�nih napak" + +#: src/po-lex.c:129 src/po-lex.c:168 +msgid "too many errors, aborting" +msgstr "preve� napak, nadaljevanje ni mo�no" + +#: src/po-lex.c:241 +#, c-format +msgid "keyword \"%s\" unknown" +msgstr "klju�na beseda \"%s\" neprepoznana" + +#: src/po-lex.c:332 +msgid "illegal control sequence" +msgstr "nedovoljena kontrolna sekvenca" + +#: src/po-lex.c:415 +msgid "end-of-line within string" +msgstr "znak za konec vrstice sredi niza" + +#: src/po-lex.c:420 +msgid "end-of-file within string" +msgstr "znak za konec datoteke sredi niza" + +#: src/xget-lex.c:150 +msgid "standard input" +msgstr "standardni vhod" + +#: src/xget-lex.c:892 +#, c-format +msgid "%s:%d: warning: unterminated character constant" +msgstr "" + +#: src/xget-lex.c:914 +#, c-format +msgid "%s:%d: warning: unterminated string literal" +msgstr "" + +#: src/xgettext.c:386 +msgid "--join-existing cannot be used when output is written to stdout" +msgstr "pri izpisu na standardni izhod ne moremo uporabiti --join-existing" + +#: src/xgettext.c:501 +#, fuzzy, c-format +msgid "warning: file `%s' extension `%s' is unknown; will try C" +msgstr "pozor: tip datoteke ,%s' s pripono ,%s' ni prepoznan; posku�amo C" + +# POZOR! Nepopolni prevodi +#: src/xgettext.c:537 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Extract translatable string from given input files.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --extract-all extract all strings\n" +" -c, --add-comments[=TAG] place comment block with TAG (or those\n" +" preceding keyword lines) in output file\n" +" -C, --c++ shorthand for --language=C++\n" +" --debug more detailed formatstring recognision result\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" --foreign-user omit FSF copyright in output for foreign user\n" +" -F, --sort-by-file sort output by file location\n" +msgstr "" +"Uporaba: %s [IZBIRA] VHODNA_DATOTEKA ...\n" +"Argumenti, obvezni za dolge oblike izbire, so obvezni tudi za kratke.\n" +" -a, --extract-all iz datotek potegnemo vse nize\n" +" -c, --add-comments[=ZNA�KA] komentarji ozna�eni z ZNA�KO (ali tisti\n" +" pred vrsticami s klju�nimi besedami) naj se\n" +" izpi�ejo\n" +" -C, --c++ prepoznavanje komentarjev v stilu C++\n" +" -d, --default-domain=IME izhod na IME.po (namesto messages.po)\n" +" -D, --directory=IMENIK vhodne datoteke i��emo tudi v imeniku IMENIK\n" +" -e, --no-escape brez ube�nih sekvenc v stilu C (privzeto)\n" +" -E, --escape z ube�nimi sekvencami C, brez raz�irjenega\n" +" nabora znakov\n" +" -f, --files-from=DATOTEKA seznam vhodnih datotek preberemo z DATOTEKE\n" +" --force-po datoteko PO zapi�emo, �etudi je prazna\n" +" -F, --sort-by-file izhod sortiramo po lokaciji datotek\n" + +#: src/xgettext.c:557 +#, fuzzy, c-format, no-wrap +msgid "" +" -h, --help display this help and exit\n" +" -i, --indent write the .po file using indented style\n" +" -j, --join-existing join messages with existing file\n" +" -k, --keyword[=WORD] additonal keyword to be looked for (without\n" +" WORD means not to use default keywords)\n" +" -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n" +" -L, --language=NAME recognise the specified language (C, C++, PO),\n" +" otherwise is guessed from file extension\n" +" -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n" +" -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n" +" --no-location do not write '#: filename:line' lines\n" +msgstr "" +" -h, --help ta navodila\n" +" -i, --indent izpis z zamiki od levega roba\n" +" -j, --join-existing zdru�i sporo�ila z obstoje�o datoteko\n" +" -k, --keyword[=BESEDA] iskanje po dodatnik klju�ih besedah (prazen\n" +" niz BESEDA pomeni brez uporabe privzetih\n" +" klju�nih besed)\n" +" -l, --string-limit=�TEVILO omejitev dol�ine niza na �TEVILO namesto %u\n" +" -m, --msgstr-prefix[=NIZ] NIZ ali \"\" kot predpona za msgstr\n" +" -M, --msgstr-suffix[=NIZ] NIZ ali \"\" kot pripona za msgstr\n" +" --no-location brez vrstic '#: filename:line'\n" + +# POZOR! Nepopolni prevodi +#: src/xgettext.c:571 +#, fuzzy, no-wrap +msgid "" +" -n, --add-location generate '#: filename:line' lines (default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory DIR\n" +" -s, --sort-output generate sorted output and remove duplicates\n" +" --strict write out strict Uniforum conforming .po file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -x, --exclude-file=FILE entries from FILE are not extracted\n" +"\n" +"If INPUTFILE is -, standard input is read.\n" +msgstr "" +" -n, --add-location z vrsticami '#: filename:line' (privzeto)\n" +" --omit-header brez glave z ,msgid \"\"'\n" +" -p, --output-dir=IMENIK izhodne datoteke zapisane v IMENIK\n" +" -s, --sort-output sortiran izpis brez podvojenih vnosov\n" +" --strict strogi stil Uniforum pri izpisu datoteke .po\n" +" -T, --trigraphs razumi trigrafe ANSI C na vhodu\n" +" -V, --version verzija programa\n" +" -w, --width=�TEVILO �irina vrstice pri izpisu, v znakih\n" +" -x, --exclude-file=DATOTEKA entries from FILE are not extracted\n" +"\n" +"�e je ime vhodne datoteke - (minus), beremo s standardnega vhoda.\n" + +#: src/xgettext.c:1344 +#, c-format +msgid "language `%s' unknown" +msgstr "" + +#~ msgid "this is the location of the first definition" +#~ msgstr "to je kraj prve definicije" + +#~ msgid "duplicate message ID" +#~ msgstr "podvojen identifikator sporo�ila" + +#~ msgid "cannot change to directory \"%s\"" +#~ msgstr "dostop do imenika \"%s\" ni mo�en" + +#~ msgid "cannot change back to directory \"%s\"" +#~ msgstr "vrnitev v imenik \"%s\" ni mo�na" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/stamp-cat-id b/debian/gettext-kde/gettext-kde-0.10.35/po/stamp-cat-id new file mode 100644 index 00000000..9788f702 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/stamp-cat-id @@ -0,0 +1 @@ +timestamp diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/sv.gmo b/debian/gettext-kde/gettext-kde-0.10.35/po/sv.gmo Binary files differnew file mode 100644 index 00000000..b8b8f2c3 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/sv.gmo diff --git a/debian/gettext-kde/gettext-kde-0.10.35/po/sv.po b/debian/gettext-kde/gettext-kde-0.10.35/po/sv.po new file mode 100644 index 00000000..39f8256e --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/po/sv.po @@ -0,0 +1,817 @@ +# Swedish messages for gettext +# Copyright � 1996 Free Software Foundation, Inc. +# Jan Dj�rv <[email protected]>, 1996. +# $Revision: 1.11 $ +# +msgid "" +msgstr "" +"Project-Id-Version: gettext 0.10.31\n" +"POT-Creation-Date: 1998-04-30 22:50-0700\n" +"PO-Revision-Date: $Date: 1997/08/27 01:11:34 $\n" +"Last-Translator: Jan Dj�rv <[email protected]>\n" +"Language-Team: Swedish <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/error.c:103 +msgid "Unknown system error" +msgstr "Ok�nt systemfel" + +#: lib/getopt.c:680 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: flaggan \"%s\" �r tvetydig\n" + +#: lib/getopt.c:704 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: flaggan \"--%s\" tar inget argument\n" + +#: lib/getopt.c:709 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: flaggan \"%c%s\" tar inget argument\n" + +#: lib/getopt.c:726 lib/getopt.c:899 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: flaggan \"%s\" beh�ver ett argument\n" + +#. --option +#: lib/getopt.c:755 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: ok�nd flagga \"--%s\"\n" + +#. +option or -option +#: lib/getopt.c:759 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: ok�nd flagga \"%c%s\"\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:785 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: otill�ten flagga -- %c\n" + +#: lib/getopt.c:788 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: ogiltig flagga -- %c\n" + +#. 1003.2 specifies the format of this message. +#: lib/getopt.c:818 lib/getopt.c:948 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: flaggan beh�ver ett argument -- %c\n" + +#: lib/getopt.c:865 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: flaggan \"-W %s\" �r tvetydig\n" + +#: lib/getopt.c:883 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: flaggan \"-W %s\" tar inget argument\n" + +#: lib/xmalloc.c:82 +msgid "Memory exhausted" +msgstr "Minnet slut" + +#: src/gettextp.c:134 src/msgcmp.c:144 src/msgcomm.c:285 src/msgfmt.c:257 +#: src/msgmerge.c:254 src/msgunfmt.c:175 src/xgettext.c:394 +#, c-format, no-wrap +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Copyright � %s Free Software Foundation, Inc.\n" +"Detta �r fri programvara; se k�llkoden f�r kopieringsvillkor. Det finns\n" +"INGEN garanti; inte ens f�r S�LJBARHET eller L�MPLIGHET F�R N�GOT SPECIELLT\n" +"�NDAM�L.\n" + +#: src/gettextp.c:139 src/msgcmp.c:149 src/msgcomm.c:290 src/msgfmt.c:262 +#: src/msgmerge.c:259 src/msgunfmt.c:180 src/xgettext.c:399 +#, c-format +msgid "Written by %s.\n" +msgstr "Skriven av %s.\n" + +#: src/gettextp.c:154 +msgid "missing arguments" +msgstr "argument saknas" + +#: src/gettextp.c:164 +msgid "too many arguments" +msgstr "f�r m�nga argument" + +#: src/gettextp.c:228 src/msgcmp.c:181 src/msgcomm.c:395 src/msgfmt.c:361 +#: src/msgmerge.c:301 src/msgunfmt.c:210 src/xgettext.c:532 +#, c-format +msgid "Try `%s --help' for more information.\n" +msgstr "F�rs�k med \"%s --help\" f�r mer information.\n" + +#: src/gettextp.c:233 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n" +" -e enable expansion of some escape sequences\n" +" -E (ignored for compatibility)\n" +" -h, --help display this help and exit\n" +" -n suppress trailing newline\n" +" -V, --version display version information and exit\n" +" [TEXTDOMAIN] MSGID retrieve translated message corresponding\n" +" to MSGID from TEXTDOMAIN\n" +msgstr "" +"Anv�ndning: %s [FLAGGA] [[[TEXTDOM�N] MDLID] | [-s [MDLID]...]]\n" +" -d, --domain=TEXTDOM�N h�mta �versatta meddelanden fr�n TEXTDOM�N\n" +" -e expandera n�gra kontrollsekvenser\n" +" -E (ignorerad f�r bak�tkompatibilitet)\n" +" -h, --help visa denna hj�lptext och avsluta\n" +" -n skriv inte ut avslutande radframmatning\n" +" -V, --version visa versionsinformation och avsluta\n" +" [TEXTDOM�N] MDLID h�mta �versatt meddelande som motsvarar\n" +" MDLID fr�n TEXTDOM�N\n" + +#: src/gettextp.c:245 +#, c-format, no-wrap +msgid "" +"\n" +"If the TEXTDOMAIN parameter is not given, the domain is determined from the\n" +"environment variable TEXTDOMAIN. If the message catalog is not found in the\n" +"regular directory, another location can be specified with the environment\n" +"variable TEXTDOMAINDIR.\n" +"When used with the -s option the program behaves like the `echo' command.\n" +"But it does not simply copy its arguments to stdout. Instead those messages\n" +"found in the selected catalog are translated.\n" +"Standard search directory: %s\n" +msgstr "" +"\n" +"Om parametern TEXTDOM�N utel�mnas s� best�ms dom�nen av milj�variabeln\n" +"TEXTDOMAIN. Om meddelandekatalogen inte hittas i den normala katalogen s�\n" +"kan en annan katalog anges med milj�variabeln TEXTDOMAINDIR.\n" +"N�r flaggan -s ges s� upptr�der programmet som kommandot \"echo\".\n" +"Men det kopierar inte enbart sina argument till standard ut. Ist�llet\n" +"�vers�tts de argument som hittas i den valda meddelandekatalogen.\n" +"Normal katalog f�r meddelandekataloger: %s\n" + +#: src/gettextp.c:255 src/msgcmp.c:200 src/msgcomm.c:442 src/msgfmt.c:388 +#: src/msgmerge.c:334 src/msgunfmt.c:234 src/xgettext.c:584 +#, fuzzy +msgid "Report bugs to <[email protected]>.\n" +msgstr "" +"Rapportera fel till <[email protected]>.\n" +"Rapportera fel p� �vers�ttningen till <[email protected]>.\n" + +#: src/message.c:784 +#, c-format +msgid "" +"internationalized messages should not contain the `\\%c' escape sequence" +msgstr "" +"internationaliserade meddelanden b�r inte ha kontrollsekvensen \"\\%c\"" + +#: src/message.c:1115 +#, c-format +msgid "cannot create output file \"%s\"" +msgstr "kan inte skapa utfilen \"%s\"" + +#: src/message.c:1122 +#, no-c-format +msgid "standard output" +msgstr "standard ut" + +#: src/message.c:1182 +#, c-format +msgid "error while writing \"%s\" file" +msgstr "fel vid skrivning till filen \"%s\"" + +#: src/msgcmp.c:160 src/msgmerge.c:270 +msgid "no input files given" +msgstr "inga infiler givna" + +#: src/msgcmp.c:165 src/msgmerge.c:275 +msgid "exactly 2 input files required" +msgstr "exakt 2 infiler kr�vs" + +#: src/msgcmp.c:186 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -h, --help display this help and exit\n" +" -V, --version output version information and exit\n" +"\n" +"Compare two Uniforum style .po files to check that both contain the same\n" +"set of msgid strings. The def.po file is an existing PO file with the\n" +"old translations. The ref.po file is the last created PO file\n" +"(generally by xgettext). This is useful for checking that you have\n" +"translated each and every message in your program. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better diagnostics.\n" +msgstr "" +"Anv�ndning: %s [FLAGGA] def.po ref.po\n" +"Obligatoriska argument f�r l�nga flaggor �r obligatoriska �ven f�r korta.\n" +" -D, --directory=KATALOG s�k infiler �ven i KATALOG\n" +" -h, --help visa denna hj�lptext och avsluta\n" +" -V, --version visa versionsinformation och avsluta\n" +"\n" +"J�mf�r tv� .po-filer av Uniforum-typ f�r att kontrollera att de inneh�ller\n" +"samma upps�ttning id-str�ngar. Filen def.po �r en existerande PO-fil med de\n" +"gamla �vers�ttningarna. Filen ref.po �r den senast skapade PO-filen\n" +"(i allm�nhet av xgettext). Detta �r anv�ndbart f�r att kontrollera att du\n" +"har �versatt alla str�ngar i programmet. Om en exakt likhet inte kan\n" +"hittas s� anv�nds luddig j�mf�relse f�r att ge b�ttre felmeddelanden.\n" + +#: src/msgcmp.c:259 src/msgmerge.c:714 +msgid "this message is used but not defined..." +msgstr "detta meddelande anv�nds men �r inte definierat..." + +#: src/msgcmp.c:261 src/msgmerge.c:716 +msgid "...but this definition is similar" +msgstr "...men denna definition �r likartad" + +#: src/msgcmp.c:267 src/msgmerge.c:743 +#, c-format +msgid "this message is used but not defined in %s" +msgstr "detta meddelande anv�nds men �r inte definierat i %s" + +#: src/msgcmp.c:281 +msgid "warning: this message is not used" +msgstr "varning: detta meddelande anv�nds inte" + +#: src/msgcmp.c:355 src/msgfmt.c:632 src/msgmerge.c:493 src/xgettext.c:1063 +msgid "duplicate message definition" +msgstr "meddelandedefinitionen �r duplicerad" + +#: src/msgcmp.c:356 src/msgfmt.c:633 src/msgmerge.c:494 src/xgettext.c:1064 +msgid "...this is the location of the first definition" +msgstr "...detta �r platsen f�r den f�rsta definitionen" + +#: src/msgcmp.c:396 src/msgmerge.c:542 +#, c-format +msgid "this message has no definition in the \"%s\" domain" +msgstr "detta meddelande har ingen definition i dom�nen \"%s\"" + +#. We are about to construct the absolute path to the +#. directory for the output files but asprintf failed. +#: src/msgcomm.c:238 src/xgettext.c:340 src/xgettext.c:1258 +msgid "while preparing output" +msgstr "n�r resultatet f�rbereddes" + +#: src/msgcomm.c:273 src/msgcomm.c:277 src/xgettext.c:378 src/xgettext.c:382 +#, c-format +msgid "%s and %s are mutually exclusive" +msgstr "%s och %s �r �msesidigt uteslutande" + +#: src/msgcomm.c:341 +msgid "at least two files must be specified" +msgstr "" + +#: src/msgcomm.c:360 +#, c-format +msgid "impossible selection criteria specified (%d < n < %d)" +msgstr "" + +#: src/msgcomm.c:400 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" -F, --sort-by-file sort output by file location\n" +" -h, --help display this help and exit\n" +msgstr "" +"Anv�ndning: %s [FLAGGA] INFIL ...\n" +"Obligatoriska argument f�r l�nga flaggor �r obligatoriska �ven f�r korta.\n" +" -a, --extract-all extrahera alla str�ngar\n" +" -c, --add-comments[=M�RKE] skriv kommentarsblock med M�RKE (eller de\n" +" f�re nyckelordsrader) till resultatet\n" +" -C, --c++ f�rkortning f�r --language=C++\n" +" --debug mer detaljerad igenk�nning av formatstr�ngar\n" +" -d, --default-domain=NAMN anv�nd NAMN.po som utfil (i st.f messages.po)\n" +" -D, --directory=KATALOG s�k infiler �ven i KATALOG\n" +" -e, --no-escape anv�nd inte C-kontrollsekvenser i resultatet\n" +" (normall�ge)\n" +" -E, --escape anv�nd C-kontrollsekvenser i resultatet, men\n" +" inte \\v eller \\a\n" +" -f, --files-from=FIL h�mta lista med infiler fr�n FIL\n" +" --force-po skriv PO-fil �ven om den �r tom\n" +" --foreign-user utel�mna FSF copyright-text i resultatet\n" +" -F, --sort-by-file sortera resultatet efter filposition\n" + +#: src/msgcomm.c:412 +#, fuzzy +msgid "" +" -i, --indent write the .po file using indented style\n" +" --no-location do not write '#: filename:line' lines\n" +" -n, --add-location generate '#: filename:line' lines " +"(default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory " +"DIR\n" +" -s, --sort-output generate sorted output and remove " +"duplicates\n" +" --strict write out strict Uniforum conforming .po " +"file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -u, --unique shorthand for --less-than=2, requests\n" +" that only unique messages be printed\n" +msgstr "" +" -n, --add-location skriv ut raderna \"#: filnamn:rad\"\n" +" (normall�ge)\n" +" --omit-header skriv inte ut huvudrader med msgid \"\"\n" +" -o, --output=FIL skriv resultatet till FIL\n" +" -p, --output-dir=KATALOG utfiler placeras i katalogen KATALOG\n" +" -s, --sort-output sortera resultatet och ta bort dubbletter\n" +" --strict skriv ut en .po-fil som f�ljer Uniforum " +"strikt\n" +" -T, --trigraphs hantera ANSI C treteckenssekvenser i " +"infiler\n" +" -V, --version visa versionsinformation och avsluta\n" +" -w, --width=ANTAL s�tt antal kolumner i resultatet\n" +" -x, --exclude-file=FIL rader fr�n FIL tas inte ut\n" +"\n" +"Om INFIL �r - s� l�ses standard in.\n" + +#: src/msgcomm.c:425 +msgid "" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -<, --less-than=NUMBER print messages with less than this many\n" +" definitions, defaults to infinite if not\n" +" set\n" +" ->, --more-than=NUMBER print messages with more than this many\n" +" definitions, defaults to 1 if not set\n" +"\n" +"Find messages which are common to two or more of the specified PO files.\n" +"By using the --more-than option, greater commonality may be requested\n" +"before messages are printed. Conversely, the --less-than option may be\n" +"used to specify less commonality before messages are printed (i.e.\n" +"--less-than=2 will only print the unique messages). Translations,\n" +"comments and extract comments will be preserved, but only from the first\n" +"PO file to define them. File positions from all PO files will be\n" +"preserved.\n" +msgstr "" + +#: src/msgcomm.c:476 src/msgunfmt.c:357 src/po-lex.c:74 src/xget-lex.c:159 +#: src/xget-lex.c:174 src/xget-lex.c:191 src/xgettext.c:618 +#, c-format +msgid "error while opening \"%s\" for reading" +msgstr "fel uppstod n�r \"%s\" �ppnades f�r l�sning" + +#: src/msgcomm.c:557 src/xgettext.c:660 src/xgettext.c:970 +msgid "this file may not contain domain directives" +msgstr "denna fil kan inte inneh�lla dom�ndirektiv" + +#: src/msgfmt.c:273 src/xgettext.c:410 +msgid "no input file given" +msgstr "inga infiler givna" + +#: src/msgfmt.c:321 +#, c-format +msgid "error while opening \"%s\" for writing" +msgstr "fel uppstod n�r \"%s\" �ppnades f�r skrivning" + +#: src/msgfmt.c:343 +#, c-format +msgid "%d translated messages" +msgstr "%d �versatta meddelanden" + +#: src/msgfmt.c:345 +#, c-format +msgid ", %d fuzzy translations" +msgstr ", %d luddiga �vers�ttningar" + +#: src/msgfmt.c:347 +#, c-format +msgid ", %d untranslated messages" +msgstr ", %d o�versatta meddelanden" + +#: src/msgfmt.c:366 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] filename.po ...\n" +"Generate binary message catalog from textual translation description.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n" +" -c, --check perform language dependent checks on strings\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -f, --use-fuzzy use fuzzy entries in output\n" +" -h, --help display this help and exit\n" +" --no-hash binary file will not include the hash table\n" +" -o, --output-file=FILE specify output file name as FILE\n" +" --statistics print statistics about translations\n" +" --strict enable strict Uniforum mode\n" +" -v, --verbose list input file anomalies\n" +" -V, --version output version information and exit\n" +"\n" +"Giving the -v option more than once increases the verbosity level.\n" +"\n" +"If input file is -, standard input is read. If output file is -,\n" +"output is written to standard output.\n" +msgstr "" +"Anv�ndning: %s [FLAGGA] filnamn.po ...\n" +"Obligatoriska argument f�r l�nga flaggor �r obligatoriska �ven f�r korta.\n" +" -a, --alignment=ANTAL l�gg str�ngar p� j�mna ANTAL byte (normalt: %d)\n" +" -c, --check utf�r spr�kberoende kontroll av str�ngar\n" +" -D, --directory=KATALOG s�k infiler �ven i KATALOG\n" +" -f, --use-fuzzy anv�nd luddiga poster i resultatet\n" +" -h, --help visa denna hj�lptext och avsluta\n" +" --no-hash hashtabellen inkluderas inte i bin�rfilen\n" +" -o, --output-file=FIL utfilens namn blir FIL\n" +" --statistics skriv ut statistik om �vers�ttningarna\n" +" --strict k�r i strikt Uniforum-l�ge\n" +" -v, --verbose visa anomalier i infilen\n" +" -V, --version visa versionsinformation och avsluta\n" +"\n" +"Ger man -v flaggan mer �n en g�ng s� �kas pratsamheten.\n" +"\n" +"Om infilen �r - s� l�ses standard in. Om utfilen �r - s� skrivs resultatet\n" +"till standard ut.\n" + +#: src/msgfmt.c:409 +msgid "while creating hash table" +msgstr "n�r hashtabellen skapades" + +#: src/msgfmt.c:451 +#, c-format +msgid "%s: warning: no header entry found" +msgstr "%s: varning: inga huvudrader funna" + +#: src/msgfmt.c:473 +#, c-format +msgid "domain name \"%s\" not suitable as file name" +msgstr "dom�nnamnet \"%s\" �r inte l�mpligt som filnamn" + +#: src/msgfmt.c:478 +#, c-format +msgid "domain name \"%s\" not suitable as file name: will use prefix" +msgstr "dom�nnamnet \"%s\" �r inte l�mpligt som filnamn: anv�nder ett prefix" + +#. We don't change the exit status here because this is really +#. only an information. +#: src/msgfmt.c:491 +#, c-format +msgid "`domain %s' directive ignored" +msgstr "direktivet \"domain %s\" ignoreras" + +#: src/msgfmt.c:519 +msgid "empty `msgstr' entry ignored" +msgstr "tom \"msgstr\"-rad ignorerad" + +#: src/msgfmt.c:520 +msgid "fuzzy `msgstr' entry ignored" +msgstr "luddig \"msgstr\"-rad ignorerad" + +#: src/msgfmt.c:563 +#, c-format +msgid "headerfield `%s' missing in header" +msgstr "f�lt \"%s\" saknas i huvudet" + +#: src/msgfmt.c:566 +#, c-format +msgid "header field `%s' should start at beginning of line" +msgstr "huvudrad \"%s\" b�r ligga i b�rjan p� raden" + +#: src/msgfmt.c:576 +msgid "some header fields still have the initial default value" +msgstr "vissa huvudrader har kvar initiala standardv�rden" + +#: src/msgfmt.c:587 +#, c-format +msgid "field `%s' still has initial default value" +msgstr "huvudrad \"%s\" har kvar initialt standardv�rde" + +#: src/msgfmt.c:672 +#, c-format +msgid "%s: warning: source file contains fuzzy translation" +msgstr "%s: varning: k�llfilen inneh�ller luddiga �vers�ttningar" + +#: src/msgfmt.c:874 +msgid "`msgid' and `msgstr' entries do not both begin with '\\n'" +msgstr "\"msgid\"- och \"msgstr\"-raderna b�rjar inte b�da med \"\\n\"" + +#: src/msgfmt.c:882 +msgid "`msgid' and `msgstr' entries do not both end with '\\n'" +msgstr "\"msgid\"- och \"msgstr\"-raderna slutar inte b�da med \"\\n\"" + +#: src/msgfmt.c:896 +msgid "number of format specifications in `msgid' and `msgstr' does not match" +msgstr "antalet formateringsdirektiv i \"msgid\" och \"msgstr\" �r olika" + +#: src/msgfmt.c:913 +#, c-format +msgid "format specifications for argument %u are not the same" +msgstr "formateringsdirektivet f�r parametern %u �r inte likadant" + +#: src/msgmerge.c:306 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] def.po ref.po\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent indented output style\n" +" -o, --output-file=FILE result will be written to FILE\n" +" --no-location suppress '#: filename:line' lines\n" +" --add-location preserve '#: filename:line' lines (default)\n" +" --strict strict Uniforum output style\n" +" -v, --verbose increase verbosity level\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Anv�ndning: %s [FLAGGA] def.po ref.po\n" +"Obligatoriska argument f�r l�nga flaggor �r obligatoriska �ven f�r korta.\n" +" -D, --directory=KATALOG s�k infiler �ven i KATALOG\n" +" -e, --no-escape anv�nd inte C-kontrollsekvenser i resultatet\n" +" (normall�ge)\n" +" -E, --escape anv�nd C-kontrollsekvenser i resultatet, men\n" +" inte \\v eller \\a\n" +" --force-po skriv PO-fil �ven om den �r tom\n" +" -h, --help visa denna hj�lptext och avsluta\n" +" -i, --indent indentera resultatet\n" +" -o, --output-file=FIL skriv resultatet till FIL\n" +" --no-location skriv inte rader med \"#: filnamn:rad\"\n" +" --add-location bevara rader med \"#: filnamn:rad\" (normall�ge)\n" +" --strict strikt Uniforum-format p� resultatet\n" +" -v --verbose �ka m�ngden information i meddelanden\n" +" -V, --version visa versionsinformation och avsluta\n" +" -w, --width=ANTAL s�tt antal kolumner i resultatet\n" + +#: src/msgmerge.c:324 +#, no-wrap +msgid "" +"\n" +"Merges two Uniforum style .po files together. The def.po file is an\n" +"existing PO file with the old translations which will be taken over to\n" +"the newly created file as long as they still match; comments will be\n" +"preserved, but extract comments and file positions will be discarded.\n" +"The ref.po file is the last created PO file (generally by xgettext), any\n" +"translations or comments in the file will be discarded, however dot\n" +"comments and file positions will be preserved. Where an exact match\n" +"cannot be found, fuzzy matching is used to produce better results. The\n" +"results are written to stdout unless an output file is specified.\n" +msgstr "" +"\n" +"Sl�r samman tv� .po-filer av Uniforum-typ. Filen def.po �r en\n" +"existerande PO-fil som inneh�ller de gamla �vers�ttningarna som kommer att\n" +"flyttas �ver till den nya filen om de �r lika. Kommentarer bevaras men\n" +"extraheringskommentarer och filpositioner kastas bort.\n" +"Filen ref.po �r den senast skapade PO-filen (i allm�nhet med xgettext). Alla\n" +"�vers�ttningar och kommentarer i filen kastas bort, dock bevaras\n" +"punktkommentarer och filpositioner. Om en exakt likhet\n" +"inte kan hittas s� anv�nds luddig j�mf�relse f�r att ge b�ttre resultat.\n" +"Resultatet skrivs till standard ut om inte en utfil anges.\n" +"\n" + +#: src/msgmerge.c:772 +#, c-format +msgid "" +"%sRead %d old + %d reference, merged %d, fuzzied %d, missing %d, obsolete " +"%d.\n" +msgstr "" +"%sL�ste %d gamla + %d referenser, %d sammanslagna, %d luddiga, %d saknade, " +"%d f�r�ldrade.\n" + +#: src/msgmerge.c:778 +msgid " done.\n" +msgstr " klar.\n" + +#: src/msgunfmt.c:215 +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [FILE]...\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" --force-po write PO file even if empty\n" +" -h, --help display this help and exit\n" +" -i, --indent write indented output style\n" +" -o, --output-file=FILE write output into FILE instead of standard output\n" +" --strict write strict uniforum style\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +msgstr "" +"Anv�ndning: %s [FLAGGA] [FIL]...\n" +"Obligatoriska argument f�r l�nga flaggor �r obligatoriska �ven f�r korta.\n" +" -e, --no-escape anv�nd inte C-kontrollsekvenser i resultatet\n" +" (normall�ge)\n" +" -E, --escape anv�nd C-kontrollsekvenser i resultatet, men\n" +" inte \\v eller \\a\n" +" --force-po skriv PO-fil �ven om den �r tom\n" +" -h, --help visa denna hj�lptext och avsluta\n" +" -i, --indent indentera resultatet\n" +" -o, --output-file=FIL skriv resultatet till FIL i st�llet f�r standard ut\n" +" --strict strikt Uniforum-format p� resultatet\n" +" -V, --version visa versionsinformation och avsluta\n" +" -w, --width=ANTAL s�tt antal kolumner i resultatet\n" + +#: src/msgunfmt.c:229 +#, no-wrap +msgid "" +"\n" +"Convert binary .mo files to Uniforum style .po files.\n" +"Both little-endian and big-endian .mo files are handled.\n" +"If no input file is given or it is -, standard input is read.\n" +"By default the output is written to standard output.\n" +msgstr "" +"\n" +"Konvertera bin�ra .mo-filer till .po-filer av Uniforum-typ.\n" +"B�da typer av byteordning (\"little-endian\" och \"big-endian\") i .mo-filer\n" +"f�rst�s.\n" +"Om ingen infil ges eller om den �r - s� l�ses standard in.\n" +"I normall�ge s� skrivs resultatet till standard ut.\n" + +#: src/msgunfmt.c:266 src/msgunfmt.c:330 src/po-lex.c:185 src/xget-lex.c:254 +#, c-format +msgid "error while reading \"%s\"" +msgstr "fel uppstod d� \"%s\" l�stes" + +#: src/msgunfmt.c:267 src/msgunfmt.c:331 +#, c-format +msgid "file \"%s\" truncated" +msgstr "filen \"%s\" avkortad" + +#: src/msgunfmt.c:298 +#, c-format +msgid "seek \"%s\" offset %ld failed" +msgstr "s�kning \"%s\", position %ld misslyckades" + +#: src/msgunfmt.c:373 +#, c-format +msgid "file \"%s\" is not in GNU .mo format" +msgstr "filen \"%s\" �r inte p� GNUs .mo-format" + +#: ../../src/po-gram.y:83 +msgid "missing `msgstr' section" +msgstr "\"msgstr\"-delen saknas" + +#: src/po-lex.c:84 +#, c-format +msgid "found %d fatal errors" +msgstr "%d allvarliga fel hittades" + +#: src/po-lex.c:129 src/po-lex.c:168 +msgid "too many errors, aborting" +msgstr "f�r m�nga fel, avbryter k�rningen" + +#: src/po-lex.c:241 +#, c-format +msgid "keyword \"%s\" unknown" +msgstr "nyckelordet \"%s\" �r ok�nt" + +#: src/po-lex.c:332 +msgid "illegal control sequence" +msgstr "otill�ten kontrollsekvens" + +#: src/po-lex.c:415 +msgid "end-of-line within string" +msgstr "radslut inne i en str�ng" + +#: src/po-lex.c:420 +msgid "end-of-file within string" +msgstr "filslut inne i en str�ng" + +#: src/xget-lex.c:150 +msgid "standard input" +msgstr "standard in" + +#: src/xget-lex.c:892 +#, c-format +msgid "%s:%d: warning: unterminated character constant" +msgstr "%s:%d: varning: oavslutad teckenkonstant" + +#: src/xget-lex.c:914 +#, c-format +msgid "%s:%d: warning: unterminated string literal" +msgstr "%s:%d: varning: oavslutad str�ng" + +#: src/xgettext.c:386 +msgid "--join-existing cannot be used when output is written to stdout" +msgstr "" +"--join-existing kan inte anv�ndas d� resultatet skrivs till standard ut" + +#: src/xgettext.c:501 +#, c-format +msgid "warning: file `%s' extension `%s' is unknown; will try C" +msgstr "varning: filtyp \"%s\" med suffix \"%s\" �r ok�nd; f�rs�ker med C" + +#: src/xgettext.c:537 +#, fuzzy, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Extract translatable string from given input files.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --extract-all extract all strings\n" +" -c, --add-comments[=TAG] place comment block with TAG (or those\n" +" preceding keyword lines) in output file\n" +" -C, --c++ shorthand for --language=C++\n" +" --debug more detailed formatstring recognision result\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" --foreign-user omit FSF copyright in output for foreign user\n" +" -F, --sort-by-file sort output by file location\n" +msgstr "" +"Anv�ndning: %s [FLAGGA] INFIL ...\n" +"Obligatoriska argument f�r l�nga flaggor �r obligatoriska �ven f�r korta.\n" +" -a, --extract-all extrahera alla str�ngar\n" +" -c, --add-comments[=M�RKE] skriv kommentarsblock med M�RKE (eller de\n" +" f�re nyckelordsrader) till resultatet\n" +" -C, --c++ f�rkortning f�r --language=C++\n" +" --debug mer detaljerad igenk�nning av formatstr�ngar\n" +" -d, --default-domain=NAMN anv�nd NAMN.po som utfil (i st.f messages.po)\n" +" -D, --directory=KATALOG s�k infiler �ven i KATALOG\n" +" -e, --no-escape anv�nd inte C-kontrollsekvenser i resultatet\n" +" (normall�ge)\n" +" -E, --escape anv�nd C-kontrollsekvenser i resultatet, men\n" +" inte \\v eller \\a\n" +" -f, --files-from=FIL h�mta lista med infiler fr�n FIL\n" +" --force-po skriv PO-fil �ven om den �r tom\n" +" --foreign-user utel�mna FSF copyright-text i resultatet\n" +" -F, --sort-by-file sortera resultatet efter filposition\n" + +#: src/xgettext.c:557 +#, c-format, no-wrap +msgid "" +" -h, --help display this help and exit\n" +" -i, --indent write the .po file using indented style\n" +" -j, --join-existing join messages with existing file\n" +" -k, --keyword[=WORD] additonal keyword to be looked for (without\n" +" WORD means not to use default keywords)\n" +" -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n" +" -L, --language=NAME recognise the specified language (C, C++, PO),\n" +" otherwise is guessed from file extension\n" +" -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n" +" -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n" +" --no-location do not write '#: filename:line' lines\n" +msgstr "" +" -h, --help visa denna hj�lptext och avsluta\n" +" -i, --indent indentera resultatet\n" +" -j, --join-existing sm�lt ihop meddelanden med existerande fil.\n" +" -k, --keyword[=ORD] extra nyckelord att titta efter (om ORD\n" +" utel�mnas, titta inte efter standardnyckelord)\n" +" -l, --string-limit=ANTAL maximera str�ngl�ngden till ANTAL i st.f %u\n" +" -L, --language=SPR�K k�nn igen angivet SPR�K (C, C++, PO),\n" +" annars gissas spr�ket fr�n fil�ndelsen.\n" +" -m, --msgstr-prefix[=STR�NG] inled �versatta str�ngar med STR�NG eller \"\"\n" +" -M, --msgstr-suffix[=STR�NG] avsluta �versatta str�ngar med STR�NG eller \"\"\n" +" --no-location skriv inte ut raderna \"#: filnamn:rad\"\n" + +#: src/xgettext.c:571 +#, no-wrap +msgid "" +" -n, --add-location generate '#: filename:line' lines (default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory DIR\n" +" -s, --sort-output generate sorted output and remove duplicates\n" +" --strict write out strict Uniforum conforming .po file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -x, --exclude-file=FILE entries from FILE are not extracted\n" +"\n" +"If INPUTFILE is -, standard input is read.\n" +msgstr "" +" -n, --add-location skriv ut raderna \"#: filnamn:rad\"\n" +" (normall�ge)\n" +" --omit-header skriv inte ut huvudrader med msgid \"\"\n" +" -o, --output=FIL skriv resultatet till FIL\n" +" -p, --output-dir=KATALOG utfiler placeras i katalogen KATALOG\n" +" -s, --sort-output sortera resultatet och ta bort dubbletter\n" +" --strict skriv ut en .po-fil som f�ljer Uniforum strikt\n" +" -T, --trigraphs hantera ANSI C treteckenssekvenser i infiler\n" +" -V, --version visa versionsinformation och avsluta\n" +" -w, --width=ANTAL s�tt antal kolumner i resultatet\n" +" -x, --exclude-file=FIL rader fr�n FIL tas inte ut\n" +"\n" +"Om INFIL �r - s� l�ses standard in.\n" + +#: src/xgettext.c:1344 +#, c-format +msgid "language `%s' unknown" +msgstr "spr�ket \"%s\" ok�nt" + +#~ msgid "Report bugs to <[email protected]>.\n" +#~ msgstr "" +#~ "Rapportera fel till <[email protected]>.\n" +#~ "Rapportera fel p� �vers�ttningen till <[email protected]>.\n" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/ChangeLog b/debian/gettext-kde/gettext-kde-0.10.35/src/ChangeLog new file mode 100644 index 00000000..20f34d98 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/ChangeLog @@ -0,0 +1,1504 @@ +1998-04-30 Ulrich Drepper <[email protected]> + + * dir-list.c: Update Peter Miller's mail address. + * dir-list.h: Likewise. + * message.c: Likewise. + * message.h: Likewise. + * msgcmp.c: Likewise. + * msgcomm.c: Likewise. + * msgmerge.c: Likewise. + * po-gram.h: Likewise. + * po-gram.y: Likewise. + * po-hash.h: Likewise. + * po-hash.y: Likewise. + * po-lex.c: Likewise. + * po-lex.h: Likewise. + * po.c: Likewise. + * po.h: Likewise. + * str-list.c: Likewise. + * str-list.h: Likewise. + * xget-lex.c: Likewise. + * xget-lex.h: Likewise. + +1998-04-30 Ulrich Drepper <[email protected]> + + * msgfmt.c: Fix typo in --help text. + Reported by [email protected]. + +1998-04-03 01:18 1998 Philippe De Muyter <[email protected]> + + * str-list.h (stddef.h): Include that file only if STDC_HEADERS. + Otherwise include sys/types.h and stdio.h. + * msgmerge.c (string.h): Include that file if HAVE_STRING_H, not + if STDC_HEADERS. + +1998-04-29 Ulrich Drepper <[email protected]> + + * message.c: Use unsigned char for various local variables. + * xgettext.c (comment_tag): Define as unsigned char *. + For loosing Solaris systems. Patches by Jim Meyering. + + * msgfmt.c: Use extra braces in if to shut up gcc. + * po-lex.h: Don't declare function po_gram_error and + gram_error_at_line if macros with the same names are defined. + * Makefile.am (MAINTAINERCLEANFILES): New variable. + Patches by Jim Meyering. + +1998-04-27 Ulrich Drepper <[email protected]> + + * xgettext.c: Update year and bug report address. Add little + explanation in --help messages. + * msgfmt.c: Likewise. + + * msgmerge.c: Update year and bug report address. + * msgcomm.c: Likewise. + * msgcmp.c: Likewise. + * msgunfmt.c: Likewise. + +1997-08-31 22:20 Ulrich Drepper <[email protected]> + + * msgfmt.c (format_directive_message): Count fuzzy messages as + fuzzy, even if they are not written to the output file. + +1997-08-18 13:47 Philippe De Muyter <[email protected]> + + * msgcomm.c (sys/types.h): File included. + +1997-08-15 12:38 Ulrich Drepper <[email protected]> + + * xgettext.c: Include <sys/param.h> to define MIN/MAX for HP/UX. + Patch by Kaveh R. Ghazi <[email protected]>. + + * msgfmt.c: Change DEFAULT_ALIGNMENT to DEFAULT_OUTPUT_ALIGNMENT + to avoid clash with macro with same name in obstack.c. + Reported by Akim Demaille <[email protected]>. + +1997-08-01 15:48 Ulrich Drepper <[email protected]> + + * Makefile.am (AUTOMAKE_OPTIONS): Require version 1.2. + +1997-05-07 04:21 Ulrich Drepper <[email protected]> + + * msgcomm.c (main): Print author in --version message. + * msgunfmt.c: Likewise. + * msgcmp.c: Likewise. + * msgmerge.c: Likewise. + * msgfmt.c: Likewise. + * xgettext.c: Likewise. + * gettextp.c: Likewise. + +1997-05-01 02:33 Ulrich Drepper <[email protected]> + + * msgcmp.c (main): Update copyright. + * msgunfmt.c (main): Likewise. + * msgcomm.c (main): Likewise. + * msgmerge.c (main): Likewise. + * msgfmt.c (main): Likewise. + * gettextp.c (main): Likewise. + + * msgcomm.c: Fix comment about default output (Jan Djarv). Split + help message. + +1997-03-31 16:09 Ulrich Drepper <[email protected]> + + * msgcomm.c (usage): Use program_name as argument for print to + print message, not stdout. + Patch by Jan Djarv <[email protected]>. + +Mon Mar 10 06:18:58 1997 Ulrich Drepper <[email protected]> + + * xgettext.c: Implement generic language scanner handling. + + * xget-lex.c (phase7_getc): Better comments. + (phase5_get): Print warnings about unterminated strings and + character constants. + + * po-lex.c (po_gram_error): Don't count continuation lines in + messages as errors. + (gram_error_at_line): Likewise. + * po-lex.h: Likewise for macro versions. + + * po-hash.y: Correct typo. + + * msgunfmt.c: Implement --force-po option. + + * msgmerge.c: Implement --force-po, --no-location, and + --add-location options. + + * msgfmt.c (format_directive_message): If messages are duplicated + and translations are different this is a fatal error. + + * msgcmp.c (compare_directive_message): Use correct format for + continuation line in message. + + * message.h: Add prototype for message_list_delete_nth. + + * message.c: Add message_list_delete_nth function. + + * Makefile.am (bin_PROGRAMS): Add msgcomm. (l): New variable. + Set to `l' is using libtool. (LDADD): Change for the needs of + libtool. (msgcomm_SOURCES): New variable. + + * msgcomm.c: New file. + +Wed Dec 4 01:58:10 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (LDADD): Change for use of libtool. + +Tue Dec 3 18:08:46 1996 Ulrich Drepper <[email protected]> + + * xget-lex.c (phase7_getc): Return \n when newline is seen, not + P7_NEWLINE. + + * xgettext.c (main): Implement --foreign-user flag. + + * msgcmp.c (main): Change --version output to what is required by + GNU standards. (usage): Correct bug report address. + * msgfmt.c: Likewise. + * msgunfmt.c: Likewise. + * msgmerge.c: Likewise. + * xgettext.c: Likewise. + * gettextp.c: Likewise. + +Sat Sep 14 04:28:09 1996 Ulrich Drepper <[email protected]> + + * msgunfmt.c (usage): Put bug report address in separate string. + * msgmerge.c (usage): Likewise. + * msgcmp.c (usage): Likewise. + * xgettext.c (usage): Likewise. + * msgfmt.c (usage): Likewise. + * gettextp.c (usage): Likewise. + +Thu Sep 12 21:40:48 1996 Andreas Schwab <[email protected]> + + * msgfmt.c (check_pair): Fix error messages. + +Sat Aug 31 14:05:29 1996 Ulrich Drepper <[email protected]> + + * msgunfmt.c (usage): Add hint about where to report bugs to. + * msgmerge.c (usage): Likewise. + * msgcmp.c (usage): Likewise. + * xgettext.c (usage): Likewise. + * msgfmt.c (usage): Likewise. + * gettextp.c (usage): Likewise. + +Sat Aug 31 04:49:38 1996 Ulrich Drepper <[email protected]> + + * gettextp.c: Don't include <libintl.h> since this can generate + conflicts. + +Mon Jul 15 02:21:25 1996 Ulrich Drepper <[email protected]> + + * msgfmt.c: Major change: msgfmt now does not write fuzzy messages + out by default. The option -f/--use-fuzzy must be used to + explicitely tell to do it. + +Sat Jul 13 20:23:34 1996 Ulrich Drepper <[email protected]> + + * xget-lex.c (phase6_get): Reset selected comments on every + preprocessor directive. + +Fri Jul 12 12:38:49 1996 Ulrich Drepper <[email protected]> + + * xgettext.c (main): Remove `v' from short option list. + +Sat Jul 6 11:22:47 1996 Kaveh R. Ghazi <[email protected]> + + * message.c (message_merge): Add some casts to (char *) in alloca + calls. Make KNOWN_FIELDS array static. + +Sat Jul 6 11:15:43 1996 Jim Meyering <[email protected]> + + * msgfmt.c (check_pair): Correct English in Message. + +Fri Jul 5 17:27:11 1996 Ulrich Drepper <[email protected]> + + * message.c (message_merge): Terminate string for UNKNOWN fields + in header entry. + + * message.c (message_merge): Don't print POT-Revision-Date twice. + + * msgfmt.c: Implement --statistics. + Suggested by Santiago Vila Doncel. + + * msgfmt.c: and change message checking so that tests for leading + and trailing \n are always performed. + Suggested by Fran�ois Pinard. + +Wed Jun 19 02:42:52 1996 Ulrich Drepper <[email protected]> + + * message.c (message_merge): Implement sorting of header entry + lines. + +Sat Jun 15 19:46:50 1996 Ulrich Drepper <[email protected]> + + * msgmerge.c (usage): Correct -w option in help string (was -W). + +Tue Jun 11 15:28:44 1996 Ulrich Drepper <[email protected]> + + * xget-lex.c, xget-lex.h (xgettext_lex_comment): Change parameter + type to size_t. + + * po-lex.h, po-lex.c (gram_max_allowed_errors): Change type to + size_t. + + * message.c, message.h (message_page_width_set): Change parameter + type to size_t. + + * Makefile.am (AUTOMAKE_OPTIONS): Add variable. Must be defined + in all subdirs. + +Mon Jun 10 02:53:52 1996 Marcus Daniels <[email protected]> + + * dir-list.c: Include system.h in order to get size_t and NULL. + +Thu Jun 6 01:59:31 1996 Ulrich Drepper <[email protected]> + + * str-list.h: Include <stddef.h> to get size_t defined. + Reported by Philippe Defert. + + * Makefile.am (LDADD): Remove `@INTLLIBS@ ../lib/libnlsut.a + @LIBS@'. This is not necessary anymore. + +Wed Jun 5 00:00:08 1996 Ulrich Drepper <[email protected]> + + * xgettext.c, msgunfmt.c (usage): Correct --page-width to --width + in usage string. + + * open-po.c (open_po_file): Implement search path for PO files. + + * xget-lex.c (xgettext_lex_open): Implement search path for PO + files. Patch by Peter Miller. + + * message.h (struct message_ty): Add do_wrap member. + Add prototypes for parse_c_width_description_string and + message_page_width_set. + + * xgettext.c: Implement --width option to specify width for which + line wrapping is done. Change --directory option implement search + path instead of single directory. Patch by Peter Miller. + + * message.c (wrap): Implement no-wrap special comment. If given + no wrapping is performed. + + * gettextp.c, msgcmp.c, msgfmt.c, msgmerge.c, msgunfmt.c, + xgettext.c: Add `no-wrap' comments at usage message strings. + + * msgcmp.c: Implement --directory to specify search path for .po + files. Patch by Peter Miller. + +Tue Jun 4 23:57:59 1996 Ulrich Drepper <[email protected]> + + * msgfmt.c: Implement --width option to specify width for which + line wrapping is done. Patch by Peter Miller. + + * msgmerge.c: Implement --width option to specify width for which + line wrapping is done. Implement --directory to specify search + path for .po files. Patch by Peter Miller. + + * msgunfmt.c: Implement --width option to specify width for which + line wrapping is done. Patch by Peter Miller. + +Tue Jun 4 00:12:25 1996 Ulrich Drepper <[email protected]> + + * po-hash.y: Add new clause where in GNU style format the name is + `file'. + + * Makefile.am (noinst_HEADERS): Add dir-list.h. + (msgcmp_SOURCES, msgfmt_SOURCES, msgmerge_SOURCES, xgettext_SOURCES): + Add dir-list.c + +Mon Jun 3 00:43:07 1996 Ulrich Drepper <[email protected]> + + * message.h: Add new parameter for message_list_print. + + * msgmerge.c, msgunfmt.c (main): Add new parameter to + message_list_print. Set to 0 because we don't need to know about + the reasoning. + + * xgettext.c: Implement new option --debug which determines + whether a difference is made between c-format and + possible-c-format. Default is to print c-format for both cases. + + * message.c (make_c_format_description_string): Take additional + parameter DEBUG. If nonzero, distinguish between c-format and + possible-c-format. + + * message.c (message_print_obsolete): Copy precious translator + comment to output file. Reported by Santiago Vila Doncel. + + * dir-list.c: Include file now is called dir-list.h, not + dir_list.h. + + * message.c: Include <limits.h>. + + * Makefile.am (EXTRA_DIST): Add variable to distribute po-gram.y + and po-hash.y. + + * Makefile.am (msgfmt_SOURCES): Fix typo: msgfmt.o -> msgfmt.c. + +Sat Jun 1 04:33:48 1996 Ulrich Drepper <[email protected]> + + * Makefile.in: Remove support for tupdate. msgmerge is stable + now. + +Wed Apr 10 01:20:49 1996 Ulrich Drepper <drepper@myware> + + * message.c (message_print_obsolete): Don't print + c-format/no-c-format flags for obsolete entries. + + * xgettext.c (construct_header): Change DIST to ZONE in header + entry template. + + * message.c (message_merge): Insert POT-Creation-Date field before + PO-Revision-Date. + +Tue Apr 9 17:13:34 1996 Ulrich Drepper <drepper@myware> + + * xgettext.c (construct_header): Move POT-Creation-Date line + before PO-Revision-Date line. + +Fri Apr 5 12:07:19 1996 Ulrich Drepper <drepper@myware> + + * msgmerge.c: Implement --quiet option to prevent dots printed as + progress report. + (merge): Don't print dots if `quiet'. + + * msgmerge.c (merge): Nicer statistics message. + + * message.c (message_merge): Update POT-Creation-Date field in + header entry from contents in reference file. + + * msgfmt.c (format_directive_message): Better test for unchanged + fields in header entry. + + * xgettext.c (difftm): Is back. + (construct_header): Print distance to GMT in POT file time stamp. + + * xgettext.c (construct_header): Print leading comment and fuzzy + flag. + + * message.c (message_print): Allow translator comment to fill more + than one line. + + * xgettext.c (construct_header): Introduce POT-Creation-Date + field. + +Fri Apr 5 03:05:07 1996 Ulrich Drepper <drepper@myware> + + * msgmerge.c (merge): Rename empty in missing. There might be + more empty messages which are not missed. + + * msgmerge.c (merge): Terminate `.' line if no verbose output is + selected. + + * msgmerge.c (main): Implement -v option to increase verbosity + level. + (merge): Print `.' to signal ongoing work. + Unless verbosity level > 1 don't print information about fuzzy and + missing matches. Instead print statistics at the end. + Suggested by Fran�ois Pinard and Santiago Vila Doncel. + +Thu Apr 4 11:59:20 1996 Ulrich Drepper <drepper@myware> + + * xgettext.c (difftm): Remove unused function. + (construct_header): Don't fill Last-Translator field with information + about curent user but instead constant text mentioning xgettext. + + * message.c (message_list_search_fuzzy): Initialize mp before + using it. + + * message.c (message_print): Normalize printed messages even more. + Don't print fuzzy flag is msgstr is empty. + + * message.c (message_list_search_fuzzy): Don't try to match + against msgid if none if the msgstr of this message in non-empty. + +Thu Apr 4 01:57:37 1996 Ulrich Drepper <drepper@myware> + + * msgfmt.c (format_directive_message): When testing header entry + also check whether they still contain the initial values. + Suggested by Fran�ois Pinard. + +Tue Apr 2 16:19:42 1996 Ulrich Drepper <drepper@myware> + + * xgettext.c (main): Add "warning" to message about unknown input + file type. + + * Makefile.in (all-gettext): New goal. Same as all. + + * xgettext.c (usage): Rearange help strings. One of them was too + long for some dumb catgets programs. Reported by Marcus Daniels. + + * msgfmt.c (format_directive_message): Check for standard header + entry fields. + + * xgettext.c (construct_header): MIME-VERSION should be written + MIME-Version. + + * msgmerge.c (main): Don't recognize -f option anymore. This is + the default now. + + * msgfmt.c (format_debrief): New function. Warn if no header + entry is found. + (format_directive_message): Remember if header entry is found. + +Tue Apr 2 11:12:15 1996 Ulrich Drepper <drepper@myware> + + * msgfmt.c (format_constructor): New function. Initialize + is_c_format field. + (format_directive_message): Clear is_c_format field for next message + at the end. + + * xgettext.c, po-lex.h, po-lex.c, po-gram.y, msgmerge.c, msgfmt.c, + msgcmp.c: Use gram_error_at_line instead of gram_error_with_loc + and error_at_line instead of error_with_loc. Roland does not like + my English. + +Tue Apr 2 03:27:34 1996 Ulrich Drepper <drepper@myware> + + * msgunfmt.c (main): Removed -S option. People should think twice + before using this and so are forced to use the long version. + +Tue Apr 2 03:25:56 1996 Fran�ois Pinard <[email protected]> + + * msgunfmt.c (usage): Remove Tab character from message. + +Tue Apr 2 03:15:16 1996 Marcus Daniels <[email protected]> + + * message.c (significant_c_format_p): If is_c_format is `no' this + is significant. + +Tue Apr 2 03:12:24 1996 Kaveh R. Ghazi <[email protected]> + + * po.c (po_comment_filepos): Make definition static as declaration + was before. + + * msgunfmt.c (usage): Add missing \n to help string. + +Mon Apr 1 02:37:45 1996 Ulrich Drepper <drepper@myware> + + * xgettext.c (main): When recognizing file type, default to C + instead of regarding it as an error. Suggested by Marcus Daniels. + + * po.c (po_callback_comment): For now recognize #! also as special + comment. + + * msgmerge.c (merge): Remove --force option. We now always write + the result. It makes no sense to reject the output because some + messages are not matching. + + * po-lex.c (po-gram_error, gram_error_with_loc): Use + error_message_count instead of gram_nerrors. + (gram_nerrors): Remove definition. + + * po-lex.h (po-gram_error, gram_error_with_loc): Use + error_message_count instead of gram_nerrors. + + * xgettext.c: Remove verbose option and variable. + (test_whether_c_format): Don't return `possible' is string + contains no format specifier. + +Sun Mar 31 23:23:40 1996 Ulrich Drepper <drepper@myware> + + * xget-lex.c (xgettext_lex): Fix typo. Reported by Fran�ois + Pinard. + +Thu Mar 28 19:01:22 1996 Ulrich Drepper <drepper@myware> + + * po.c (po_callback_comment): Correct handling of special + comments. Give whole comment to callback function instead of + tokenized form. + +Thu Mar 28 18:37:49 1996 Ulrich Drepper <drepper@myware> + + * xgettext.c (remember_a_message): Always look through comments + because we have to look for c-format comments. + + * message.h, msgmerge.c, xgettext.c, message.c, msgfmt.c: + Implement more detailed C format string handling. Basically coded + by Marcus Daniels. + +Thu Mar 28 16:52:56 1996 Marcus Daniels <[email protected]> + + * Makefile.in (MSGFMT_OBJ): Add message.o. + +Wed Mar 27 03:16:01 1996 Ulrich Drepper <drepper@myware> + + * xget-lex.c (xgettext_lex): Correct implementation of comments + grouped with messages. + +Tue Mar 26 21:23:54 1996 Ulrich Drepper <drepper@myware> + + * po.c (po_callback_comment): Remove unused variable string. + Include <ctype.h> because isspace is used. + + * message.h (message_list_print): Undo change of Mon Mar 25 + 03:34:44 1996. Don't print trailing comment. Remove additional + argument. + + * message.c (message_list_print): Undo change of Mon Mar 25 + 03:34:44 1996. Don't print trailing comment. We now have a + correct implementation of obsolete entry handling. + * msgmerge.c: Ditto. + + * po-lex.h: Add prototype for po_lex_pass_obsolete_entries. + + * po-lex.c (po_gram_lex): Implement handling of comments for + obsolete entries (#~). + + * msgunfmt.c, xgettext.c (main): Undo change of Mon Mar 25 + 03:34:44 1996. Remove added argument to message_list_print again. + + * po-lex.c (po_gram_lex): Small optimization in string collection. + + * message.c (message_print_obsolete): Obsolete messages are now + preceded by #~ on each line. + + * xgettext.c (remember_a_message): Fix bug with dereferencing + dangling pointer. This caused xgettext test 1 to fail. + + * xgettext.c (construct_header): Update format for file header. + + * xgettext.c (extract_directive_message): Don't report error when + message variant exists but the value is the same. Reported by + Roland McGrath. + + * message.c (wrap): Only write characters in escape notation if + explicitely wanted or if it is one of the well known escapes like + \n. + + * msgunfmt.c (main): Adopt interface to GNU coding standard. All + given files on command line are input files. Output by default is + written to standard output and can be redirected using -o. + +Mon Mar 25 04:25:42 1996 Ulrich Drepper <drepper@myware> + + * message.c, message.h (message_list_print): Parameter filename is + const. + + * message.c (wrap): Change line break behaviour a bit. While it + is reasonable to break long line containing #: comments + immediately when reaching the the limit, this could lead to unnice + results for the strings in msgid and msgstr. The programmer + usually knows why the lines are that long. + + So we break for now after reaching 2 * PAGE_WIDTH instead of + PAGE_WIDTH. + + * message.c (message_list_print): Print blank line before trailing + comments. + + * message.c (message_print_obsolete): Don't print anything for + obsolete entries with empty msgstr. + +Mon Mar 25 03:34:44 1996 Ulrich Drepper <drepper@myware> + + * msgunfmt.c (main): Make program by default read from stdin and + by default write to stdout in the appropriate argument is not + given. Suggested by Franc,ois Pinard. + + * msgfmt.c (format_directive_domain): Only check for correct + format string elements is special comment contains c-format. + + * msgfmt.c: Use sizeof instead of strlen to determine length of + constant string. + + * xgettext.c: Implement generation of c-format special comments. + + * msgunfmt.c (main): Call message_list_print with additional + argument set to NULL. + + * xgettext.c (main): Call message_list_print with additional + argument set to NULL; + (extract_class_ty): We don't have field comment_special anymore, but + instead flags fuzzy and c_format. + (extract_constructor): Reset fields fuzzy and c_format. + (extract_directive_message): Set flags according to special comments, + not string list. + (extract_comment_special): Set flags according to special comment. + + * message.h (message_ty): We don't have field comment_special + anymore. Instead flags fuzzy and c_format. + (message_comment_special_append): Remove prototype. + (message_list_print): Add new argument to prototype. + + * message.c (message_alloc): We don't have the comment_special, + but fuzzy and c_format. + (message_comment_special_append): Remove function. We now have flags. + (message_copy, message_merge): Copy fuzzy and c_format flag + appropriately. + (message_print, message_print_obsolete): Print special comment using + flags, not string list. + (message_list_print): Additional argument with trailing comments. + Printed at the end if not NULL. + + * msgmerge.c (merge_class_ty): New fields fuzzy and c_format for + flags; + (trailing_comments): New global variable for list of trailing + comments in definition file. + (grammar): Takes an additional argument which if NULL gets the list of + trailing comments assigned to. + (main): Call message_list_print with additional argument of trailing + comments. + (merge_comment_special): Recognize fuzzy and c-format special comment. + +Sun Mar 24 17:35:26 1996 Ulrich Drepper <drepper@myware> + + * xgettext.c (usage): Option --output-suffix does not exist + anymore. + + * msgmerge.c (usage): --strict does not have short form -S. + + * message.h (message_ty): New field `obsolete'. + + * msgmerge.c (merge): Change behaviour not not matched entries. + Instead of giving a message write them out at the end of the + regular output and precede each line with `# '. + + * message.c (message_list_print): Handle obsolete entries + separately by printing them at the end and preceded by `# '. + (message_print_obsolete): New function to print obsolete entries. + + * Makefile.in ($(PROGRAMS)): Add generated libraries as + dependencies for programs. + + * Makefile.in (PROGRAMS): Remove msgjoin. + +Sun Mar 24 01:03:32 1996 Ulrich Drepper <drepper@myware> + + * xgettext.c (extract_comment_filepos): Only add line comment if + requested by -n option. + + * po.c (po_callback_comment): Short by one bug in special comment + entry copying. + + * po.c (po_callback_comment): Handle special comments. Separate + them into a list of comma separate entries. + + * message.c (message_print): Format of lines containing fuzzy + comments et.al. is now `#, xxx'. + + * Makefile.in: msgjoin program is not anymore generated. + + * xgettext.c: First step to implementing general input file + handling. The program now recognizes the file type by the file + name extension and uses the appropriate function. For now two + file types are recognized: C/C++ and PO. Especially handling PO + files make the msgjoin program obsolete. + +Sat Mar 23 01:50:00 1996 Ulrich Drepper <drepper@myware> + + * msgfmt.c (verbose): Rename to verbose_level. + (main): Increment verbose_level each time -v option is given. + (format_directive_domain): Print some of the diagnostic messages only + if verbosity level is > 1. Suggested by Franc,ois Pinard for a + better interface to PO mode. + + * xgettext.c (scan_c_file): Extract all string if `extract-all' + option is given. Reported by Roland McGrath. + +Thu Mar 14 14:55:20 1996 Ulrich Drepper <drepper@myware> + + * msgfmt.c (format_comment_special): Be prepared that special + comment contains more than one entry, separated by commas. + + * message.c (message_print): Special comments are now written in a + line, separated by commas. + + * msgmerge.c (merge): Replace `INEXACT' with `fuzzy'. + +Thu Mar 14 11:50:48 1996 Marcus Daniels <[email protected]> + + * po-hash.h (po_hash): Change __P to PARAMS in prototype. + +Fri Mar 1 13:35:01 1996 Ulrich Drepper <drepper@myware> + + * msgfmt.c (main): Set error_one_per_line to 1 to prevent more + than one error message per line. Suggested by Franc,ois Pinard. + + * po-lex.h (po_gram_error): Don't write source file name in fatal + message. + (po_gram_error_with_loc): Ditto. + + * po-lex.c (lex_close): Don't write source file name in fatal + message. + (po_gram_error): Ditto. + (po_gram_error_with_loc): Ditto. + +Fri Mar 1 00:30:49 1996 Ulrich Drepper <drepper@myware> + + * po-lex.h: Use PARAMS instead of __P in header declarations. + + * msgcmp.c (compare_methods): Set new field comment_special to + NULL. + + * msgjoin.c (join_methods): Set new field comment_special to NULL. + + * xgettext.c (exclude_methods): Set new field comment_special to + NULL. + + * po.h (struct po_method_ty): New field comment_special. + (po_directive_domain, po_directive_message, po_parse_brief, + po_parse_debrief, po_comment, po_comment_dot, po_comment_filepos): + Remove prototypes. Now are local functions. + + * po.c (po_parse_brief, po_parse_debrief, po_directive_domain, + po_directive_message, po_comment, po_comment_dot, + po_comment_filepos): Declare functions as local and add + prototypes. + (po_comment_special): New function. + (po_callback_comment): For special comments call po_comment_special. + + * msgmerge.c (usage): Add --force in help message. + (merge_methods): Set special comment callback to NULL. + + * po-lex.c (lex_open): Don't set pass_comments to 0. This has to + be done in upper layer functions. + (po_gram_lex): Also pass #! comments up. + + * msgfmt.c (main): Make lexer pass comments up. + (format_comment_special): New function. Warns about `#! INEXACT' + comments. + (format_methods): Add callback for special comment. + +Wed Feb 14 01:56:14 1996 Ulrich Drepper <drepper@myware> + + * xgettext.c (main): Remove option --output-suffix. When default + domain name is "-" write to stdout. + +Mon Feb 12 02:20:09 1996 Ulrich Drepper <drepper@myware> + + * xgettext.c (main): Implement --output-suffix parameter to + determine alternative form of suffix for output file. + + * xgettext.c, msgjoin.c, msgmerge.c, msgunfmt.c (main): Add + additional argument to message_list_print call: control output in + case of empty PO file. + * message.c (message_list_print): Implement FORCE parameter. + * message.h: Change prototype. + +Sun Jan 21 17:24:56 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (install-exec): Include empty else case for case + when Perl is not available. Reported by John David Anglin. + +Sat Dec 23 12:41:43 1995 Jun Young <[email protected]> + + * gettextp.c (usage): Short option for version info is -V. + +Tue Dec 19 22:10:12 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (Makefile, tupdate): Explicitly use $(SHELL) for + running shell scripts. + +Sat Dec 9 17:06:11 1995 Ulrich Drepper <drepper@myware> + + * xgettext.c, xget-lex.h, xget-lex.c, str-list.h, po.h, po.c, + po-lex.c, po-hash.y, po-gram.h, open-po.c, msgunfmt.c, msgmerge.c, + msgjoin.c, msgfmt.c, msgcmp.c, message.h, message.c, gettextp.c: + Use PARAMS instead of __P. Suggested by Roland McGrath. + +Fri Dec 8 01:38:40 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (PROGRAMS): Add definitions for new msgjoin program. + + * msgjoin.c: Initial revision. + +Wed Dec 6 18:43:14 1995 Ulrich Drepper <drepper@myware> + + * open-po.c (open_po_file): Recognize /dev/stdin as name for + stdin. Recognize .pot as valid extension. + +Wed Dec 6 18:05:11 1995 Ulrich Drepper <drepper@myware> + + * msgmerge.c (main): Sort options in getopt loop. + +Mon Dec 4 15:37:22 1995 Ulrich Drepper <drepper@myware> + + * msgmerge.c: (main): Remove unused variable `exit_status'. + +Sun Dec 3 02:51:31 1995 Ulrich Drepper <drepper@myware> + + * xget-lex.h: [xgettext_token_type_ty]: We now have two keyword + types and also the comma is important. + + * xgettext.c (remember_a_message): + Correct handling of -c option. This is not a + string to prepend to output. Instead it selects single strings to + include (instead of all). Reported by Marcus Daniels. + (scan_c_file): Extend state machine. We have to retrieve the second + argument for the keywords `dgettext' and `dcgetetxt`. + + * xget-lex.c (phase5_get): Recognize ','. + (xgettext_lex): Pass ',' on caller. + Return different value for keywords `dgetetxt' and `dcgettext`. + + * xget-lex.c (xgettext_lex): `gettext_noop' is an default keyword. + + * msgunfmt.c (usage): + Message should not contain TABs. Reported by Franc,ois Pinard. + + * msgunfmt.c (usage): + Correct typo: Uniforun -> Uniforum. Reported by Franc,ois Pinard. + +Mon Nov 20 21:12:52 1995 Ulrich Drepper <drepper@myware> + + * po-lex.c, message.c: Some more pretty printing. + + * message.c (wrap): Don't support '\a' and '\v'. + + * xget-lex.c (phase7_getc): Don't support '\v'. + + * po-lex.c (control_sequence): Don't support '\v'. + + * gettextp.c (expand_escape): Don't support \a and \v. + + * msgcmp.c (compare): Really define static. + +Thu Nov 16 22:42:33 1995 Ulrich Drepper <drepper@myware> + + * msgmerge.c (merge): Remove additional parameter in in prototype. + + * xgettext.c: Reomved unused type definition. Patch by Peter Miller. + + * xget-lex.c: Correct some comments and better implementation of + -k option. Patch by Peter Miller. + + * po.h: Fix typos. By Peter Miller. + + * po-lex.c (po_gram_lex): Prevent accumulation of #! comments. + + * po-gram.y (comments): Remove unused rule. + + * msgmerge.c: Implement new options sort-by-file and sort-output. + Patches by Peter Miller. + + * msgcmp.c (domain): Remove unused global variable. + (domain_directive): Remove unused function. + + * message.h: Fix comment for MESSAGE_DOMAIN_DEFAULT definition. + + * message.c (message_print): Correct typo. + Clarify comments about ANSI escape sequences. + Patches by Peter Miller. + + * Makefile.in (DISTFILES): Remove $(COMSRCS). + (MSGFMT_OBJ): Correct indentation. Patches by Peter Miller. + +Sun Nov 12 12:52:29 1995 Ulrich Drepper <drepper@myware> + + * xgettext.c (line, string, comment): Remove unused global variables. + (read_name_from_file): Remove unused variable `cp'. + + * msgmerge.c (merge): Add missing return statement. + + * msgfmt.c (check_pair): Correctly pair comparisons. + + * msgcmp.c (domain_list, mlp): Remove unused global variables. + +Sat Nov 11 21:39:17 1995 Ulrich Drepper <drepper@myware> + + * message.c (message_list_print): + Prevent output if we have no (real) entry. + + * xgettext.c (remember_a_message): Implement exclude file handling. + +Sat Nov 11 17:38:05 1995 Ulrich Drepper <drepper@myware> + + * msgunfmt.c: Fix message. + + * xgettext.c: Use string handling from str-list and .po file + handling use xget-lex et.al. + + * xget-lex.h, xget-lex.c, str-list.h, str-list.c, po.h: + Initial revision. + + * po-lex.h: Allow variable upper limit of errors. + New prototypes. + + * po-lex.c: Allow variable upper limit of errors. + Make comment's text available to the caller. + + * po.c, po-hash.y, po-hash.h: Initial revision. + + * po-gram.y: Add handling of comments. + + * po-gram.h: Remove all but one declaration. + + * msgunfmt.c, msgmerge.c: Initial revision. + + * msgfmt.c: Adopt for new interface to parser. + + * msgcmp.c: Move lot's of general code to other files. + + * message.h, message.c: + Extended functionality for Peter Miller's pseudo-OO programming. + + * Makefile.in: Rewrite after adding rules for new programs. + +Fri Nov 10 10:01:37 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (PROGRAMS): Add new programs msgmerge and msgunfmt. + +Thu Nov 9 01:29:46 1995 Ulrich Drepper <drepper@myware> + + * gettextp.c (usage): Split message in two parts. + + * xgettext.c (usage): Split message in three parts. + + * xgettext.c (main): + Print warning if --files-from option and file names on command + line are given. + + * xgettext.c (long_options): + Mixed up `default-domain' and `directory' values. + +Wed Nov 8 23:31:34 1995 Ulrich Drepper <drepper@myware> + + * xgettext.c: Implement -D and -f option. + +Tue Nov 7 13:44:44 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (LIBS): One @LIBS@ must be @INTLLIBS@. + + * Makefile.in (LIBS): Correct definition. We must be prepared to + use two different libintl.a libraries. + (po-gram.gen.c): Don't use $< in non-implicit rule. + + * Makefile.in (install-exec): Use `test -n' instead of + `test XXX != ""'. Proposed by Franc,ois Pinard. + +Sun Nov 5 23:59:03 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (INSTALL_PROGRAM): Do not specify mode. + +Sun Nov 5 21:13:57 1995 Ulrich Drepper <drepper@myware> + + * xgettext.c, msgfmt.c: + Comments describing what has to be done should start with FIXME. + +Sun Nov 5 19:39:56 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist-gettext): Make synonym for dist. + +Sun Nov 5 18:11:15 1995 Ulrich Drepper <drepper@myware> + + * po-lex.h (gram_error, gram_error_with_loc): + Don't define macros when !__STDC__ + even when using gcc. + + * po-lex.c (gram_error, gram_error_with_loc): + Compile if !__STDC__ even if using gcc. + + * Makefile.in (po-gram.gen.c po-gram.gen.h): + Remove file prior of generation. + +Sun Nov 5 11:39:21 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist): Suppress error message when ln failed. + Get files from $(srcdir) explicitly. + + * xgettext.c (process_c_source): + Make gettext_noop the forth builtin marker. + +Fri Nov 3 00:57:52 1995 Ulrich Drepper <drepper@myware> + + * msgfmt.c (main): Don't free fname when no suffix was added. + +Thu Nov 2 22:55:44 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist): Also remove msgcmp. + +Tue Oct 31 22:27:52 1995 Ulrich Drepper <drepper@myware> + + * msgfmt.c: New option --strict: Only if this is given the .mo + file ending is forced. + + * msgfmt.c (message_directive): + Call error_with_loc with correct parameters. + + * msgfmt.c (message_directive): + Ignores empty message does not count as fatal error. + + * Makefile.in (po-gram.gen.c): + Add g suffix to make multiple substitution in one + line possible. + +Mon Oct 30 22:35:41 1995 Ulrich Drepper <drepper@myware> + + * po-gram.h: + Don't give defines for translation of yy* symbols. This is not enough + to be able to have more than one parser. See src/Makefile for the way + we chose. + + * Makefile.in (po-gram.gen.c): + Rewrite generated source while copying. This is the + only portable way to get more than one parser in the same program. + Patch by Peter Miller. + +Sun Oct 29 10:49:59 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (INSTALL_SCRIPT): New variable. + (install-exec): Install tupdate using INSTALL_SCRIPT to prevent error + when using strip flag. + +Sat Oct 28 14:39:33 1995 Ulrich Drepper <drepper@myware> + + * po-gram.h: Include <sys/types.h>. + + * xgettext.c (main): + Honour -n option even if --omit-header is given. By Peter Miller. + + * msgcmp.c (check_domain_coverage): + No double space in message. By Peter Miller. + + * msgcmp.c (grammar): + Close input file after coverage check. Patch by Peter Miller. + +Wed Sep 27 20:27:26 1995 Ulrich Drepper <drepper@myware> + + * msgcmp.c: + Don't try to include <string.h>. This is done in "system.h". + + * po-lex.c (gram_error, gram_error_with_loc): + Add argument definition for K&R style. + (gram_error, gram_error_with_loc): We increase gram_nerrors, + not nerrors. Reported by Francesco Potorti`. + +Tue Sep 26 10:03:29 1995 Ulrich Drepper <drepper@myware> + + * po-gram.h (yyparse): Add redefinition to gram_parse. + + * Makefile.in (YFLAGS): + Don't use -p option. Stupid old yaccs do not know it. + + * po-lex.c: Include po-gram.h to get redefinitions of yy* symbols. + + * po-gram.h (yylex, yylval, yyerror): + Redefine these symbols to gram_* because the + yacc is now called without -p option. + + * Makefile.in (LIBS): + Undid last change. On some systems libintl.a is not + completely self-contained. alloca() is miisong e.g. on HP-UX. + +Mon Sep 25 22:35:55 1995 Ulrich Drepper <drepper@myware> + + * msgfmt.c (add_mo_suffix): Fix typo. + + * po-lex.h: Include <sys/types.h>. + (lex_open): Argument is now `const char *'. + + * msgfmt.c (add_mo_suffix): + Allow .gmo suffix. Great idea by Marcus Daniels. + +Sat Sep 23 08:20:54 1995 Ulrich Drepper <drepper@myware> + + * po-gram.y, po-lex.c: Include error.h. + + * open-po.c (open_po_file): + Remove unused variables `path_dir' and `open_po_file'. + +Thu Sep 21 15:30:36 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (LIBS): + using libnlsut.a twice is not necessary anymore. libintl.a is + selfcontained. + + * gettextp.c (main): + Use dcgettext__ and bindtextdomain__ instead of __dcgettext + and __bindtextdomain. + + * msgfmt.c, xgettext.c (exit_status): + New variables. Contains exit status for the case the program + ends normally. Changed when non-fatal error messages are given. + +Wed Sep 20 09:16:57 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (xgettext): No also link po-gram.gen.o and po-lex.o. + + * po-lex.c: Pretty print comments. + Do some CSE in computation of hex value. + + * xgettext.c (read_po_file): Now use the generated scanner. + (domain_directive, message_directive): New functions needed for + scanner. + (add_id_str): Correct test for exclude files. The messages in the + exclude table are in raw format, not C format. + (write_out_domain): Check for zero messages and don't write anything in + this case. + + * po-lex.c (lex_open): Argument NAME is now const. + (gram_error): Move VARARGS1 comment to right place. + (control_sequence): Pretty print some comments. + +Mon Sep 18 21:23:55 1995 Ulrich Drepper <drepper@myware> + + * msgfmt.c (add_mo_suffix): Really check for not .mo suffix. + + * xgettext.c (write_out_domain): + Write file names in #: lines to file, not stdout. + + * po-gram.y (grammar): + Remove function. This allows sharing this file in different + programs. + + * domain.h (msg_domain): Member DOMAIN_NAME is now const. + + * Makefile.in (PROGRAMS): Add msgcmp. + (HEADERS): Add message.h. + (SOURCES): Add message.c and msgcmp.c. + (OBJECTS): Add message.o and msgcmp.o. + (msgcmp): Rule to construct program. + + * message.h, message.c: Initial revision + + * msgfmt.c (grammar): Close comment so that function is seen. + (message_directive): MSGID and MSGSTR are not const. + + * msgcmp.c: Initial revision + + * po-gram.h (message_directive): + MSGID and MSGSTR argument are not const. + + * po-gram.h (grammar): Remove prototype. Is now locally defined. + + * po-lex.h (gram_error, gram_error_with_loc): + Protect the instructions by do while (0). + + * msgfmt.c (grammar): + Define function here. This allows sharing the grammar file + with the msgcmp program. + + * msgfmt.c (domain_directive): Free memory of NAME if not needed. + (new_domain): Do not duplicate filename, use it as it is. + + * msgfmt.c (message_directive): + Free parameter string memory here if necessary. + Was done in po-gram.y before. + + * po-gram.h: Remove comment after closing #endif. + + * po-gram.h (grammar): Name parameter in prototype. + +Sun Sep 17 23:29:30 1995 Ulrich Drepper <drepper@myware> + + * xgettext.c (read_po_file): We don't have a search path anymore, + so third argument to open_po_file is not needed anymore. Reduce + argument list by this parameter, too. + + * po-lex.c (lex_open): + We don't have a search path anymore, so third argument to + ope_po_file is not needed anymore. + + * open-po.c (open_po_file): Remove unused `use_path' parameter. + + * Makefile.in (HEADERS): Add po-gram.h and po-lex.h. + + * po-gram.h, po-lex.h: Initial revision + + * Makefile.in (YACC, YFLAGS): New program used for .po file grammar. + (SOURCES): Add po-gram.y and po-lex.c. + (GENHEADERS, GENSOURCES): New variables for generated headers + and sources. + (OBJECTS): Add po-gram.gen.o and po-lex.o. + Add rules for new files and add to dependency list for msgfmt. + + * po-lex.c, po-gram.y: Initial revision + + * xgettext.c: Remove input path handling. + Adapt for new hashing functions return values. + + * msgfmt.c: + Rewrite .po file handling. Use Peter Millers .po file Yacc grammar. + + * open-po.c: Remove handling of input path. + + * xgettext.c (write_out_domain): + Split #: lines each 80 columns. Based on a patch by + Peter Miller. + + * Makefile.in: hash.[ch] moved from src/ to lib/ subdirectory. + +Wed Aug 23 21:13:11 1995 Ulrich Drepper <drepper@myware> + + * tupdate.in: Don't print comment in front of obsolete entries. + +Tue Aug 22 22:16:31 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (AR, RANLIB): Remove definition. Not needed here. + Reported by Franc,ois Pinard. + +Sat Aug 19 17:38:22 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (install-src): + Make behave like install. I.e. really install the catalogs. + +Sat Aug 19 00:57:07 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (SCRIPTS): + New variable. Contains names of scipts to be generated and + installed. For now it is tupdate. + (PROGRAMS): Remove tupdate. + (all): Also depend on $(SCRIPTS). + +Fri Aug 18 13:02:04 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (PROGRAMS): Add tupdate. + (tupdate): New rule. Rebuild tupdate if tupdate.in or + ../config.status changed. + + * tupdate.in: Correct case where message is new: no really print msgid. + Better help message by Franc,ois Pinard. + Recognize #\t as comment. + Print comment for now obsolete entries. + Handle real comments (translator comments and tupdate generate obsolete + entries). + + * gettextp.c (usage): Better help message. + (usage): Add -s description to help screen. + +Mon Aug 14 23:50:48 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (install-src): New no-op goal. + +Thu Aug 10 11:26:45 1995 Ulrich Drepper <drepper@myware> + + * tupdate.in: Don't print two " in front of commented out msgstrs. + +Wed Aug 9 09:10:30 1995 Ulrich Drepper <drepper@myware> + + * hash.c: + Better implementation. Rehashing is now much faster because the + hashing value stored in the `used' field is reused. + (insert_entry): Split into two function. `insert_entry_2' now does the + the work while in `insert_entry' the checks are done. + (lookup_2): New function. Expects the search key to be NUL + terminated. This is the case when the key is already in the + hash table when rehashing. + + * msgfmt.c (write_table): + Third argument to `iterate_table' is now a `const' pointer. + + * hash.h (iterate_table): Third arguemtn is `const' pointer. + + * xgettext.c (struct id_str): Make fields `const' pointers. + +Fri Aug 4 22:45:39 1995 Ulrich Drepper <drepper@myware> + + * msgfmt.c (main): Fix typo: me -> we. + + * msgfmt.c (output_file_open): Remove this unused variable. + Reported by Jim Meyering. + + * Makefile.in (dist): Remove `copying instead' message. + + * gettextp.c: Start to implement non-Uniforum behaviour. + Implemented new mode where gettext behaves like `echo', + while translating the messages available in the specified test. + New option: -d, -e, -E, also available in normal mode: + -E: ignored. + -e: enable expansion of some escape sequences. + -d: specify text domain to use. + New option: -s: enable `echo' mode. + +Thu Aug 3 18:25:37 1995 Ulrich Drepper <drepper@myware> + + * msgfmt.c (usage): + Fix typo: anormalies -> anomalies. + Reported by Karl Anders O/ygard. + +Wed Aug 2 18:51:08 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (ID, TAGS): Do not use $^. + + * xgettext.c (write-header): Add `Content-Type' field. + +Tue Aug 1 20:07:58 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (distclean): Remove ID file. + + * Makefile.in (TAGS, ID): Use $^ as command argument. + (TAGS): Give etags -o option t write to current directory, + not $(srcdir). + (ID): Use $(srcdir) instead os $(top_srcdir)/src. + +Mon Jul 31 20:57:48 1995 Ulrich Drepper <drepper@myware> + + * msgfmt.c (process_po_file): + Quote msgstr in message "empty `msgstr' entry ignored". + Report by Karl Anders O/ygard. + +Sun Jul 30 12:14:29 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (LIBS): Always use ../intl/libintl.a. + (all): Always depend on ../intl/libintl.a. + +Tue Jul 25 00:15:01 1995 Ulrich Drepper <drepper@myware> + + * msgfmt.c (process_po_file): Correct problem with empty lines. + +Sun Jul 23 22:47:56 1995 Ulrich Drepper <drepper@myware> + + * msgfmt.c (process_po_file): + Give a message when a sole msgid is found at the end of file. + +Wed Jul 19 01:52:13 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (PROGRAMS): Always compile all three programs. + + * gettextp.c: Include libgettext.h explicitly, in addition to + libintl.h. On system having libintl.h provided by the C library + this assures to have the prototypes for the function defined in + GNU gettext library. + Use __bindtextdomain and __dgettext instead of bindtextdomain and + dgettext resp. + Swap arguments in bindtextdomain call. + +Tue Jul 18 23:57:16 1995 Ulrich Drepper <drepper@myware> + + * xgettext.c (add_id_str): + `free(msgstr)' can fail on system not allowing free(0). + Reported by Francesco Potorti`. + +Tue Jul 18 19:43:41 1995 Ulrich Drepper <drepper@myware> + + * xgettext.c (getpwuid): + Define prototype if !defined _POSIX_VERSION. + + * hash.c: Don't include malloc.h and string.h because it will be + done in system.h. + + * msgfmt.c: Don't include malloc.h because it will be done in + system.h. + +Sat Jul 15 00:45:31 1995 Ulrich Drepper <drepper@myware> + + * xgettext.c (main): + Disable line_comment option when omit_header is selected. + (write_out_domain): Don't write empty line if !line_comment. + + * Makefile.in (DISTFILES): + Due shorted file names now distribute tupdate.in. + (install, clean): Handle tupdate, not tupdate.perl. + + * tupdate.in: Rename tupdate.perl.in to tupdate.in to fit in 14 + character file systems. + +Thu Jul 13 22:21:22 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (install): Test whether Perl was found before + installing. + + * tupdate.perl.in: Make die message more GNU-like. + + * gettextp.c (usage): + Protect prototypes with __P and use K&R form for parameters. + + * xgettext.c (main): + Don't use 100u; poor K&R compilers need (unsigned) 100. + + * open-po.c (xstrdup): Protect prototype with __P. + + * msgfmt.c (usage, new_domain, process_po_file, compare_id, + write_table, check_pair): Protect prototypes with __P. + + * hash.c (xmalloc): Protect prototype with __P. + +Thu Jul 13 01:39:47 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (check): New no-op goal. + +Wed Jul 12 10:40:54 1995 Ulrich Drepper <drepper@myware> + + * tupdate.perl.in: Implement --help and --version options + + * xgettext.c: Add --string-limit option to specify limit on string + length. + Only warned when verbose mode is selected. + Add --verbose option. + Help message now correctly says --version == -V. + +Tue Jul 11 22:57:54 1995 Ulrich Drepper <drepper@myware> + + * xgettext.c (usage): Split help string because it breaks 1024 + byte limit. + + * Makefile.in (install-exec): Install tupdate. + + * xgettext.c (stdlib.h): Protect inclusion by STDC_HEADERS. + (assert): No assertions anymore. + (HAVE_STRTOUL): strtoul is now substituted when not available. + Add warning about too long strings (some systems have limits + for strings in their compiler and/or tools). E.g. Sinix's + gencat program. + + * msgfmt.c (printf.h): Include always + (assert): No assertions anymore (all bugs are gone :-). + (HAVE_STRTOUL): Not needed anymore because we substitute + strtoul if not present. + + * Makefile.in (DISTFILES,distclean): tupdate.perl is now found here. + +Tue Jul 11 01:31:03 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: msgfmt.o depends on ../lib/printf.h. + + * msgfmt.c: protect inclusion of malloc.h and stdlib.h. + Don't use GCC's `case b ... e:' feature (NeXT's gcc is + gcc-2.xx but does not understand this. Grrr!). + + * open-po.c: Protect inclusion of string.h and stdlib.h. + + * hash.c: Pretty print #define. + (init_hash, insert_entry): Cast result of calloc. + (insert_entry): Remove non-ANSI `(type *) var = ...' by + `*(type **) &var = ...'. + (compute_hashval): Cast constant to unsigned long (default: int). + Has effects on 64-bit machines. + +Tue Jul 4 00:39:58 1995 Ulrich Drepper <drepper@myware> + + * xgettext.c: Don't write "Version:" field for msgid "". + +Mon Jul 3 23:02:04 1995 Ulrich Drepper <drepper@myware> + + * xgettext.c, msgfmt.c: Better comment. + + * Makefile.in: Pretty print with Franc,ois. + Fix typo in dependencies. + Even more dependency corrections. + Correct dependencies of open-po.c. + Remove unneeded $(srcdir) from Makefile.in dependency. + (LIBS): Correct for building in different directory. + (INCLUDES): Correct for building in different directory. + (DEFS): Rename DEF_MSG_DOM_DIR to LOCALEDIR. + (INCLUDE): Don't use -I paths when not needed. + + * hash.c: Include malloc.c and protect string.h inclusion. + + * gettextp.c: Protect include of stdlib.h declare prototype for + getenv if not __STDC__. + Include system.h for EXIT_FAILURE. + (main, usage): Replace DEF_MSG_DOM_DIR by LOCALEDIR. + + * open-po.c: Include system.h for EXIT_FAILURE. + + * msgfmt.c: Fix typo in !__STDC__ path. + (process_po_file): Change for new .po file format. + + * xgettext.c (main): Rename DEF_MSG_DOM_DIR to LOCALEDIR. + Update to new .po file format because Solaris' msgfmt can only + handle ANSI C style multi-line strings. + +Sun Jul 2 21:31:00 1995 Ulrich Drepper <drepper@myware> + + * gettextp.c: gettextp.c (usage): Fix typo in help message. + Reported by Franc,ois Pinard. + +Sun Jul 2 02:12:41 1995 Ulrich Drepper <drepper@myware> + + * First official release. This directory contains the + source code for the programs specified in the Uniforum proposal + for internationalization. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/Makefile.am b/debian/gettext-kde/gettext-kde-0.10.35/src/Makefile.am new file mode 100644 index 00000000..895869f6 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/Makefile.am @@ -0,0 +1,75 @@ +## Makefile for program src directory in GNU NLS utilities package. +## Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, 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. + +## Process this file with automake to produce Makefile.in. + +AUTOMAKE_OPTIONS = 1.2 gnits + +bin_PROGRAMS = gettext msgcmp msgfmt msgmerge msgunfmt xgettext msgcomm + +noinst_HEADERS = domain.h message.h po-gram.h po-hash.h po-lex.h po.h \ +str-list.h xget-lex.h po-gram.gen.h po-hash.gen.h dir-list.h + +EXTRA_DIST = po-gram.y po-hash.y + +datadir = $(prefix)/@DATADIRNAME@ +localedir = $(datadir)/locale + +l = @l@ + +INCLUDES = -I$(srcdir) -I.. -I$(top_srcdir)/lib -I../intl -I$(top_srcdir)/intl +DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ +LDADD = ../lib/libnlsut.a ../intl/libintl.$la + +SED = sed +YACC = @YACC@ +YFLAGS = -d + +# Source dependecies. +gettext_SOURCES = gettextp.c +msgcmp_SOURCES = message.c msgcmp.c open-po.c po-gram.gen.c po-hash.gen.c \ +po-lex.c po.c str-list.c dir-list.c +msgfmt_SOURCES = msgfmt.c open-po.c po-gram.gen.c po-hash.gen.c po-lex.c po.c \ +str-list.c message.c dir-list.c +msgmerge_SOURCES = message.c msgmerge.c open-po.c po-gram.gen.c po-hash.gen.c \ +po-lex.c po.c str-list.c dir-list.c +msgunfmt_SOURCES = message.c msgunfmt.c str-list.c +xgettext_SOURCES = message.c open-po.c po-gram.gen.c po-hash.gen.c po-lex.c \ +po.c str-list.c xget-lex.c xgettext.c dir-list.c +msgcomm_SOURCES = msgcomm.c message.c po-gram.gen.c po-hash.gen.c po-lex.c \ +open-po.c po.c str-list.c dir-list.c + +MAINTAINERCLEANFILES = po-gram.gen.c po-gram.gen.h po-hash.gen.c po-hash.gen.h + +# Some rules for yacc handling. +po-gram.gen.c po-gram.gen.h: po-gram.y + $(YACC) $(YFLAGS) $(srcdir)/po-gram.y + if test -s y.tab.c && test -s y.tab.h; then \ + rm -f $(srcdir)/po-gram.gen.c $(srcdir)/po-gram.gen.h; \ + $(SED) 's/[yY][yY]/po_gram_/g' < y.tab.c > $(srcdir)/po-gram.gen.c; \ + $(SED) 's/[yY][yY]/po_gram_/g' < y.tab.h > $(srcdir)/po-gram.gen.h; \ + fi + rm -f y.tab.c y.tab.h + +po-hash.gen.c po-hash.gen.h: po-hash.y + $(YACC) $(YFLAGS) $(srcdir)/po-hash.y + if test -s y.tab.c && test -s y.tab.h; then \ + rm -f $(srcdir)/po-hash.gen.c $(srcdir)/po-hash.gen.h; \ + $(SED) 's/[yY][yY]/po_hash_/g' < y.tab.c > $(srcdir)/po-hash.gen.c; \ + $(SED) 's/[yY][yY]/po_hash_/g' < y.tab.h > $(srcdir)/po-hash.gen.h; \ + fi + rm -f y.tab.c y.tab.h diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/Makefile.in b/debian/gettext-kde/gettext-kde-0.10.35/src/Makefile.in new file mode 100644 index 00000000..8ea49e4d --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/Makefile.in @@ -0,0 +1,454 @@ +# Makefile.in generated automatically by automake 1.3 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +ACLOCAL_VERSION = @ACLOCAL_VERSION@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +DATADIRNAME = @DATADIRNAME@ +EMACS = @EMACS@ +GENCAT = @GENCAT@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GT_NO = @GT_NO@ +GT_YES = @GT_YES@ +INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ +INSTOBJEXT = @INSTOBJEXT@ +INTLDEPS = @INTLDEPS@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +LD = @LD@ +LIBOBJS = @LIBOBJS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +NM = @NM@ +PACKAGE = @PACKAGE@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +aclocaldir = @aclocaldir@ +lispdir = @lispdir@ + +AUTOMAKE_OPTIONS = 1.2 gnits + +bin_PROGRAMS = gettext msgcmp msgfmt msgmerge msgunfmt xgettext msgcomm + +noinst_HEADERS = domain.h message.h po-gram.h po-hash.h po-lex.h po.h \ +str-list.h xget-lex.h po-gram.gen.h po-hash.gen.h dir-list.h + +EXTRA_DIST = po-gram.y po-hash.y + +datadir = $(prefix)/@DATADIRNAME@ +localedir = $(datadir)/locale + +l = @l@ + +INCLUDES = -I$(srcdir) -I.. -I$(top_srcdir)/lib -I../intl -I$(top_srcdir)/intl +DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ +LDADD = ../lib/libnlsut.a ../intl/libintl.$la + +SED = sed +YACC = @YACC@ +YFLAGS = -d + +# Source dependecies. +gettext_SOURCES = gettextp.c +msgcmp_SOURCES = message.c msgcmp.c open-po.c po-gram.gen.c po-hash.gen.c \ +po-lex.c po.c str-list.c dir-list.c +msgfmt_SOURCES = msgfmt.c open-po.c po-gram.gen.c po-hash.gen.c po-lex.c po.c \ +str-list.c message.c dir-list.c +msgmerge_SOURCES = message.c msgmerge.c open-po.c po-gram.gen.c po-hash.gen.c \ +po-lex.c po.c str-list.c dir-list.c +msgunfmt_SOURCES = message.c msgunfmt.c str-list.c +xgettext_SOURCES = message.c open-po.c po-gram.gen.c po-hash.gen.c po-lex.c \ +po.c str-list.c xget-lex.c xgettext.c dir-list.c +msgcomm_SOURCES = msgcomm.c message.c po-gram.gen.c po-hash.gen.c po-lex.c \ +open-po.c po.c str-list.c dir-list.c + +MAINTAINERCLEANFILES = po-gram.gen.c po-gram.gen.h po-hash.gen.c po-hash.gen.h +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(bin_PROGRAMS) + +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +gettext_OBJECTS = gettextp.o +gettext_LDADD = $(LDADD) +gettext_DEPENDENCIES = ../lib/libnlsut.a ../intl/libintl.$la +gettext_LDFLAGS = +msgcmp_OBJECTS = message.o msgcmp.o open-po.o po-gram.gen.o \ +po-hash.gen.o po-lex.o po.o str-list.o dir-list.o +msgcmp_LDADD = $(LDADD) +msgcmp_DEPENDENCIES = ../lib/libnlsut.a ../intl/libintl.$la +msgcmp_LDFLAGS = +msgfmt_OBJECTS = msgfmt.o open-po.o po-gram.gen.o po-hash.gen.o \ +po-lex.o po.o str-list.o message.o dir-list.o +msgfmt_LDADD = $(LDADD) +msgfmt_DEPENDENCIES = ../lib/libnlsut.a ../intl/libintl.$la +msgfmt_LDFLAGS = +msgmerge_OBJECTS = message.o msgmerge.o open-po.o po-gram.gen.o \ +po-hash.gen.o po-lex.o po.o str-list.o dir-list.o +msgmerge_LDADD = $(LDADD) +msgmerge_DEPENDENCIES = ../lib/libnlsut.a ../intl/libintl.$la +msgmerge_LDFLAGS = +msgunfmt_OBJECTS = message.o msgunfmt.o str-list.o +msgunfmt_LDADD = $(LDADD) +msgunfmt_DEPENDENCIES = ../lib/libnlsut.a ../intl/libintl.$la +msgunfmt_LDFLAGS = +xgettext_OBJECTS = message.o open-po.o po-gram.gen.o po-hash.gen.o \ +po-lex.o po.o str-list.o xget-lex.o xgettext.o dir-list.o +xgettext_LDADD = $(LDADD) +xgettext_DEPENDENCIES = ../lib/libnlsut.a ../intl/libintl.$la +xgettext_LDFLAGS = +msgcomm_OBJECTS = msgcomm.o message.o po-gram.gen.o po-hash.gen.o \ +po-lex.o open-po.o po.o str-list.o dir-list.o +msgcomm_LDADD = $(LDADD) +msgcomm_DEPENDENCIES = ../lib/libnlsut.a ../intl/libintl.$la +msgcomm_LDFLAGS = +CFLAGS = @CFLAGS@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) +LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@ +HEADERS = $(noinst_HEADERS) + +DIST_COMMON = ChangeLog Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP = --best +SOURCES = $(gettext_SOURCES) $(msgcmp_SOURCES) $(msgfmt_SOURCES) $(msgmerge_SOURCES) $(msgunfmt_SOURCES) $(xgettext_SOURCES) $(msgcomm_SOURCES) +OBJECTS = $(gettext_OBJECTS) $(msgcmp_OBJECTS) $(msgfmt_OBJECTS) $(msgmerge_OBJECTS) $(msgunfmt_OBJECTS) $(xgettext_OBJECTS) $(msgcomm_OBJECTS) + +all: Makefile $(PROGRAMS) $(HEADERS) + +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnits --include-deps src/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-binPROGRAMS: + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +distclean-binPROGRAMS: + +maintainer-clean-binPROGRAMS: + +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(bin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \ + done + +.c.o: + $(COMPILE) -c $< + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +gettext: $(gettext_OBJECTS) $(gettext_DEPENDENCIES) + @rm -f gettext + $(LINK) $(gettext_LDFLAGS) $(gettext_OBJECTS) $(gettext_LDADD) $(LIBS) + +msgcmp: $(msgcmp_OBJECTS) $(msgcmp_DEPENDENCIES) + @rm -f msgcmp + $(LINK) $(msgcmp_LDFLAGS) $(msgcmp_OBJECTS) $(msgcmp_LDADD) $(LIBS) + +msgfmt: $(msgfmt_OBJECTS) $(msgfmt_DEPENDENCIES) + @rm -f msgfmt + $(LINK) $(msgfmt_LDFLAGS) $(msgfmt_OBJECTS) $(msgfmt_LDADD) $(LIBS) + +msgmerge: $(msgmerge_OBJECTS) $(msgmerge_DEPENDENCIES) + @rm -f msgmerge + $(LINK) $(msgmerge_LDFLAGS) $(msgmerge_OBJECTS) $(msgmerge_LDADD) $(LIBS) + +msgunfmt: $(msgunfmt_OBJECTS) $(msgunfmt_DEPENDENCIES) + @rm -f msgunfmt + $(LINK) $(msgunfmt_LDFLAGS) $(msgunfmt_OBJECTS) $(msgunfmt_LDADD) $(LIBS) + +xgettext: $(xgettext_OBJECTS) $(xgettext_DEPENDENCIES) + @rm -f xgettext + $(LINK) $(xgettext_LDFLAGS) $(xgettext_OBJECTS) $(xgettext_LDADD) $(LIBS) + +msgcomm: $(msgcomm_OBJECTS) $(msgcomm_DEPENDENCIES) + @rm -f msgcomm + $(LINK) $(msgcomm_LDFLAGS) $(msgcomm_OBJECTS) $(msgcomm_LDADD) $(LIBS) + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $(SOURCES) $(HEADERS) $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = src + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done +dir-list.o: dir-list.c ../config.h ../lib/system.h dir-list.h str-list.h +gettextp.o: gettextp.c ../config.h ../lib/getopt.h ../lib/error.h \ + ../lib/system.h ../intl/libgettext.h +message.o: message.c ../config.h ../lib/fstrcmp.h message.h po-lex.h \ + ../lib/error.h str-list.h ../lib/system.h ../intl/libgettext.h +msgcmp.o: msgcmp.c ../config.h ../lib/getopt.h dir-list.h ../lib/error.h \ + message.h po-lex.h str-list.h ../lib/system.h po.h +msgcomm.o: msgcomm.c ../config.h ../lib/getopt.h dir-list.h \ + ../lib/error.h ../lib/getline.h ../intl/libgettext.h message.h \ + po-lex.h str-list.h po.h ../lib/system.h +msgfmt.o: msgfmt.c ../config.h ../lib/getopt.h ../lib/hash.h \ + ../lib/obstack.h dir-list.h ../lib/error.h ../lib/getline.h \ + ../lib/printf.h ../lib/system.h ../intl/gettext.h domain.h \ + ../intl/hash-string.h message.h po-lex.h str-list.h po.h +msgmerge.o: msgmerge.c ../config.h ../lib/getopt.h dir-list.h \ + ../lib/error.h message.h po-lex.h str-list.h ../lib/system.h \ + po.h +msgunfmt.o: msgunfmt.c ../config.h ../lib/getopt.h ../lib/hash.h \ + ../lib/obstack.h ../lib/error.h ../lib/getline.h \ + ../lib/printf.h ../lib/system.h ../intl/gettext.h domain.h \ + ../intl/hash-string.h message.h po-lex.h str-list.h +open-po.o: open-po.c ../config.h dir-list.h ../lib/error.h \ + ../lib/system.h +po-gram.gen.o: po-gram.gen.c ../config.h po-lex.h ../lib/error.h \ + po-gram.h ../lib/system.h po.h +po-hash.gen.o: po-hash.gen.c ../config.h ../lib/system.h po-hash.h po.h \ + po-lex.h ../lib/error.h +po-lex.o: po-lex.c ../config.h po-lex.h ../lib/error.h po-gram.h \ + ../lib/system.h po-gram.gen.h +po.o: po.c ../config.h po.h po-lex.h ../lib/error.h po-hash.h \ + ../lib/system.h +str-list.o: str-list.c ../config.h ../lib/system.h str-list.h +xget-lex.o: xget-lex.c ../config.h dir-list.h ../lib/error.h \ + ../lib/system.h ../intl/libgettext.h str-list.h xget-lex.h +xgettext.o: xgettext.c ../config.h ../lib/getopt.h dir-list.h \ + ../lib/error.h ../lib/hash.h ../lib/obstack.h ../lib/getline.h \ + ../lib/system.h po.h po-lex.h message.h str-list.h xget-lex.h \ + ../lib/printf-parse.h ../lib/printf.h ../intl/gettext.h \ + domain.h + +info: +dvi: +check: all + $(MAKE) +installcheck: +install-exec: install-binPROGRAMS + @$(NORMAL_INSTALL) + +install-data: + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: uninstall-binPROGRAMS + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + $(mkinstalldirs) $(DATADIR)$(bindir) + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-binPROGRAMS mostlyclean-compile \ + mostlyclean-libtool mostlyclean-tags \ + mostlyclean-generic + +clean: clean-binPROGRAMS clean-compile clean-libtool clean-tags \ + clean-generic mostlyclean + +distclean: distclean-binPROGRAMS distclean-compile distclean-libtool \ + distclean-tags distclean-generic clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-binPROGRAMS maintainer-clean-compile \ + maintainer-clean-libtool maintainer-clean-tags \ + maintainer-clean-generic distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ +maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile mostlyclean-libtool distclean-libtool \ +clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info dvi \ +installcheck install-exec install-data install uninstall all \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# Some rules for yacc handling. +po-gram.gen.c po-gram.gen.h: po-gram.y + $(YACC) $(YFLAGS) $(srcdir)/po-gram.y + if test -s y.tab.c && test -s y.tab.h; then \ + rm -f $(srcdir)/po-gram.gen.c $(srcdir)/po-gram.gen.h; \ + $(SED) 's/[yY][yY]/po_gram_/g' < y.tab.c > $(srcdir)/po-gram.gen.c; \ + $(SED) 's/[yY][yY]/po_gram_/g' < y.tab.h > $(srcdir)/po-gram.gen.h; \ + fi + rm -f y.tab.c y.tab.h + +po-hash.gen.c po-hash.gen.h: po-hash.y + $(YACC) $(YFLAGS) $(srcdir)/po-hash.y + if test -s y.tab.c && test -s y.tab.h; then \ + rm -f $(srcdir)/po-hash.gen.c $(srcdir)/po-hash.gen.h; \ + $(SED) 's/[yY][yY]/po_hash_/g' < y.tab.c > $(srcdir)/po-hash.gen.c; \ + $(SED) 's/[yY][yY]/po_hash_/g' < y.tab.h > $(srcdir)/po-hash.gen.h; \ + fi + rm -f y.tab.c y.tab.h + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/dir-list.c b/debian/gettext-kde/gettext-kde-0.10.35/src/dir-list.c new file mode 100644 index 00000000..e02d7089 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/dir-list.c @@ -0,0 +1,55 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1996, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + +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, 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. */ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef STDC_HEADERS +# include <stdlib.h> +#endif + +#include "system.h" +#include "dir-list.h" +#include "str-list.h" + +static string_list_ty *directory; + + +void +dir_list_append (s) + const char *s; +{ + if (directory == NULL) + directory = string_list_alloc (); + string_list_append_unique (directory, s); +} + + +const char * +dir_list_nth (n) + int n; +{ + if (directory == NULL) + dir_list_append ("."); + if (n < 0 || n >= directory->nitems) + return NULL; + return directory->item[n]; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/dir-list.h b/debian/gettext-kde/gettext-kde-0.10.35/src/dir-list.h new file mode 100644 index 00000000..fd6bae7a --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/dir-list.h @@ -0,0 +1,26 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1996, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + +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, 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. */ + +#ifndef SRC_DIR_LIST_H +#define SRC_DIR_LIST_H + +void dir_list_append PARAMS ((const char *__directory)); +const char *dir_list_nth PARAMS ((int __n)); + +#endif /* SRC_DIR_LIST_H */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/domain.h b/debian/gettext-kde/gettext-kde-0.10.35/src/domain.h new file mode 100644 index 00000000..c3d4284f --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/domain.h @@ -0,0 +1,35 @@ + +/* Copyright (C) 1995 Free Software Foundation, Inc. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library 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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#ifndef _DOMAIN_H +#define _DOMAIN_H 1 + +#include <stdio.h> +#include "hash.h" + +struct msg_domain +{ + /* Table for mapping message IDs to message strings. */ + hash_table symbol_tab; + /* Name domain these ID/String pairs are part of. */ + const char *domain_name; + /* Link to the next domain. */ + struct msg_domain *next; +}; + +#endif /* domain.h */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/gettextp.c b/debian/gettext-kde/gettext-kde-0.10.35/src/gettextp.c new file mode 100644 index 00000000..911577e6 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/gettextp.c @@ -0,0 +1,351 @@ +/* gettext - retrieve text string from message catalog and print it. + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + Written by Ulrich Drepper <[email protected]>, May 1995. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <getopt.h> +#include <stdio.h> + +#ifdef STDC_HEADERS +# include <stdlib.h> +#else +char *getenv (); +#endif + +#ifdef HAVE_LOCALE_H +# include <locale.h> +#endif + +#include "error.h" +#include "system.h" + +#include "libgettext.h" + +#define _(str) gettext (str) + +/* If nonzero add newline after last string. This makes only sense in + the `echo' emulation mode. */ +int add_newline; +/* If nonzero expand escape sequences in strings before looking in the + message catalog. */ +int do_expand; + +/* Name the program is called with. */ +char *program_name; + +/* Long options. */ +static const struct option long_options[] = +{ + { "domain", required_argument, NULL, 'd' }, + { "help", no_argument, NULL, 'h' }, + { "shell-script", no_argument, NULL, 's' }, + { "version", no_argument, NULL, 'V' }, + { NULL, 0, NULL, 0 } +}; + +/* Prototypes for local functions. */ +static void usage PARAMS ((int __status)) +#if defined __GNUC__ && ((__GNUC__ == 2 && __GNUC_MINOR__ >= 5) || __GNUC__ > 2) + __attribute__ ((noreturn)) +#endif +; +static const char *expand_escape PARAMS((const char *__str)); + +int +main (argc, argv) + int argc; + char *argv[]; +{ + int optchar; + int do_help = 0; + int do_shell = 0; + int do_version = 0; + const char *msgid; + const char *domain = getenv ("TEXTDOMAIN"); + const char *domaindir = getenv ("TEXTDOMAINDIR"); + + /* Set program name for message texts. */ + program_name = argv[0]; + add_newline = 1; + do_expand = 0; + +#ifdef HAVE_SETLOCALE + /* Set locale via LC_ALL. */ + setlocale (LC_ALL, ""); +#endif + + /* Set the text message domain. */ + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + + while ((optchar = getopt_long (argc, argv, "+d:eEhnsV", long_options, NULL)) + != EOF) + switch (optchar) + { + case '\0': /* Long option. */ + break; + case 'd': + domain = optarg; + break; + case 'e': + do_expand = 1; + break; + case 'E': + /* Ignore. Just for compatibility. */ + break; + case 'h': + do_help = 1; + break; + case 'n': + add_newline = 0; + break; + case 's': + do_shell = 1; + break; + case 'V': + do_version = 1; + break; + default: + usage (EXIT_FAILURE); + } + + /* Version information is requested. */ + if (do_version) + { + printf ("%s (GNU %s) %s\n", basename (program_name), PACKAGE, VERSION); + /* xgettext: no-wrap */ + printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\ +This is free software; see the source for copying conditions. There is NO\n\ +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ +"), + "1995, 1996, 1997"); + printf (_("Written by %s.\n"), "Ulrich Drepper"); + exit (EXIT_SUCCESS); + } + + /* Help is requested. */ + if (do_help) + usage (EXIT_SUCCESS); + + /* We have two major modes: use following Uniforum spec and as + internationalized `echo' program. */ + if (do_shell == 0) + { + /* We have to write a single strings translation to stdout. */ + + if (optind >= argc) + error (EXIT_FAILURE, 0, _("missing arguments")); + + /* Get arguments. */ + msgid = argv[optind++]; + if (optind < argc) + { + domain = msgid; + msgid = argv[optind++]; + + if (optind < argc) + error (EXIT_FAILURE, 0, _("too many arguments")); + } + + /* If no domain name is given we print the original string. */ + if (domain == NULL || domain[0] == '\0') + { + fputs (msgid, stdout); + exit (EXIT_SUCCESS); + } + + /* Bind domain to appropriate directory. */ + if (domaindir != NULL && domaindir[0] != '\0') + bindtextdomain__ (domain, domaindir); + + /* Expand escape sequences is enabled. */ + if (do_expand) + msgid = expand_escape (msgid); + + /* Write out the result. */ + fputs (dgettext__ (domain, msgid), stdout); + } + else + { + /* If no domain name is given we print the original string. + We mark this assigning NULL to domain. */ + if (domain == NULL || domain[0] == '\0') + domain = NULL; + else + /* Bind domain to appropriate directory. */ + if (domaindir != NULL && domaindir[0] != '\0') + bindtextdomain__ (domain, domaindir); + + /* We have to simulate `echo'. All arguments are strings. */ + while (optind < argc) + { + msgid = argv[optind++]; + + /* Expand escape sequences is enabled. */ + if (do_expand) + msgid = expand_escape (msgid); + + /* Write out the result. */ + fputs (domain == NULL ? msgid : dgettext__ (domain, msgid), stdout); + + /* We separate the arguments by a single ' '. */ + if (optind < argc) + fputc (' ', stdout); + } + + /* If not otherwise told add trailing newline. */ + if (add_newline) + fputc ('\n', stdout); + } + + exit (EXIT_SUCCESS); +} + + +/* Display usage information and exit. */ +static void +usage (status) + int status; +{ + if (status != EXIT_SUCCESS) + fprintf (stderr, _("Try `%s --help' for more information.\n"), + program_name); + else + { + /* xgettext: no-wrap */ + printf (_("\ +Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n\ + -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n\ + -e enable expansion of some escape sequences\n\ + -E (ignored for compatibility)\n\ + -h, --help display this help and exit\n\ + -n suppress trailing newline\n\ + -V, --version display version information and exit\n\ + [TEXTDOMAIN] MSGID retrieve translated message corresponding\n\ + to MSGID from TEXTDOMAIN\n"), + program_name); + /* xgettext: no-wrap */ + printf (_("\ +\n\ +If the TEXTDOMAIN parameter is not given, the domain is determined from the\n\ +environment variable TEXTDOMAIN. If the message catalog is not found in the\n\ +regular directory, another location can be specified with the environment\n\ +variable TEXTDOMAINDIR.\n\ +When used with the -s option the program behaves like the `echo' command.\n\ +But it does not simply copy its arguments to stdout. Instead those messages\n\ +found in the selected catalog are translated.\n\ +Standard search directory: %s\n"), LOCALEDIR); + fputs (_("Report bugs to <[email protected]>.\n"), stdout); + } + + exit (status); +} + + +/* Expand some escape sequences found in the argument string. */ +static const char * +expand_escape (str) + const char *str; +{ + char *retval, *rp; + const char *cp = str; + + do + { + while (cp[0] != '\0' && cp[0] != '\\') + ++cp; + } + while (cp[0] != '\0' && cp[1] != '\0' + && strchr ("bcfnrt\\01234567", cp[1]) == NULL); + + if (cp[0] == '\0') + return str; + + retval = (char *) xmalloc (strlen (str)); + + rp = retval + (cp - str); + memcpy (retval, str, cp - str); + + do + { + switch (*++cp) + { + case 'b': /* backspace */ + *rp++ = '\b'; + ++cp; + break; + case 'c': /* suppress trailing newline */ + add_newline = 0; + ++cp; + break; + case 'f': /* form feed */ + *rp++ = '\f'; + ++cp; + break; + case 'n': /* new line */ + *rp++ = '\n'; + ++cp; + break; + case 'r': /* carriage return */ + *rp++ = '\r'; + ++cp; + break; + case 't': /* horizontal tab */ + *rp++ = '\t'; + ++cp; + break; + case '\\': + *rp = '\\'; + ++cp; + break; + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + { + int ch = *cp++ - '0'; + + if (*cp >= '0' && *cp <= '7') + { + ch *= 8; + ch += *cp++ - '0'; + + if (*cp >= '0' && *cp <= '7') + { + ch *= 8; + ch += *cp++ - '0'; + } + } + *rp = ch; + } + break; + default: + *rp = '\\'; + break; + } + + while (cp[0] != '\0' && cp[0] != '\\') + *rp++ = *cp++; + } + while (cp[0] != '\0'); + + /* Terminate string. */ + *rp = '\0'; + + return (const char *) retval; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/message.c b/debian/gettext-kde/gettext-kde-0.10.35/src/message.c new file mode 100644 index 00000000..e381a291 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/message.c @@ -0,0 +1,1404 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + +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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <errno.h> +#include <ctype.h> +#include <stdio.h> + +#ifdef HAVE_LIMITS_H +# include <limits.h> +#endif + +#ifdef HAVE_LOCALE_H +# include <locale.h> +#endif + +#ifdef STDC_HEADERS +# include <stdlib.h> +#endif + +#include "fstrcmp.h" +#include "message.h" +#include "system.h" +#include "error.h" +#include "libgettext.h" + + +/* Our regular abbreviation. */ +#define _(str) gettext (str) + + +/* These two variables control the output style of the message_print + function. Interface functions for them are to be used. */ +static int indent; +static int uniforum; +static int escape; + +/* This variable controls the page width when printing messages. + Defaults to PAGE_WIDTH if not set. Zero (0) given to message_page_- + width_set will result in no wrapping being performed. */ +static size_t page_width = PAGE_WIDTH; + + +/* Prototypes for local functions. */ +static void wrap PARAMS ((FILE *__fp, const char *__line_prefix, + const char *__name, const char *__value, + int do_wrap)); +static void print_blank_line PARAMS ((FILE *__fp)); +static void message_print PARAMS ((const message_ty *__mp, FILE *__fp, + const char *__domain, int blank_line, + int __debug)); +static void message_print_obsolete PARAMS ((const message_ty *__mp, FILE *__fp, + const char *__domain, + int blank_line)); +static int msgid_cmp PARAMS ((const void *__va, const void *__vb)); +static int filepos_cmp PARAMS ((const void *__va, const void *__vb)); +static const char *make_c_format_description_string PARAMS ((enum is_c_format, + int debug)); +static const char *make_c_width_description_string PARAMS ((enum is_c_format)); +static int significant_c_format_p PARAMS ((enum is_c_format __is_c_format)); + + + +message_ty * +message_alloc (msgid) + char *msgid; +{ + message_ty *mp; + + mp = xmalloc (sizeof (message_ty)); + mp->msgid = msgid; + mp->comment = NULL; + mp->comment_dot = NULL; + mp->filepos_count = 0; + mp->filepos = NULL; + mp->variant_count = 0; + mp->variant = NULL; + mp->used = 0; + mp->obsolete = 0; + mp->is_fuzzy = 0; + mp->is_c_format = undecided; + mp->do_wrap = undecided; + return mp; +} + + +void +message_free (mp) + message_ty *mp; +{ + size_t j; + + if (mp->comment != NULL) + string_list_free (mp->comment); + if (mp->comment_dot != NULL) + string_list_free (mp->comment_dot); + free ((char *) mp->msgid); + for (j = 0; j < mp->variant_count; ++j) + free ((char *) mp->variant[j].msgstr); + if (mp->variant != NULL) + free (mp->variant); + for (j = 0; j < mp->filepos_count; ++j) + free ((char *) mp->filepos[j].file_name); + if (mp->filepos != NULL) + free (mp->filepos); + free (mp); +} + + +message_variant_ty * +message_variant_search (mp, domain) + message_ty *mp; + const char *domain; +{ + size_t j; + message_variant_ty *mvp; + + for (j = 0; j < mp->variant_count; ++j) + { + mvp = &mp->variant[j]; + if (0 == strcmp (domain, mvp->domain)) + return mvp; + } + return 0; +} + + +void +message_variant_append (mp, domain, msgstr, pp) + message_ty *mp; + const char *domain; + const char *msgstr; + const lex_pos_ty *pp; +{ + size_t nbytes; + message_variant_ty *mvp; + + nbytes = (mp->variant_count + 1) * sizeof (mp->variant[0]); + mp->variant = xrealloc (mp->variant, nbytes); + mvp = &mp->variant[mp->variant_count++]; + mvp->domain = domain; + mvp->msgstr = msgstr; + mvp->pos = *pp; +} + + +void +message_comment_append (mp, s) + message_ty *mp; + const char *s; +{ + if (mp->comment == NULL) + mp->comment = string_list_alloc (); + string_list_append (mp->comment, s); +} + + +void +message_comment_dot_append (mp, s) + message_ty *mp; + const char *s; +{ + if (mp->comment_dot == NULL) + mp->comment_dot = string_list_alloc (); + string_list_append (mp->comment_dot, s); +} + + +message_ty * +message_copy (mp) + message_ty *mp; +{ + message_ty *result; + size_t j; + + result = message_alloc (xstrdup (mp->msgid)); + + for (j = 0; j < mp->variant_count; ++j) + { + message_variant_ty *mvp = &mp->variant[j]; + message_variant_append (result, mvp->domain, mvp->msgstr, &mvp->pos); + } + if (mp->comment) + { + for (j = 0; j < mp->comment->nitems; ++j) + message_comment_append (result, mp->comment->item[j]); + } + if (mp->comment_dot) + { + for (j = 0; j < mp->comment_dot->nitems; ++j) + message_comment_dot_append (result, mp->comment_dot->item[j]); + } + result->is_fuzzy = mp->is_fuzzy; + result->is_c_format = mp->is_c_format; + result->do_wrap = mp->do_wrap; + for (j = 0; j < mp->filepos_count; ++j) + { + lex_pos_ty *pp = &mp->filepos[j]; + message_comment_filepos (result, pp->file_name, pp->line_number); + } + return result; +} + + +message_ty * +message_merge (def, ref) + message_ty *def; + message_ty *ref; +{ + message_ty *result; + const char *pot_date_ptr = NULL; + size_t pot_date_len = 0; + size_t j; + + /* Take the msgid from the reference. When fuzzy matches are made, + the definition will not be unique, but the reference will be - + usually because it has a typo. */ + result = message_alloc (xstrdup (ref->msgid)); + + /* If msgid is the header entry (i.e., "") we find the + POT-Creation-Date line in the reference. */ + if (ref->msgid[0] == '\0') + { + pot_date_ptr = strstr (ref->variant[0].msgstr, "POT-Creation-Date:"); + if (pot_date_ptr != NULL) + { + const char *endp; + + pot_date_ptr += sizeof ("POT-Creation-Date:") - 1; + + endp = strchr (pot_date_ptr, '\n'); + if (endp == NULL) + { + char *extended; + endp = strchr (pot_date_ptr, '\0'); + pot_date_len = (endp - pot_date_ptr) + 1; + extended = (char *) alloca (pot_date_len + 1); + stpcpy (stpcpy (extended, pot_date_ptr), "\n"); + pot_date_ptr = extended; + } + else + pot_date_len = (endp - pot_date_ptr) + 1; + + if (pot_date_len == 0) + pot_date_ptr = NULL; + } + } + + /* Take the variant list from the definition. The msgstr of the + refences will be empty, as they were generated by xgettext. If + we currently process the header entry we have to merge the msgstr + by using the POT-Creation-Date field from the .pot file. */ + for (j = 0; j < def->variant_count; ++j) + { + message_variant_ty *mvp = &def->variant[j]; + + if (ref->msgid[0] == '\0') + { + /* Oh, oh. The header entry and we have something to fill in. */ + static const struct + { + const char *name; + size_t len; + } known_fields[] = + { + { "Project-Id-Version:", sizeof ("Project-Id-Version:") - 1 }, +#define PROJECT_ID 0 + { "POT-Creation-Date:", sizeof ("POT-Creation-Date:") - 1 }, +#define POT_CREATION 1 + { "PO-Revision-Date:", sizeof ("PO-Revision-Date:") - 1 }, +#define PO_REVISION 2 + { "Last-Translator:", sizeof ("Last-Translator:") - 1 }, +#define LAST_TRANSLATOR 3 + { "Language-Team:", sizeof ("Language-Team:") - 1 }, +#define LANGUAGE_TEAM 4 + { "MIME-Version:", sizeof ("MIME-Version:") - 1 }, +#define MIME_VERSION 5 + { "Content-Type:", sizeof ("Content-Type:") - 1 }, +#define CONTENT_TYPE 6 + { "Content-Transfer-Encoding:", + sizeof ("Content-Transfer-Encoding:") - 1 } +#define CONTENT_TRANSFER 7 + }; +#define UNKNOWN 8 + struct + { + const char *string; + size_t len; + } header_fields[UNKNOWN + 1]; + const char *cp; + char *newp; + size_t len, cnt; + + /* Clear all fields. */ + memset (header_fields, '\0', sizeof (header_fields)); + + cp = mvp->msgstr; + while (*cp != '\0') + { + const char *endp = strchr (cp, '\n'); + int terminated = endp != NULL; + + if (!terminated) + { + char *copy; + endp = strchr (cp, '\0'); + + len = endp - cp + 1; + + copy = (char *) alloca (len + 1); + stpcpy (stpcpy (copy, cp), "\n"); + cp = copy; + } + else + { + len = (endp - cp) + 1; + ++endp; + } + + /* Compare with any of the known fields. */ + for (cnt = 0; + cnt < sizeof (known_fields) / sizeof (known_fields[0]); + ++cnt) + if (strncasecmp (cp, known_fields[cnt].name, + known_fields[cnt].len) == 0) + break; + + if (cnt < sizeof (known_fields) / sizeof (known_fields[0])) + { + header_fields[cnt].string = &cp[known_fields[cnt].len]; + header_fields[cnt].len = len - known_fields[cnt].len; + } + else + { + /* It's an unknown field. Append content to what is + already known. */ + char *extended = (char *) alloca (header_fields[UNKNOWN].len + + len + 1); + memcpy (extended, header_fields[UNKNOWN].string, + header_fields[UNKNOWN].len); + memcpy (&extended[header_fields[UNKNOWN].len], cp, len); + extended[header_fields[UNKNOWN].len + len] = '\0'; + header_fields[UNKNOWN].string = extended; + header_fields[UNKNOWN].len += len; + } + + cp = endp; + } + + if (pot_date_ptr != NULL) + { + header_fields[POT_CREATION].string = pot_date_ptr; + header_fields[POT_CREATION].len = pot_date_len; + } + + /* Concatenate all the various fields. */ + len = 0; + for (cnt = 0; cnt < UNKNOWN; ++cnt) + if (header_fields[cnt].string != NULL) + len += known_fields[cnt].len + header_fields[cnt].len; + len += header_fields[UNKNOWN].len; + + cp = newp = (char *) xmalloc (len + 1); + newp[len] = '\0'; + +#define IF_FILLED(idx) \ + if (header_fields[idx].string) \ + newp = stpncpy (stpcpy (newp, known_fields[idx].name), \ + header_fields[idx].string, header_fields[idx].len) + + IF_FILLED (PROJECT_ID); + IF_FILLED (POT_CREATION); + IF_FILLED (PO_REVISION); + IF_FILLED (LAST_TRANSLATOR); + IF_FILLED (LANGUAGE_TEAM); + IF_FILLED (MIME_VERSION); + IF_FILLED (CONTENT_TYPE); + IF_FILLED (CONTENT_TRANSFER); + if (header_fields[UNKNOWN].string != NULL) + stpcpy (newp, header_fields[UNKNOWN].string); + + message_variant_append (result, mvp->domain, cp, &mvp->pos); + } + else + message_variant_append (result, mvp->domain, mvp->msgstr, &mvp->pos); + } + + /* Take the comments from the definition file. There will be none at + all in the reference file, as it was generated by xgettext. */ + if (def->comment) + for (j = 0; j < def->comment->nitems; ++j) + message_comment_append (result, def->comment->item[j]); + + /* Take the dot comments from the reference file, as they are + generated by xgettext. Any in the definition file are old ones + collected by previous runs of xgettext and msgmerge. */ + if (ref->comment_dot) + for (j = 0; j < ref->comment_dot->nitems; ++j) + message_comment_dot_append (result, ref->comment_dot->item[j]); + + /* The flags are mixed in a special way. Some informations come + from the reference message (such as format/no-format), others + come from the definition file (fuzzy or not). */ + result->is_fuzzy = def->is_fuzzy; + result->is_c_format = ref->is_c_format; + result->do_wrap = ref->do_wrap; + + /* Take the file position comments from the reference file, as they + are generated by xgettext. Any in the definition file are old ones + collected by previous runs of xgettext and msgmerge. */ + for (j = 0; j < ref->filepos_count; ++j) + { + lex_pos_ty *pp = &ref->filepos[j]; + message_comment_filepos (result, pp->file_name, pp->line_number); + } + + /* All done, return the merged message to the caller. */ + return result; +} + + +void +message_comment_filepos (mp, name, line) + message_ty *mp; + const char *name; + size_t line; +{ + size_t nbytes; + lex_pos_ty *pp; + int min, max; + int j; + + /* See if we have this position already. They are kept in sorted + order, so use a binary chop. */ + /* FIXME: use bsearch */ + min = 0; + max = (int) mp->filepos_count - 1; + while (min <= max) + { + int mid; + int cmp; + + mid = (min + max) / 2; + pp = &mp->filepos[mid]; + cmp = strcmp (pp->file_name, name); + if (cmp == 0) + cmp = (int) pp->line_number - line; + if (cmp == 0) + return; + if (cmp < 0) + min = mid + 1; + else + max = mid - 1; + } + + /* Extend the list so that we can add an position to it. */ + nbytes = (mp->filepos_count + 1) * sizeof (mp->filepos[0]); + mp->filepos = xrealloc (mp->filepos, nbytes); + + /* Shuffle the rest of the list up one, so that we can insert the + position at ``min''. */ + /* FIXME: use memmove */ + for (j = mp->filepos_count; j > min; --j) + mp->filepos[j] = mp->filepos[j - 1]; + mp->filepos_count++; + + /* Insert the postion into the empty slot. */ + pp = &mp->filepos[min]; + pp->file_name = xstrdup (name); + pp->line_number = line; +} + + +void +message_print_style_indent () +{ + indent = 1; +} + + +void +message_print_style_uniforum () +{ + uniforum = 1; +} + + +void +message_print_style_escape (flag) + int flag; +{ + escape = (flag != 0); +} + + +message_list_ty * +message_list_alloc () +{ + message_list_ty *mlp; + + mlp = xmalloc (sizeof (message_list_ty)); + mlp->nitems = 0; + mlp->nitems_max = 0; + mlp->item = 0; + return mlp; +} + + +void +message_list_append (mlp, mp) + message_list_ty *mlp; + message_ty *mp; +{ + if (mlp->nitems >= mlp->nitems_max) + { + size_t nbytes; + + mlp->nitems_max = mlp->nitems_max * 2 + 4; + nbytes = mlp->nitems_max * sizeof (message_ty *); + mlp->item = xrealloc (mlp->item, nbytes); + } + mlp->item[mlp->nitems++] = mp; +} + + +void +message_list_delete_nth (mlp, n) + message_list_ty *mlp; + size_t n; +{ + size_t j; + + if (n >= mlp->nitems) + return; + message_free (mlp->item[n]); + for (j = n + 1; j < mlp->nitems; ++j) + mlp->item[j - 1] = mlp->item[j]; + mlp->nitems--; +} + + +message_ty * +message_list_search (mlp, msgid) + message_list_ty *mlp; + const char *msgid; +{ + size_t j; + + for (j = 0; j < mlp->nitems; ++j) + { + message_ty *mp; + + mp = mlp->item[j]; + if (0 == strcmp (msgid, mp->msgid)) + return mp; + } + return 0; +} + + +message_ty * +message_list_search_fuzzy (mlp, msgid) + message_list_ty *mlp; + const char *msgid; +{ + size_t j; + double best_weight; + message_ty *best_mp; + + best_weight = 0.6; + best_mp = NULL; + for (j = 0; j < mlp->nitems; ++j) + { + size_t k; + double weight; + message_ty *mp; + + mp = mlp->item[j]; + + for (k = 0; k < mp->variant_count; ++k) + if (mp->variant[k].msgstr != NULL && mp->variant[k].msgstr[0] != '\0') + break; + if (k >= mp->variant_count) + continue; + + weight = fstrcmp (msgid, mp->msgid); + if (weight > best_weight) + { + best_weight = weight; + best_mp = mp; + } + } + return best_mp; +} + + +void +message_list_free (mlp) + message_list_ty *mlp; +{ + size_t j; + + for (j = 0; j < mlp->nitems; ++j) + message_free (mlp->item[j]); + if (mlp->item) + free (mlp->item); + free (mlp); +} + + +/* Local functions. */ + +static void +wrap (fp, line_prefix, name, value, do_wrap) + FILE *fp; + const char *line_prefix; + const char *name; + const char *value; + int do_wrap; +{ + const char *s; + int first_line; + /* The \a and \v escapes were added by the ANSI C Standard. Prior + to the Standard, most compilers did not have them. Because we + need the same program on all platforms we don't provide support + for them here. */ + static const char escapes[] = "\b\f\n\r\t"; + static const char escape_names[] = "bfnrt"; + + /* The empty string is a special case. */ + if (*value == '\0') + { + if (line_prefix != NULL) + fputs (line_prefix, fp); + fputs (name, fp); + putc (indent ? '\t' : ' ', fp); + fputs ("\"\"\n", fp); + return; + } + + s = value; + first_line = 1; + while (*s) + { + const char *ep; + int ocol; + + /* The line starts with different things depending on whether it + is the first line, and if we are using the indented style. */ + if (first_line) + { + ocol = strlen (name) + (line_prefix ? strlen (line_prefix) : 0); + if (indent && ocol < 8) + ocol = 8; + else + ++ocol; + } + else + ocol = (indent ? 8 : 0); + + /* Allow room for the opening quote character. */ + ++ocol; + + /* Work out how many characters from the string will fit on a + line. Natural breaks occur at embedded newline characters. */ + for (ep = s; *ep; ++ep) + { + const char *esc; + int cw; + int c; + + c = (unsigned char) *ep; + /* FIXME This is the wrong locale. While message_list_print + set the "C" locale for LC_CTYPE, the need is to use the + correct locale for the file's contents. */ + esc = strchr (escapes, c); + if (esc == NULL && (!escape || isprint (c))) + cw = 1 + (c == '\\' || c == '"'); + else + cw = esc != NULL ? 2 : 4; + /* Allow 1 character for the closing quote. */ + if (ocol + cw >= (do_wrap == no ? INT_MAX : page_width)) + break; + ocol += cw; + if (c == '\n') + { + ++ep; + break; + } + } + + /* The above loop detects if a line is too long. If it is too + long, see if there is a better place to break the line. */ + if (*ep) + { + const char *bp; + + for (bp = ep; bp > s; --bp) + if (bp[-1] == ' ' || bp[-1] == '\n') + { + ep = bp; + break; + } + } + + /* If this is the first line, and we are not using the indented + style, and the line would wrap, then use an empty first line + and restart. */ + if (first_line && !indent && *ep != '\0') + { + fprintf (fp, "%s%s \"\"\n", line_prefix ? line_prefix : "", name); + s = value; + first_line = 0; + continue; + } + + /* Print the beginning of the line. This will depend on whether + this is the first line, and if the indented style is being + used. */ + if (first_line) + { + first_line = 0; + if (line_prefix != NULL) + fputs (line_prefix, fp); + fputs (name, fp); + putc (indent ? '\t' : ' ', fp); + } + else + { + if (line_prefix != NULL) + fputs (line_prefix, fp); + if (indent) + putc ('\t', fp); + } + + /* Print the body of the line. C escapes are used for + unprintable characters. */ + putc ('"', fp); + while (s < ep) + { + const char *esc; + int c; + + c = (unsigned char) *s++; + /* FIXME This is the wrong locale. While message_list_print + set the "C" locale for LC_CTYPE, the need is to use the + correct locale for the file's contents. */ + esc = strchr (escapes, c); + if (esc == NULL && (!escape || isprint (c))) + { + if (c == '\\' || c == '"') + putc ('\\', fp); + putc (c, fp); + } + else if (esc != NULL) + { + c = escape_names[esc - escapes]; + + putc ('\\', fp); + putc (c, fp); + + /* We warn about any use of escape sequences beside + '\n' and '\t'. */ + if (c != 'n' && c != 't') + error (0, 0, _("\ +internationalized messages should not contain the `\\%c' escape sequence"), + c); + } + else + fprintf (fp, "\\%3.3o", c); + } + fputs ("\"\n", fp); + } +} + + +static void +print_blank_line (fp) + FILE *fp; +{ + if (uniforum) + fputs ("#\n", fp); + else + putc ('\n', fp); +} + + +static void +message_print (mp, fp, domain, blank_line, debug) + const message_ty *mp; + FILE *fp; + const char *domain; + int blank_line; + int debug; +{ + message_variant_ty *mvp; + int first; + size_t j; + + /* Find the relevant message variant. If there isn't one, remember + this using a NULL pointer. */ + mvp = NULL; + first = 0; + + for (j = 0; j < mp->variant_count; ++j) + { + if (strcmp (domain, mp->variant[j].domain) == 0) + { + mvp = &mp->variant[j]; + first = (j == 0); + break; + } + } + + /* Separate messages with a blank line. Uniforum doesn't like blank + lines, so use an empty comment (unless there already is one). */ + if (blank_line && (!uniforum + || mp->comment == NULL + || mp->comment->nitems == 0 + || mp->comment->item[0][0] != '\0')) + print_blank_line (fp); + + /* The first variant of a message will have the comments attached to + it. We can't attach them to all variants in case we are read in + again, multiplying the number of comment lines. Usually there is + only one variant. */ + if (first) + { + if (mp->comment != NULL) + for (j = 0; j < mp->comment->nitems; ++j) + { + const unsigned char *s = mp->comment->item[j]; + do + { + const unsigned char *e; + putc ('#', fp); + /* FIXME This is the wrong locale. While + message_list_print set the "C" locale for LC_CTYPE, + the need to use the correct locale for the file's + contents. */ + if (*s != '\0' && !isspace (*s)) + putc (' ', fp); + e = strchr (s, '\n'); + if (e == NULL) + { + fputs (s, fp); + s = NULL; + } + else + { + fwrite (s, 1, e - s, fp); + s = e + 1; + } + putc ('\n', fp); + } + while (s != NULL); + } + + if (mp->comment_dot != NULL) + for (j = 0; j < mp->comment_dot->nitems; ++j) + { + const unsigned char *s = mp->comment_dot->item[j]; + putc ('#', fp); + putc ('.', fp); + /* FIXME This is the wrong locale. While + message_list_print set the "C" locale for LC_CTYPE, the + need to use the correct locale for the file's contents. */ + if (*s && !isspace (*s)) + putc (' ', fp); + fputs (s, fp); + putc ('\n', fp); + } + } + + /* Print the file position comments for every domain. This will + help a human who is trying to navigate the sources. There is no + problem of getting repeat positions, because duplicates are + checked for. */ + if (mp->filepos_count != 0) + { + if (uniforum) + for (j = 0; j < mp->filepos_count; ++j) + { + lex_pos_ty *pp = &mp->filepos[j]; + char *cp = pp->file_name; + while (cp[0] == '.' && cp[1] == '/') + cp += 2; + /* There are two Sun formats to choose from: SunOS and + Solaris. Use the Solaris form here. */ + fprintf (fp, "# File: %s, line: %ld\n", + cp, (long) pp->line_number); + } + else + { + size_t column; + + fputs ("#:", fp); + column = 2; + for (j = 0; j < mp->filepos_count; ++j) + { + lex_pos_ty *pp; + char buffer[20]; + char *cp; + size_t len; + + pp = &mp->filepos[j]; + cp = pp->file_name; + while (cp[0] == '.' && cp[1] == '/') + cp += 2; + sprintf (buffer, "%ld", (long) pp->line_number); + len = strlen (cp) + strlen (buffer) + 2; + if (column > 2 && column + len >= page_width) + { + fputs ("\n#:", fp); + column = 2; + } + fprintf (fp, " %s:%s", cp, buffer); + column += len; + } + putc ('\n', fp); + } + } + + /* Print flag information in special comment. */ + if (first && ((mp->is_fuzzy && mvp != NULL && mvp->msgstr[0] != '\0') + || significant_c_format_p (mp->is_c_format) + || mp->do_wrap == no)) + { + int first_flag = 1; + + putc ('#', fp); + putc (',', fp); + + /* We don't print the fuzzy flag if the msgstr is empty. This + might be introduced by the user but we want to normalize the + output. */ + if (mp->is_fuzzy && mvp != NULL && mvp->msgstr[0] != '\0') + { + fputs (" fuzzy", fp); + first_flag = 0; + } + + if (significant_c_format_p (mp->is_c_format)) + { + if (!first_flag) + putc (',', fp); + + fputs (make_c_format_description_string (mp->is_c_format, debug), + fp); + first_flag = 0; + } + + if (mp->do_wrap == no) + { + if (!first_flag) + putc (',', fp); + + fputs (make_c_width_description_string (mp->do_wrap), fp); + first_flag = 0; + } + + putc ('\n', fp); + } + + /* Print each of the message components. Wrap them nicely so they + are as readable as possible. If there is no recorded msgstr for + this domain, emit an empty string. */ + wrap (fp, NULL, "msgid", mp->msgid, mp->do_wrap); + wrap (fp, NULL, "msgstr", mvp ? mvp->msgstr : "", mp->do_wrap); +} + + +static void +message_print_obsolete (mp, fp, domain, blank_line) + const message_ty *mp; + FILE *fp; + const char *domain; + int blank_line; +{ + message_variant_ty *mvp; + size_t j; + + /* Find the relevant message variant. If there isn't one, remember + this using a NULL pointer. */ + mvp = NULL; + + for (j = 0; j < mp->variant_count; ++j) + { + if (strcmp (domain, mp->variant[j].domain) == 0) + { + mvp = &mp->variant[j]; + break; + } + } + + /* If no msgstr is found or it is the empty string we print nothing. */ + if (mvp == NULL || mvp->msgstr[0] == '\0') + return; + + /* Separate messages with a blank line. Uniforum doesn't like blank + lines, so use an empty comment (unless there already is one). */ + if (blank_line) + print_blank_line (fp); + + /* Print translator comment if available. */ + if (mp->comment) + for (j = 0; j < mp->comment->nitems; ++j) + { + const unsigned char *s = mp->comment->item[j]; + do + { + const unsigned char *e; + putc ('#', fp); + /* FIXME This is the wrong locale. While + message_list_print set the "C" locale for LC_CTYPE, the + need to use the correct locale for the file's contents. */ + if (*s != '\0' && !isspace (*s)) + putc (' ', fp); + e = strchr (s, '\n'); + if (e == NULL) + { + fputs (s, fp); + s = NULL; + } + else + { + fwrite (s, 1, e - s, fp); + s = e + 1; + } + putc ('\n', fp); + } + while (s != NULL); + } + + /* Print flag information in special comment. */ + if (mp->is_fuzzy) + { + int first = 1; + + putc ('#', fp); + putc (',', fp); + + if (mp->is_fuzzy) + { + fputs (" fuzzy", fp); + first = 0; + } + + putc ('\n', fp); + } + + /* Print each of the message components. Wrap them nicely so they + are as readable as possible. */ + wrap (fp, "#~ ", "msgid", mp->msgid, mp->do_wrap); + wrap (fp, "#~ ", "msgstr", mvp->msgstr, mp->do_wrap); +} + + +void +message_list_print (mlp, filename, force, debug) + message_list_ty *mlp; + const char *filename; + int force; + int debug; +{ + FILE *fp; + size_t j, k; + string_list_ty *dl; + int blank_line; +#ifdef HAVE_SETLOCALE + char *old_locale; +#endif + + /* We will not write anything if we have no message or only the + header entry. */ + if (force == 0 + && (mlp->nitems == 0 + || (mlp->nitems == 1 && *mlp->item[0]->msgid == '\0'))) + return; + + /* Build the list of domains. */ + dl = string_list_alloc (); + for (j = 0; j < mlp->nitems; ++j) + { + message_ty *mp = mlp->item[j]; + for (k = 0; k < mp->variant_count; ++k) + string_list_append_unique (dl, mp->variant[k].domain); + } + + /* Open the output file. */ + if (filename != NULL && strcmp (filename, "-") != 0 + && strcmp (filename, "/dev/stdout") != 0) + { + fp = fopen (filename, "w"); + if (fp == NULL) + error (EXIT_FAILURE, errno, _("cannot create output file \"%s\""), + filename); + } + else + { + fp = stdout; + /* xgettext:no-c-format */ + filename = _("standard output"); + } + +#ifdef HAVE_SETLOCALE + /* FIXME This is the wrong locale. The program is currently set for + the user's native language locale, for the error messages. This + code sets it to the "C" locale, but that isn't right either. The + need is to use the correct locale for the file's contents. */ + old_locale = setlocale (LC_CTYPE, "C"); + if (old_locale) + old_locale = xstrdup (old_locale); +#endif + + /* Write out the messages for each domain. */ + blank_line = 0; + for (k = 0; k < dl->nitems; ++k) + { + /* If there is only one domain, and that domain is the default, + don't bother emitting the domain name, because it is the + default. */ + if (dl->nitems != 1 || strcmp (dl->item[0], MESSAGE_DOMAIN_DEFAULT) != 0) + { + if (blank_line) + print_blank_line (fp); + fprintf (fp, "domain \"%s\"\n", dl->item[k]); + blank_line = 1; + } + + /* Write out each of the messages for this domain. */ + for (j = 0; j < mlp->nitems; ++j) + if (mlp->item[j]->obsolete == 0) + { + message_print (mlp->item[j], fp, dl->item[k], blank_line, debug); + blank_line = 1; + } + + /* Write out each of the obsolete messages for this domain. */ + for (j = 0; j < mlp->nitems; ++j) + if (mlp->item[j]->obsolete != 0) + { + message_print_obsolete (mlp->item[j], fp, dl->item[k], blank_line); + blank_line = 1; + } + } + string_list_free (dl); + + /* Restore the old locale. Do this before emitting error messages, + so that the correct locale is used for the error. (Ideally, + error should ensure this before calling gettext for the format + string.) */ +#ifdef HAVE_SETLOCALE + if (old_locale) + { + setlocale (LC_CTYPE, old_locale); + free (old_locale); + } +#endif + + /* Make sure nothing went wrong. */ + if (fflush (fp)) + error (EXIT_FAILURE, errno, _("error while writing \"%s\" file"), + filename); + fclose (fp); +} + + +static int +msgid_cmp (va, vb) + const void *va; + const void *vb; +{ + const message_ty *a = *(const message_ty **) va; + const message_ty *b = *(const message_ty **) vb; +#ifdef HAVE_STRCOLL + return strcoll (a->msgid, b->msgid); +#else + return strcmp (a->msgid, b->msgid); +#endif +} + + +void +message_list_sort_by_msgid (mlp) + message_list_ty *mlp; +{ + /* FIXME This is the wrong locale. The program is currently set for + the user's native language locale, for the error messages. This + code sets it to the "C" locale, but that isn't right either. The + need is to use the correct locale for the file's contents. */ +#ifdef HAVE_SETLOCALE + char *tmp = setlocale (LC_COLLATE, "C"); + if (tmp) + tmp = xstrdup (tmp); +#endif + qsort (mlp->item, mlp->nitems, sizeof (mlp->item[0]), msgid_cmp); +#ifdef HAVE_SETLOCALE + if (tmp) + { + setlocale (LC_COLLATE, tmp); + free (tmp); + } +#endif +} + + +static int +filepos_cmp (va, vb) + const void *va; + const void *vb; +{ + const message_ty *a = *(const message_ty **) va; + const message_ty *b = *(const message_ty **) vb; + int cmp; + + /* No filepos is smaller than any other filepos. */ + if (a->filepos_count == 0) + { + if (b->filepos_count != 0) + return -1; + } + if (b->filepos_count == 0) + return 1; + + /* Compare on the file names... */ + cmp = strcmp (a->filepos[0].file_name, b->filepos[0].file_name); + if (cmp != 0) + return cmp; + + /* If they are equal, compare on the line numbers... */ + cmp = a->filepos[0].line_number - b->filepos[0].line_number; + if (cmp != 0) + return cmp; + + /* If they are equal, compare on the msgid strings. */ +#ifdef HAVE_STRCOLL + return strcoll (a->msgid, b->msgid); +#else + return strcmp (a->msgid, b->msgid); +#endif +} + + +void +message_list_sort_by_filepos (mlp) + message_list_ty *mlp; +{ + /* FIXME This is the wrong locale. The program is currently set for + the user's native language locale, for the error messages. This + code sets it to the "C" locale, but that isn't right either. The + need is to use the correct locale for the file's contents. */ +#ifdef HAVE_SETLOCALE + char *tmp = setlocale (LC_COLLATE, "C"); + if (tmp) + tmp = xstrdup (tmp); +#endif + qsort (mlp->item, mlp->nitems, sizeof (mlp->item[0]), filepos_cmp); +#ifdef HAVE_SETLOCALE + if (tmp) + { + setlocale (LC_COLLATE, tmp); + free (tmp); + } +#endif +} + + +enum is_c_format +parse_c_format_description_string (s) + const char *s; +{ + if (strstr (s, "no-c-format") != NULL) + return no; + else if (strstr (s, "impossible-c-format") != NULL) + return impossible; + else if (strstr (s, "possible-c-format") != NULL) + return possible; + else if (strstr (s, "c-format") != NULL) + return yes; + return undecided; +} + + +enum is_c_format +parse_c_width_description_string (s) + const char *s; +{ + if (strstr (s, "no-wrap") != NULL) + return no; + else if (strstr (s, "wrap") != NULL) + return yes; + return undecided; +} + + +static const char * +make_c_format_description_string (is_c_format, debug) + enum is_c_format is_c_format; + int debug; +{ + const char *result = NULL; + + switch (is_c_format) + { + case possible: + if (debug) + { + result = " possible-c-format"; + break; + } + /* FALLTHROUGH */ + case yes: + result = " c-format"; + break; + case impossible: + result = " impossible-c-format"; + break; + case no: + result = " no-c-format"; + break; + case undecided: + result = " undecided"; + break; + default: + abort (); + } + + return result; +} + + +static const char * +make_c_width_description_string (do_wrap) + enum is_c_format do_wrap; +{ + const char *result = NULL; + + switch (do_wrap) + { + case yes: + result = " wrap"; + break; + case no: + result = " no-wrap"; + break; + default: + abort (); + } + + return result; +} + + +int +possible_c_format_p (is_c_format) + enum is_c_format is_c_format; +{ + return is_c_format == possible || is_c_format == yes; +} + + +static int +significant_c_format_p (is_c_format) + enum is_c_format is_c_format; +{ + return is_c_format != undecided && is_c_format != impossible; +} + + +void +message_page_width_set (n) + size_t n; +{ + if (n == 0) + { + page_width = INT_MAX; + return; + } + + if (n < 20) + n = 20; + + page_width = n; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/message.h b/debian/gettext-kde/gettext-kde-0.10.35/src/message.h new file mode 100644 index 00000000..149b8b38 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/message.h @@ -0,0 +1,129 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + + 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, 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 SoftwareFoundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef _MESSAGE_H +#define _MESSAGE_H + +#include "po-lex.h" +#include "str-list.h" + +/* According to Sun's Uniforum proposal the default message domain is + named `messages'. */ +#define MESSAGE_DOMAIN_DEFAULT "messages" + + +/* Is current msgid a format string? */ +enum is_c_format +{ + undecided, + yes, + no, + possible, + impossible +}; + +typedef struct message_variant_ty message_variant_ty; +struct message_variant_ty +{ + const char *domain; + lex_pos_ty pos; + const char *msgstr; +}; + +typedef struct message_ty message_ty; +struct message_ty +{ + /* Plain comments (#) appearing before the message. */ + string_list_ty *comment; + + /* Extracted comments (#.) appearing before the message. */ + string_list_ty *comment_dot; + + /* File position comments (#:) appearing before the message, one for + each unique file position instance, sorted by file name and then + by line. */ + size_t filepos_count; + lex_pos_ty *filepos; + + /* Informations from special comments (e.g. generated by msgmerge). */ + int is_fuzzy; + enum is_c_format is_c_format; + + /* Do we want the string to be wrapped in the emitted PO file? */ + enum is_c_format do_wrap; + + /* The msgid string. */ + const char *msgid; + + /* The msgstr strings, one for each observed domain in the file. */ + size_t variant_count; + message_variant_ty *variant; + + /* Used for checking that messages have been used, in the msgcmp and + msgmerge programs. */ + int used; + + /* If set the message is obsolete and while writing out it should be + commented out. */ + int obsolete; +}; + +message_ty *message_alloc PARAMS ((char *msgid)); +void message_free PARAMS ((message_ty *)); + +message_variant_ty *message_variant_search PARAMS ((message_ty *mp, + const char *domain)); +void message_variant_append PARAMS ((message_ty *mp, const char *domain, + const char *msgstr, + const lex_pos_ty *pp)); +void message_comment_append PARAMS ((message_ty *, const char *)); +void message_comment_dot_append PARAMS ((message_ty *, const char *)); +message_ty *message_copy PARAMS ((message_ty *)); +message_ty *message_merge PARAMS ((message_ty *def, message_ty *ref)); +void message_comment_filepos PARAMS ((message_ty *, const char *, size_t)); +void message_print_style_indent PARAMS ((void)); +void message_print_style_uniforum PARAMS ((void)); +void message_print_style_escape PARAMS ((int)); + + +typedef struct message_list_ty message_list_ty; +struct message_list_ty +{ + message_ty **item; + size_t nitems; + size_t nitems_max; +}; + +message_list_ty *message_list_alloc PARAMS ((void)); +void message_list_free PARAMS ((message_list_ty *)); +void message_list_append PARAMS ((message_list_ty *, message_ty *)); +void message_list_delete_nth PARAMS ((message_list_ty *, size_t)); +message_ty *message_list_search PARAMS ((message_list_ty *, const char *)); +message_ty *message_list_search_fuzzy PARAMS ((message_list_ty *, + const char *)); +void message_list_print PARAMS ((message_list_ty *, const char *, int, int)); +void message_list_sort_by_msgid PARAMS ((message_list_ty *)); +void message_list_sort_by_filepos PARAMS ((message_list_ty *)); + +enum is_c_format parse_c_format_description_string PARAMS ((const char *s)); +enum is_c_format parse_c_width_description_string PARAMS ((const char *s)); +int possible_c_format_p PARAMS ((enum is_c_format)); +void message_page_width_set PARAMS ((size_t width)); + +#endif /* message.h */ diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/msgcmp.c b/debian/gettext-kde/gettext-kde-0.10.35/src/msgcmp.c new file mode 100644 index 00000000..af689a29 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/msgcmp.c @@ -0,0 +1,437 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + This file was written by Peter Miller <[email protected]> + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <getopt.h> +#include <stdio.h> + +#ifdef STDC_HEADERS +# include <stdlib.h> +#endif + +#ifdef HAVE_LOCALE_H +# include <locale.h> +#endif + +#include "dir-list.h" +#include "error.h" +#include "message.h" +#include <system.h> +#include <libintl.h> +#include "po.h" +#include "str-list.h" + +#define _(str) gettext (str) + + +/* This structure defines a derived class of the po_ty class. (See + po.h for an explanation.) */ +typedef struct compare_class_ty compare_class_ty; +struct compare_class_ty +{ + /* inherited instance variables, etc */ + PO_BASE_TY + + /* Name of domain we are currently examining. */ + char *domain; + + /* List of domains already appeared in the current file. */ + string_list_ty *domain_list; + + /* List of messages already appeared in the current file. */ + message_list_ty *mlp; +}; + +/* String containing name the program is called with. */ +const char *program_name; + +/* Long options. */ +static const struct option long_options[] = +{ + { "directory", required_argument, NULL, 'D' }, + { "help", no_argument, NULL, 'h' }, + { "version", no_argument, NULL, 'V' }, + { NULL, 0, NULL, 0 } +}; + + +/* Prototypes for local functions. */ +static void usage PARAMS ((int __status)); +static void error_print PARAMS ((void)); +static void compare PARAMS ((char *, char *)); +static message_list_ty *grammar PARAMS ((char *__filename)); +static void compare_constructor PARAMS ((po_ty *__that)); +static void compare_destructor PARAMS ((po_ty *__that)); +static void compare_directive_domain PARAMS ((po_ty *__that, char *__name)); +static void compare_directive_message PARAMS ((po_ty *__that, char *__msgid, + lex_pos_ty *msgid_pos, + char *__msgstr, + lex_pos_ty *__msgstr_pos)); +static void compare_parse_debrief PARAMS ((po_ty *__that)); + + +int +main (argc, argv) + int argc; + char *argv[]; +{ + int optchar; + int do_help; + int do_version; + + /* Set program name for messages. */ + program_name = argv[0]; + error_print_progname = error_print; + +#ifdef HAVE_SETLOCALE + /* Set locale via LC_ALL. */ + setlocale (LC_ALL, ""); +#endif + + /* Set the text message domain. */ + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + + do_help = 0; + do_version = 0; + while ((optchar = getopt_long (argc, argv, "D:hV", long_options, NULL)) + != EOF) + switch (optchar) + { + case '\0': /* long option */ + break; + + case 'D': + dir_list_append (optarg); + break; + + case 'h': + do_help = 1; + break; + + case 'V': + do_version = 1; + break; + + default: + usage (EXIT_FAILURE); + break; + } + + /* Version information is requested. */ + if (do_version) + { + printf ("%s (GNU %s) %s\n", basename (program_name), PACKAGE, VERSION); + /* xgettext: no-wrap */ + printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\ +This is free software; see the source for copying conditions. There is NO\n\ +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ +"), + "1995, 1996, 1997, 1998"); + printf (_("Written by %s.\n"), "Peter Miller"); + exit (EXIT_SUCCESS); + } + + /* Help is requested. */ + if (do_help) + usage (EXIT_SUCCESS); + + /* Test whether we have an .po file name as argument. */ + if (optind >= argc) + { + error (EXIT_SUCCESS, 0, _("no input files given")); + usage (EXIT_FAILURE); + } + if (optind + 2 != argc) + { + error (EXIT_SUCCESS, 0, _("exactly 2 input files required")); + usage (EXIT_FAILURE); + } + + /* compare the two files */ + compare (argv[optind], argv[optind + 1]); + exit (EXIT_SUCCESS); +} + + +/* Display usage information and exit. */ +static void +usage (status) + int status; +{ + if (status != EXIT_SUCCESS) + fprintf (stderr, _("Try `%s --help' for more information.\n"), + program_name); + else + { + /* xgettext: no-wrap */ + printf (_("\ +Usage: %s [OPTION] def.po ref.po\n\ +Mandatory arguments to long options are mandatory for short options too.\n\ + -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n\ + -h, --help display this help and exit\n\ + -V, --version output version information and exit\n\ +\n\ +Compare two Uniforum style .po files to check that both contain the same\n\ +set of msgid strings. The def.po file is an existing PO file with the\n\ +old translations. The ref.po file is the last created PO file\n\ +(generally by xgettext). This is useful for checking that you have\n\ +translated each and every message in your program. Where an exact match\n\ +cannot be found, fuzzy matching is used to produce better diagnostics.\n"), + program_name); + fputs (_("Report bugs to <[email protected]>.\n"), stdout); + } + + exit (status); +} + + +/* The address of this function will be assigned to the hook in the error + functions. */ +static void +error_print () +{ + /* We don't want the program name to be printed in messages. Emacs' + compile.el does not like this. */ +} + + +static void +compare (fn1, fn2) + char *fn1; + char *fn2; +{ + message_list_ty *list1; + message_list_ty *list2; + int nerrors; + message_ty *mp1; + size_t j, k; + + /* This is the master file, created by a human. */ + list1 = grammar (fn1); + + /* This is the generated file, created by groping the sources with + the xgettext program. */ + list2 = grammar (fn2); + + /* Every entry in the xgettext generated file must be matched by a + (single) entry in the human created file. */ + nerrors = 0; + for (j = 0; j < list2->nitems; ++j) + { + message_ty *mp2; + + mp2 = list2->item[j]; + + /* See if it is in the other file. */ + mp1 = message_list_search (list1, mp2->msgid); + if (mp1) + { + mp1->used = 1; + continue; + } + + /* If the message was not defined at all, try to find a very + similar message, it could be a typo, or the suggestion may + help. */ + ++nerrors; + mp1 = message_list_search_fuzzy (list1, mp2->msgid); + if (mp1) + { + gram_error_at_line (&mp2->variant[0].pos, _("\ +this message is used but not defined...")); + gram_error_at_line (&mp1->variant[0].pos, _("\ +...but this definition is similar")); + mp1->used = 1; + } + else + { + gram_error_at_line (&mp2->variant[0].pos, _("\ +this message is used but not defined in %s"), fn1); + } + } + + /* Look for messages in the human generated file, which are not + present in the xgettext generated file, indicating messages which + are not used in the program. */ + for (k = 0; k < list1->nitems; ++k) + { + mp1 = list1->item[k]; + if (mp1->used) + continue; + gram_error_at_line (&mp1->variant[0].pos, + _("warning: this message is not used")); + } + + /* Exit with status 1 on any error. */ + if (nerrors > 0) + error (EXIT_FAILURE, 0, "found %d fatal errors", nerrors); +} + + +/* Local functions. */ + +static void +compare_constructor (that) + po_ty *that; +{ + compare_class_ty *this = (compare_class_ty *) that; + + this->mlp = message_list_alloc (); + this->domain = MESSAGE_DOMAIN_DEFAULT; + this->domain_list = string_list_alloc (); +} + + +static void +compare_destructor (that) + po_ty *that; +{ + compare_class_ty *this = (compare_class_ty *) that; + + string_list_free (this->domain_list); + /* Do not free this->mlp! */ +} + + +static void +compare_directive_domain (that, name) + po_ty *that; + char *name; +{ + compare_class_ty *this = (compare_class_ty *)that; + /* Override current domain name. Don't free memory. */ + this->domain = name; +} + + +static void +compare_directive_message (that, msgid, msgid_pos, msgstr, msgstr_pos) + po_ty *that; + char *msgid; + lex_pos_ty *msgid_pos; + char *msgstr; + lex_pos_ty *msgstr_pos; +{ + compare_class_ty *this = (compare_class_ty *) that; + message_ty *mp; + message_variant_ty *mvp; + + /* Remember the domain names for later. */ + string_list_append_unique (this->domain_list, this->domain); + + /* See if this message ID has been seen before. */ + mp = message_list_search (this->mlp, msgid); + if (mp) + free (msgid); + else + { + mp = message_alloc (msgid); + message_list_append (this->mlp, mp); + } + + /* See if this domain has been seen for this message ID. */ + mvp = message_variant_search (mp, this->domain); + if (mvp) + { + gram_error_at_line (msgid_pos, _("duplicate message definition")); + gram_error_at_line (&mvp->pos, _("\ +...this is the location of the first definition")); + free (msgstr); + } + else + message_variant_append (mp, this->domain, msgstr, msgstr_pos); +} + + +static void +compare_parse_debrief (that) + po_ty *that; +{ + compare_class_ty *this = (compare_class_ty *) that; + message_list_ty *mlp = this->mlp; + size_t j; + + /* For each domain in the used-domain-list, make sure each message + defines a msgstr in that domain. */ + for (j = 0; j < this->domain_list->nitems; ++j) + { + const char *domain_name; + size_t k; + + domain_name = this->domain_list->item[j]; + for (k = 0; k < mlp->nitems; ++k) + { + const message_ty *mp; + size_t m; + + mp = mlp->item[k]; + for (m = 0; m < mp->variant_count; ++m) + { + message_variant_ty *mvp; + + mvp = &mp->variant[m]; + if (strcmp (domain_name, mvp->domain) == 0) + break; + } + if (m >= mp->variant_count) + gram_error_at_line (&mp->variant[0].pos, _("\ +this message has no definition in the \"%s\" domain"), domain_name); + } + } +} + + +/* So that the one parser can be used for multiple programs, and also + use good data hiding and encapsulation practices, an object + oriented approach has been taken. An object instance is allocated, + and all actions resulting from the parse will be through + invokations of method functions of that object. */ + +static po_method_ty compare_methods = +{ + sizeof (compare_class_ty), + compare_constructor, + compare_destructor, + compare_directive_domain, + compare_directive_message, + NULL, /* parse_brief */ + compare_parse_debrief, + NULL, /* comment */ + NULL, /* comment_dot */ + NULL, /* comment_filepos */ + NULL, /* comment_special */ +}; + + +static message_list_ty * +grammar (filename) + char *filename; +{ + po_ty *pop; + message_list_ty *mlp; + + pop = po_alloc(&compare_methods); + po_scan(pop, filename); + mlp = ((compare_class_ty *)pop)->mlp; + po_free(pop); + return mlp; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/msgcomm.c b/debian/gettext-kde/gettext-kde-0.10.35/src/msgcomm.c new file mode 100644 index 00000000..082639ac --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/msgcomm.c @@ -0,0 +1,781 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1997, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <errno.h> +#include <getopt.h> +#include <stdio.h> +#include <sys/types.h> + +#ifdef STDC_HEADERS +# include <stdlib.h> +#endif + +#ifdef HAVE_LIMITS_H +# include <limits.h> +#endif + +#ifdef HAVE_LOCALE_H +# include <locale.h> +#endif + +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif + +#include "dir-list.h" +#include "error.h" +#include "getline.h" +#include "libgettext.h" +#include "message.h" +#include "po.h" +#include "system.h" + + +/* A convenience macro. I don't like writing gettext() every time. */ +#define _(str) gettext (str) + + +/* If nonzero add comments for file name and line number for each msgid. */ +static int line_comment = 1; + +/* Name of default domain file. If not set defaults to messages.po. */ +static char *default_domain; + +/* Force output of PO file even if empty. */ +static int force_po; + +/* Directory in which output files are created. */ +static char *output_dir; + +/* If nonzero omit header with information about this run. */ +static int omit_header; + +/* String containing name the program is called with. */ +const char *program_name; + +/* These variables control which messages are selected. */ +static int more_than = -1; +static int less_than = -1; + +/* Long options. */ +static const struct option long_options[] = +{ + { "add-comments", optional_argument, NULL, 'c' }, + { "add-location", no_argument, &line_comment, 1 }, + { "default-domain", required_argument, NULL, 'd' }, + { "directory", required_argument, NULL, 'D' }, + { "escape", no_argument, NULL, 'E' }, + { "files-from", required_argument, NULL, 'f' }, + { "force-po", no_argument, &force_po, 1 }, + { "help", no_argument, NULL, 'h' }, + { "indent", no_argument, NULL, 'i' }, + { "join-existing", no_argument, NULL, 'j' }, + { "no-escape", no_argument, NULL, 'e' }, + { "no-location", no_argument, &line_comment, 0 }, + { "omit-header", no_argument, &omit_header, 1 }, + { "output", required_argument, NULL, 'o' }, + { "output-dir", required_argument, NULL, 'p' }, + { "sort-by-file", no_argument, NULL, 'F' }, + { "sort-output", no_argument, NULL, 's' }, + { "strict", no_argument, NULL, 'S' }, + { "version", no_argument, NULL, 'V' }, + { "width", required_argument, NULL, 'w', }, + { "more-than", required_argument, NULL, '>', }, + { "less-than", required_argument, NULL, '<', }, + { NULL, 0, NULL, 0 } +}; + + +/* Prototypes for local functions. */ +static void usage PARAMS ((int status)) +#if defined __GNUC__ && ((__GNUC__ == 2 && __GNUC_MINOR__ > 4) || __GNUC__ > 2) + __attribute__ ((noreturn)) +#endif +; +static void error_print PARAMS ((void)); +static string_list_ty *read_name_from_file PARAMS ((const char *__file_name)); +static void extract_constructor PARAMS ((po_ty *__that)); +static void extract_directive_domain PARAMS ((po_ty *__that, char *__name)); +static void extract_directive_message PARAMS ((po_ty *__that, char *__msgid, + lex_pos_ty *__msgid_pos, + char *__msgstr, + lex_pos_ty *__msgstr_pos)); +static void extract_parse_brief PARAMS ((po_ty *__that)); +static void extract_comment PARAMS ((po_ty *__that, const char *__s)); +static void extract_comment_dot PARAMS ((po_ty *__that, const char *__s)); +static void extract_comment_filepos PARAMS ((po_ty *__that, const char *__name, + int __line)); +static void extract_comment_special PARAMS ((po_ty *that, const char *s)); +static void read_po_file PARAMS ((const char *__file_name, + message_list_ty *__mlp)); + + +int +main (argc, argv) + int argc; + char *argv[]; +{ + int cnt; + int optchar; + int do_help = 0; + int do_version = 0; + message_list_ty *mlp; + int sort_output = 0; + int sort_by_file = 0; + char *file_name; + const char *files_from = NULL; + string_list_ty *file_list; + char *output_file = NULL; + size_t j; + + /* Set program name for messages. */ + program_name = argv[0]; + error_print_progname = error_print; + +#ifdef HAVE_SETLOCALE + /* Set locale via LC_ALL. */ + setlocale (LC_ALL, ""); +#endif + + /* Set the text message domain. */ + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + + /* Set initial value of variables. */ + line_comment = -1; + default_domain = MESSAGE_DOMAIN_DEFAULT; + + while ((optchar = getopt_long (argc, argv, + "<>ac::Cd:D:eEf:Fhijk::l:L:m::M::no:p:sTuVw:x:", + long_options, NULL)) != EOF) + switch (optchar) + { + case '\0': /* Long option. */ + break; + case '>': + { + int value; + char *endp; + value = strtol (optarg, &endp, 10); + if (endp != optarg) + more_than = value; + } + break; + case '<': + { + int value; + char *endp; + value = strtol (optarg, &endp, 10); + if (endp != optarg) + less_than = value; + } + break; + case 'd': + default_domain = optarg; + break; + case 'D': + dir_list_append (optarg); + break; + case 'e': + message_print_style_escape (0); + break; + case 'E': + message_print_style_escape (1); + break; + case 'f': + files_from = optarg; + break; + case 'F': + sort_by_file = 1; + break; + case 'h': + do_help = 1; + break; + case 'i': + message_print_style_indent (); + break; + case 'n': + line_comment = 1; + break; + case 'o': + output_file = optarg; + break; + case 'p': + { + size_t len = strlen (optarg); + + if (output_dir != NULL) + free (output_dir); + + if (optarg[len - 1] == '/') + output_dir = xstrdup (optarg); + else + { + asprintf (&output_dir, "%s/", optarg); + if (output_dir == NULL) + /* We are about to construct the absolute path to the + directory for the output files but asprintf failed. */ + error (EXIT_FAILURE, errno, _("while preparing output")); + } + } + break; + case 's': + sort_output = 1; + break; + case 'S': + message_print_style_uniforum (); + break; + case 'u': + less_than = 2; + break; + case 'V': + do_version = 1; + break; + case 'w': + { + int value; + char *endp; + value = strtol (optarg, &endp, 10); + if (endp != optarg) + message_page_width_set (value); + } + break; + default: + usage (EXIT_FAILURE); + /* NOTREACHED */ + } + + /* Normalize selected options. */ + if (omit_header != 0 && line_comment < 0) + line_comment = 0; + + if (!line_comment && sort_by_file) + error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), + "--no-location", "--sort-by-file"); + + if (sort_output && sort_by_file) + error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), + "--sort-output", "--sort-by-file"); + + /* Version information requested. */ + if (do_version) + { + printf ("%s (GNU %s) %s\n", basename (program_name), PACKAGE, VERSION); + /* xgettext: no-wrap */ + printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\ +This is free software; see the source for copying conditions. There is NO\n\ +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ +"), + "1995, 1996, 1997, 1998"); + printf (_("Written by %s.\n"), "Peter Miller"); + exit (EXIT_SUCCESS); + } + + /* Help is requested. */ + if (do_help) + usage (EXIT_SUCCESS); + + /* Default output directory is the current directory. */ + if (output_dir == NULL) + output_dir = "."; + + /* Construct the name of the ouput file. If the default domain has + the special name "-" we write to stdout. */ + if (output_file) + { + if (output_file[0] == '/' || + strcmp(output_dir, ".") == 0 || + strcmp(output_file, "-") == 0 + ) + file_name = xstrdup (output_file); + else + { + /* Please do NOT add a .po suffix! */ + file_name = xmalloc (strlen (output_dir) + strlen (default_domain) + 2); + strcat (strcat (strcpy(file_name, output_dir), "/"), output_file); + } + } + else if (strcmp (default_domain, "-") == 0) + file_name = "-"; + else + { + file_name = (char *) xmalloc (strlen (output_dir) + + strlen (default_domain) + + sizeof (".po") + 2); + stpcpy (stpcpy (stpcpy (stpcpy (file_name, output_dir), "/"), + default_domain), ".po"); + } + + /* Determine list of files we have to process. */ + if (files_from != NULL) + file_list = read_name_from_file (files_from); + else + file_list = string_list_alloc (); + /* Append names from command line. */ + for (cnt = optind; cnt < argc; ++cnt) + string_list_append_unique (file_list, argv[cnt]); + + /* Test whether sufficient input files weregiven. */ + if (file_list->nitems < 2) + { + error (EXIT_SUCCESS, 0, _("at least two files must be specified")); + usage (EXIT_FAILURE); + } + + /* Allocate a message list to remember all the messages. */ + mlp = message_list_alloc (); + + /* Process all input files. */ + for (cnt = 0; cnt < file_list->nitems; ++cnt) + read_po_file (file_list->item[cnt], mlp); + string_list_free (file_list); + + /* Default the message selection criteria, and check them for sanity. */ + if (more_than < 0) + more_than = (less_than < 0 ? 1 : 0); + if (less_than < 0) + less_than = INT_MAX; + if (more_than >= less_than || less_than < 2 || more_than >= mlp->nitems) + error (EXIT_FAILURE, 0, + _("impossible selection criteria specified (%d < n < %d)"), + more_than, less_than); + + /* Remove messages which do not fit the criteria. */ + j = 0; + while (j < mlp->nitems) + { + message_ty *mp; + + mp = mlp->item[j]; + if (mp->used > more_than && mp->used < less_than) + ++j; + else + message_list_delete_nth(mlp, j); + } + + /* Sorting the list of messages. */ + if (sort_by_file) + message_list_sort_by_filepos (mlp); + else if (sort_output) + message_list_sort_by_msgid (mlp); + + /* Write the PO file. */ + message_list_print (mlp, file_name, force_po, 0); + + exit (EXIT_SUCCESS); +} + + +/* Display usage information and exit. */ +static void +usage (status) + int status; +{ + if (status != EXIT_SUCCESS) + fprintf (stderr, _("Try `%s --help' for more information.\n"), + program_name); + else + { + /* xgettext: no-wrap */ + printf (_("\ +Usage: %s [OPTION] INPUTFILE ...\n\ +Mandatory arguments to long options are mandatory for short options too.\n\ + -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n\ + -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n\ + -e, --no-escape do not use C escapes in output (default)\n\ + -E, --escape use C escapes in output, no extended chars\n\ + -f, --files-from=FILE get list of input files from FILE\n\ + --force-po write PO file even if empty\n\ + -F, --sort-by-file sort output by file location\n\ + -h, --help display this help and exit\n"), + program_name); + fputs (_("\ + -i, --indent write the .po file using indented style\n\ + --no-location do not write '#: filename:line' lines\n\ + -n, --add-location generate '#: filename:line' lines (default)\n\ + --omit-header don't write header with `msgid \"\"' entry\n\ + -o, --output=FILE write output to specified file\n\ + -p, --output-dir=DIR output files will be placed in directory DIR\n\ + -s, --sort-output generate sorted output and remove duplicates\n\ + --strict write out strict Uniforum conforming .po file\n\ + -T, --trigraphs understand ANSI C trigraphs for input\n\ + -u, --unique shorthand for --less-than=2, requests\n\ + that only unique messages be printed\n"), + stdout); + fputs (_("\ + -V, --version output version information and exit\n\ + -w, --width=NUMBER set output page width\n\ + -<, --less-than=NUMBER print messages with less than this many\n\ + definitions, defaults to infinite if not\n\ + set\n\ + ->, --more-than=NUMBER print messages with more than this many\n\ + definitions, defaults to 1 if not set\n\ +\n\ +Find messages which are common to two or more of the specified PO files.\n\ +By using the --more-than option, greater commonality may be requested\n\ +before messages are printed. Conversely, the --less-than option may be\n\ +used to specify less commonality before messages are printed (i.e.\n\ +--less-than=2 will only print the unique messages). Translations,\n\ +comments and extract comments will be preserved, but only from the first\n\ +PO file to define them. File positions from all PO files will be\n\ +preserved.\n"), stdout); + fputs (_("Report bugs to <[email protected]>.\n"), + stdout); + } + + exit (status); +} + + +/* The address of this function will be assigned to the hook in the error + functions. */ +static void +error_print () +{ + /* We don't want the program name to be printed in messages. */ +} + + +/* Read list of files to process from file. */ +static string_list_ty * +read_name_from_file (file_name) + const char *file_name; +{ + size_t line_len = 0; + char *line_buf = NULL; + FILE *fp; + string_list_ty *result; + + if (strcmp (file_name, "-") == 0) + fp = stdin; + else + { + fp = fopen (file_name, "r"); + if (fp == NULL) + error (EXIT_FAILURE, errno, + _("error while opening \"%s\" for reading"), file_name); + } + + result = string_list_alloc (); + + while (!feof (fp)) + { + /* Read next line from file. */ + int len = getline (&line_buf, &line_len, fp); + + /* In case of an error leave loop. */ + if (len < 0) + break; + + /* Remove trailing '\n'. */ + if (len > 0 && line_buf[len - 1] == '\n') + line_buf[--len] = '\0'; + + /* Test if we have to ignore the line. */ + if (*line_buf == '\0' || *line_buf == '#') + continue; + + string_list_append_unique (result, line_buf); + } + + /* Free buffer allocated through getline. */ + if (line_buf != NULL) + free (line_buf); + + /* Close input stream. */ + if (fp != stdin) + fclose (fp); + + return result; +} + + +typedef struct extract_class_ty extract_class_ty; +struct extract_class_ty +{ + /* Inherited instance variables and methods. */ + PO_BASE_TY + + /* Cumulative list of messages. */ + message_list_ty *mlp; + + /* Cumulative comments for next message. */ + string_list_ty *comment; + string_list_ty *comment_dot; + + int is_fuzzy; + int is_c_format; + int do_wrap; + + int filepos_count; + lex_pos_ty *filepos; +}; + + +static void +extract_constructor (that) + po_ty *that; +{ + extract_class_ty *this = (extract_class_ty *) that; + + this->mlp = NULL; /* actually set in read_po_file, below */ + this->comment = NULL; + this->comment_dot = NULL; + this->is_fuzzy = 0; + this->is_c_format = undecided; + this->do_wrap = undecided; + this->filepos_count = 0; + this->filepos = NULL; +} + + +static void +extract_directive_domain (that, name) + po_ty *that; + char *name; +{ + po_gram_error (_("this file may not contain domain directives")); +} + + +static void +extract_directive_message (that, msgid, msgid_pos, msgstr, msgstr_pos) + po_ty *that; + char *msgid; + lex_pos_ty *msgid_pos; + char *msgstr; + lex_pos_ty *msgstr_pos; +{ + extract_class_ty *this = (extract_class_ty *)that; + message_ty *mp; + message_variant_ty *mvp; + size_t j; + + /* If the msgid is the empty string, and we are omiting headers, throw + it away. */ + if (omit_header && *msgid == '\0') + { + free (msgid); + free (msgstr); + if (this->comment != NULL) + string_list_free (this->comment); + if (this->comment_dot != NULL) + string_list_free (this->comment_dot); + if (this->filepos != NULL) + free (this->filepos); + this->comment = NULL; + this->comment_dot = NULL; + this->filepos_count = 0; + this->filepos = NULL; + this->is_fuzzy = 0; + this->is_c_format = undecided; + this->do_wrap = undecided; + return; + } + + /* See if this message ID has been seen before. */ + mp = message_list_search (this->mlp, msgid); + if (mp) + free (msgid); + else + { + mp = message_alloc (msgid); + message_list_append (this->mlp, mp); + } + + /* The ``obsolete'' flag is cleared before reading each PO file. + If thisflag is clear, set it, and increment the ``used'' counter. + This allows us to count how many of the PO files use the message. */ + if (mp->obsolete == 0) + { + mp->obsolete = 1; + mp->used++; + } + + /* Add the accumulated comments to the message. Clear the + accumulation in preparation for the next message. */ + if (this->comment != NULL) + { + if (mp->comment == NULL) + for (j = 0; j < this->comment->nitems; ++j) + message_comment_append (mp, this->comment->item[j]); + string_list_free (this->comment); + this->comment = NULL; + } + if (this->comment_dot != NULL) + { + if (mp->comment_dot == NULL) + for (j = 0; j < this->comment_dot->nitems; ++j) + message_comment_dot_append (mp, this->comment_dot->item[j]); + string_list_free (this->comment_dot); + this->comment_dot = NULL; + } + mp->is_fuzzy |= this->is_fuzzy; + if (mp->is_c_format == undecided) + mp->is_c_format = this->is_c_format; + if (mp->do_wrap == undecided) + mp->do_wrap = this->do_wrap; + for (j = 0; j < this->filepos_count; ++j) + { + lex_pos_ty *pp; + + pp = &this->filepos[j]; + message_comment_filepos (mp, pp->file_name, pp->line_number); + free (pp->file_name); + } + if (this->filepos != NULL) + free (this->filepos); + this->filepos_count = 0; + this->filepos = NULL; + this->is_fuzzy = 0; + this->is_c_format = undecided; + this->do_wrap = undecided; + + /* See if this domain has been seen for this message ID. */ + mvp = message_variant_search (mp, MESSAGE_DOMAIN_DEFAULT); + if (mvp != NULL) + free (msgstr); + else + message_variant_append (mp, MESSAGE_DOMAIN_DEFAULT, msgstr, msgstr_pos); +} + + +static void +extract_parse_brief (that) + po_ty *that; +{ + po_lex_pass_comments (1); +} + + +static void +extract_comment (that, s) + po_ty *that; + const char *s; +{ + extract_class_ty *this = (extract_class_ty *) that; + + if (this->comment == NULL) + this->comment = string_list_alloc (); + string_list_append (this->comment, s); +} + + +static void +extract_comment_dot (that, s) + po_ty *that; + const char *s; +{ + extract_class_ty *this = (extract_class_ty *) that; + + if (this->comment_dot == NULL) + this->comment_dot = string_list_alloc (); + string_list_append (this->comment_dot, s); +} + + +static void +extract_comment_filepos (that, name, line) + po_ty *that; + const char *name; + int line; +{ + extract_class_ty *this = (extract_class_ty *) that; + size_t nbytes; + lex_pos_ty *pp; + + /* Write line numbers only if -n option is given. */ + if (line_comment != 0) + { + nbytes = (this->filepos_count + 1) * sizeof (this->filepos[0]); + this->filepos = xrealloc (this->filepos, nbytes); + pp = &this->filepos[this->filepos_count++]; + pp->file_name = xstrdup (name); + pp->line_number = line; + } +} + + +static void +extract_comment_special (that, s) + po_ty *that; + const char *s; +{ + extract_class_ty *this = (extract_class_ty *) that; + + if (strstr (s, "fuzzy") != NULL) + this->is_fuzzy = 1; + if (strstr (s, "c-format") != NULL) + this->is_c_format = yes; + if (strstr (s, "no-c-format") != NULL) + this->is_c_format = no; + if (strstr (s, "wrap") != NULL) + this->do_wrap = yes; + if (strstr (s, "no-wrap") != NULL) + this->do_wrap = no; +} + + +/* So that the one parser can be used for multiple programs, and also + use good data hiding and encapsulation practices, an object + oriented approach has been taken. An object instance is allocated, + and all actions resulting from the parse will be through + invocations of method functions of that object. */ + +static po_method_ty extract_methods = +{ + sizeof (extract_class_ty), + extract_constructor, + NULL, /* destructor */ + extract_directive_domain, + extract_directive_message, + extract_parse_brief, + NULL, /* parse_debrief */ + extract_comment, + extract_comment_dot, + extract_comment_filepos, + extract_comment_special +}; + + +/* Read the contents of the specified .po file into a message list. */ + +static void +read_po_file (file_name, mlp) + const char *file_name; + message_list_ty *mlp; +{ + size_t j; + + po_ty *pop = po_alloc (&extract_methods); + ((extract_class_ty *) pop)->mlp = mlp; + po_scan (pop, file_name); + po_free (pop); + + /* The ``obsolete'' flag of each message is cleared before reading + each PO file. As each message is read from a PO file, if this flag + is clear, it is set, and increment the ``used'' counter. This + allows us to count how many of the PO files use each message. */ + for (j = 0; j < mlp->nitems; ++j) + mlp->item[j]->obsolete = 0; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/msgfmt.c b/debian/gettext-kde/gettext-kde-0.10.35/src/msgfmt.c new file mode 100644 index 00000000..35f3d980 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/msgfmt.c @@ -0,0 +1,972 @@ +/* Converts Uniforum style .po files to binary .mo files + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Written by Ulrich Drepper <[email protected]>, April 1995. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <ctype.h> +#include <errno.h> +#include <getopt.h> +#include <stdio.h> +#include <sys/param.h> +#include <sys/types.h> + +#ifdef STDC_HEADERS +# include <stdlib.h> +#endif + +#ifdef HAVE_LOCALE_H +# include <locale.h> +#endif + +#include "hash.h" + +#include "dir-list.h" +#include "error.h" +#include "getline.h" +#include "printf.h" +#include <system.h> + +#include "gettext.h" +#include "domain.h" +#include "hash-string.h" +#include <libintl.h> +#include "message.h" +#include "po.h" + +#define _(str) gettext (str) + +#ifndef errno +extern int errno; +#endif + +/* Define the data structure which we need to represent the data to + be written out. */ +struct id_str_pair +{ + char *id; + char *str; +}; + +/* Contains information about the definition of one translation. */ +struct msgstr_def +{ + char *msgstr; + lex_pos_ty pos; +}; + +/* This structure defines a derived class of the po_ty class. (See + po.h for an explanation.) */ +typedef struct msgfmt_class_ty msgfmt_class_ty; +struct msgfmt_class_ty +{ + /* inherited instance variables, etc */ + PO_BASE_TY + + int is_fuzzy; + enum is_c_format is_c_format; + enum is_c_format do_wrap; + + int has_header_entry; +}; + +/* Alignment of strings in resulting .mo file. */ +static size_t alignment; + +/* Contains exit status for case in which no premature exit occurs. */ +static int exit_status; + +/* If nonzero include even fuzzy translations in output file. */ +static int include_all; + +/* Nonzero if no hash table in .mo is wanted. */ +static int no_hash_table; + +/* Specifies name of the output file. */ +static const char *output_file_name; + +/* String containing name the program is called with. */ +const char *program_name; + +/* We may have more than one input file. Domains with same names in + different files have to merged. So we need a list of tables for + each output file. */ +static struct msg_domain *domain; +static struct msg_domain *current_domain; + +/* If not zero list duplicate message identifiers. */ +static int verbose_level; + +/* If not zero check strings according to format string rules for the + language. */ +static int do_check; + +/* Counters for statistics on translations for the processed files. */ +static int msgs_translated; +static int msgs_untranslated; +static int msgs_fuzzy; + +/* If not zero print statistics about translation at the end. */ +static int do_statistics; + +/* Long options. */ +static const struct option long_options[] = +{ + { "alignment", required_argument, NULL, 'a' }, + { "check", no_argument, &do_check, 1 }, + { "directory", required_argument, NULL, 'D' }, + { "help", no_argument, NULL, 'h' }, + { "no-hash", no_argument, &no_hash_table, 1 }, + { "output-file", required_argument, NULL, 'o' }, + { "statistics", no_argument, &do_statistics, 1 }, + { "strict", no_argument, NULL, 'S' }, + { "use-fuzzy", no_argument, NULL, 'f' }, + { "verbose", no_argument, NULL, 'v' }, + { "version", no_argument, NULL, 'V' }, + { NULL, 0, NULL, 0 } +}; + + +#ifndef roundup +# if defined __GNUC__ && __GNUC__ >= 2 +# define roundup(x, y) ({typeof(x) _x = (x); typeof(y) _y = (y); \ + ((_x + _y - 1) / _y) * _y; }) +# else +# define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) +# endif /* GNU CC2 */ +#endif /* roundup */ + +/* Prototypes for local functions. */ +static void usage PARAMS ((int status)) +#if defined __GNUC__ && ((__GNUC__ == 2 && __GNUC_MINOR__ >= 5) || __GNUC__ > 2) + __attribute__ ((noreturn)) +#endif +; +static void error_print PARAMS ((void)); +static void grammar PARAMS ((char *__filename)); +static void format_constructor PARAMS ((po_ty *__that)); +static void format_directive_domain PARAMS ((po_ty *__pop, char *__name)); +static void format_directive_message PARAMS ((po_ty *__pop, char *__msgid, + lex_pos_ty *__msgid_pos, + char *__msgstr, + lex_pos_ty *__msgstr_pos)); +static void format_comment_special PARAMS ((po_ty *pop, const char *s)); +static void format_debrief PARAMS((po_ty *)); +static struct msg_domain *new_domain PARAMS ((const char *name)); +static int compare_id PARAMS ((const void *pval1, const void *pval2)); +static void write_table PARAMS ((FILE *output_file, hash_table *tab)); +static void check_pair PARAMS ((const char *msgid, const lex_pos_ty *msgid_pos, + const char *msgstr, + const lex_pos_ty *msgstr_pos, int is_format)); +static const char *add_mo_suffix PARAMS ((const char *)); + + +int +main(argc, argv) + int argc; + char *argv[]; +{ + int opt; + int do_help = 0; + int do_version = 0; + int strict_uniforum = 0; + + /* Set default value for global variables. */ + alignment = DEFAULT_OUTPUT_ALIGNMENT; + + /* Set program name for messages. */ + program_name = argv[0]; + error_print_progname = error_print; + error_one_per_line = 1; + exit_status = EXIT_SUCCESS; + +#ifdef HAVE_SETLOCALE + /* Set locale via LC_ALL. */ + setlocale (LC_ALL, ""); +#endif + + /* Set the text message domain. */ + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + + while ((opt = getopt_long (argc, argv, "a:cD:fho:vV", long_options, NULL)) + != EOF) + switch (opt) + { + case '\0': /* Long option. */ + break; + case 'a': + { + char *endp; + size_t new_align = strtoul (optarg, &endp, 0); + + if (endp != optarg) + alignment = new_align; + } + break; + case 'c': + do_check = 1; + break; + case 'D': + dir_list_append (optarg); + break; + case 'f': + include_all = 1; + break; + case 'h': + do_help = 1; + break; + case 'o': + output_file_name = optarg; + break; + case 'S': + strict_uniforum = 1; + break; + case 'v': + ++verbose_level; + break; + case 'V': + do_version = 1; + break; + default: + usage (EXIT_FAILURE); + break; + } + + /* Version information is requested. */ + if (do_version) + { + printf ("%s (GNU %s) %s\n", basename (program_name), PACKAGE, VERSION); + /* xgettext: no-wrap */ + printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\ +This is free software; see the source for copying conditions. There is NO\n\ +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ +"), + "1995, 1996, 1997, 1998"); + printf (_("Written by %s.\n"), "Ulrich Drepper"); + exit (EXIT_SUCCESS); + } + + /* Help is requested. */ + if (do_help) + usage (EXIT_SUCCESS); + + /* Test whether we have a .po file name as argument. */ + if (optind >= argc) + { + error (EXIT_SUCCESS, 0, _("no input file given")); + usage (EXIT_FAILURE); + } + + /* The -o option determines the name of the domain and therefor + the output file. */ + if (output_file_name != NULL) + current_domain = new_domain (output_file_name); + + /* Prepare PO file reader. We need to see the comments because inexact + translations must be reported. */ + po_lex_pass_comments (1); + + /* Now write out all domains. */ + /* Process all given .po files. */ + while (argc > optind) + { + /* Remember that we currently have not specified any domain. This + is of course not true when we saw the -o option. */ + if (output_file_name == NULL) + current_domain = NULL; + + /* And process the input file. */ + grammar (argv[optind]); + + ++optind; + } + + while (domain != NULL) + { + FILE *output_file; + + /* If no entry for this domain don't even create the file. */ + if (domain->symbol_tab.filled != 0) + { + if (strcmp (domain->domain_name, "-") == 0) + output_file = stdout; + else + { + const char *fname; + + fname = strict_uniforum ? add_mo_suffix (domain->domain_name) + : domain->domain_name; + + output_file = fopen (fname, "w"); + if (output_file == NULL) + { + error (0, errno, + _("error while opening \"%s\" for writing"), fname); + exit_status = EXIT_FAILURE; + } + + if (strict_uniforum) + free ((void *) fname); + } + + if (output_file != NULL) + { + write_table (output_file, &domain->symbol_tab); + if (output_file != stdout) + fclose (output_file); + } + } + + domain = domain->next; + } + + /* Print statistics if requested. */ + if (verbose_level > 0 || do_statistics) + { + fprintf (stderr, _("%d translated messages"), msgs_translated); + if (msgs_fuzzy > 0) + fprintf (stderr, _(", %d fuzzy translations"), msgs_fuzzy); + if (msgs_untranslated > 0) + fprintf (stderr, _(", %d untranslated messages"), msgs_untranslated); + fputs (".\n", stderr); + } + + exit (exit_status); +} + + +/* Display usage information and exit. */ +static void +usage (status) + int status; +{ + if (status != EXIT_SUCCESS) + fprintf (stderr, _("Try `%s --help' for more information.\n"), + program_name); + else + { + /* xgettext: no-wrap */ + printf (_("\ +Usage: %s [OPTION] filename.po ...\n\ +Generate binary message catalog from textual translation description.\n\ +\n\ +Mandatory arguments to long options are mandatory for short options too.\n\ + -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n\ + -c, --check perform language dependent checks on strings\n\ + -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n\ + -f, --use-fuzzy use fuzzy entries in output\n\ + -h, --help display this help and exit\n\ + --no-hash binary file will not include the hash table\n\ + -o, --output-file=FILE specify output file name as FILE\n\ + --statistics print statistics about translations\n\ + --strict enable strict Uniforum mode\n\ + -v, --verbose list input file anomalies\n\ + -V, --version output version information and exit\n\ +\n\ +Giving the -v option more than once increases the verbosity level.\n\ +\n\ +If input file is -, standard input is read. If output file is -,\n\ +output is written to standard output.\n"), + program_name, DEFAULT_OUTPUT_ALIGNMENT); + fputs (_("Report bugs to <[email protected]>.\n"), stdout); + } + + exit (status); +} + + +static struct msg_domain * +new_domain (name) + const char *name; +{ + struct msg_domain **p_dom = &domain; + + while (*p_dom != NULL && strcmp (name, (*p_dom)->domain_name) != 0) + p_dom = &(*p_dom)->next; + + if (*p_dom == NULL) + { + *p_dom = (struct msg_domain *) xmalloc (sizeof (**p_dom)); + + if (init_hash (&(*p_dom)->symbol_tab, 100) != 0) + error (EXIT_FAILURE, errno, _("while creating hash table")); + (*p_dom)->domain_name = name; + (*p_dom)->next = NULL; + } + + return *p_dom; +} + + +/* The address of this function will be assigned to the hook in the error + functions. */ +static void +error_print () +{ + /* We don't want the program name to be printed in messages. Emacs' + compile.el does not like this. */ +} + + +/* Prepare for first message. */ +static void +format_constructor (that) + po_ty *that; +{ + msgfmt_class_ty *this = (msgfmt_class_ty *) that; + + this->is_fuzzy = 0; + this->is_c_format = undecided; + this->do_wrap = undecided; + this->has_header_entry = 0; +} + + +/* Some checks after whole file is read. */ +static void +format_debrief (that) + po_ty *that; +{ + msgfmt_class_ty *this = (msgfmt_class_ty *) that; + + /* If in verbose mode, test whether header entry was found. */ + if (verbose_level > 0 && this->has_header_entry == 0) + error (0, 0, _("%s: warning: no header entry found"), gram_pos.file_name); +} + + +/* Process `domain' directive from .po file. */ +static void +format_directive_domain (pop, name) + po_ty *pop; + char *name; +{ + /* If no output file was given, we change it with each `domain' + directive. */ + if (output_file_name == NULL) + { + size_t correct; + + correct = strcspn (name, INVALID_PATH_CHAR); + if (name[correct] != '\0') + { + exit_status = EXIT_FAILURE; + if (correct == 0) + { + error (0, 0, _("\ +domain name \"%s\" not suitable as file name"), name); + return; + } + else + error (0, 0, _("\ +domain name \"%s\" not suitable as file name: will use prefix"), name); + name[correct] = '\0'; + } + + /* Set new domain. */ + current_domain = new_domain (name); + } + else + { + if (verbose_level > 0) + /* We don't change the exit status here because this is really + only an information. */ + error (0, 0, _("`domain %s' directive ignored"), name); + + /* NAME was allocated in po-gram.y but is not used anywhere. */ + free (name); + } +} + + +/* Process `msgid'/`msgstr' pair from .po file. */ +static void +format_directive_message (that, msgid_string, msgid_pos, msgstr_string, + msgstr_pos) + po_ty *that; + char *msgid_string; + lex_pos_ty *msgid_pos; + char *msgstr_string; + lex_pos_ty *msgstr_pos; +{ + msgfmt_class_ty *this = (msgfmt_class_ty *) that; + struct msgstr_def *entry; + + if (msgstr_string[0] == '\0' || (!include_all && this->is_fuzzy)) + { + if (verbose_level > 1) + /* We don't change the exit status here because this is really + only an information. */ + error_at_line (0, 0, msgstr_pos->file_name, msgstr_pos->line_number, + (msgstr_string[0] == '\0' + ? _("empty `msgstr' entry ignored") + : _("fuzzy `msgstr' entry ignored"))); + + /* Free strings allocated in po-gram.y. */ + free (msgstr_string); + + /* Increment counter for fuzzy/untranslated messages. */ + if (this->is_fuzzy) + ++msgs_fuzzy; + else + ++msgs_untranslated; + + goto prepare_next; + } + + /* Test for header entry. */ + if (msgid_string[0] == '\0') + { + this->has_header_entry = 1; + + /* Do some more tests on test contents of the header entry. */ + if (verbose_level > 0) + { + static const char *required_fields[] = + { + "Project-Id-Version", "PO-Revision-Date", + "Last-Translator", "Language-Team", "MIME-Version", + "Content-Type", "Content-Transfer-Encoding" + }; + static const char *default_values[] = + { + "PACKAGE VERSION", "YEAR-MO-DA", "FULL NAME", "LANGUAGE", + NULL, "text/plain; charset=CHARSET", "ENCODING" + }; + const size_t nfields = (sizeof (required_fields) + / sizeof (required_fields[0])); + int initial = -1; + int cnt; + + for (cnt = 0; cnt < nfields; ++cnt) + { + char *endp = strstr (msgstr_string, required_fields[cnt]); + + if (endp == NULL) + error (0, 0, _("headerfield `%s' missing in header"), + required_fields[cnt]); + else if (endp != msgstr_string && endp[-1] != '\n') + error (0, 0, _("\ +header field `%s' should start at beginning of line"), + required_fields[cnt]); + else if (default_values[cnt] != NULL + && strncmp (default_values[cnt], + endp + strlen (required_fields[cnt]) + 2, + strlen (default_values[cnt])) == 0) + { + if (initial != -1) + { + error (0, 0, _("\ +some header fields still have the initial default value")); + initial = -1; + break; + } + else + initial = cnt; + } + } + + if (initial != -1) + error (0, 0, _("field `%s' still has initial default value"), + required_fields[initial]); + } + } + else + /* We don't count the header entry in the statistic so place the + counter incrementation here. */ + if (this->is_fuzzy) + ++msgs_fuzzy; + else + ++msgs_translated; + + /* We found a valid pair of msgid/msgstr. + Construct struct to describe msgstr definition. */ + entry = (struct msgstr_def *) xmalloc (sizeof (*entry)); + + entry->msgstr = msgstr_string; + entry->pos = *msgstr_pos; + + /* Do some more checks on both strings. */ + check_pair (msgid_string, msgid_pos, msgstr_string, msgstr_pos, + do_check && possible_c_format_p (this->is_c_format)); + + /* Check whether already a domain is specified. If not use default + domain. */ + if (current_domain == NULL) + current_domain = new_domain ("messages"); + + /* We insert the ID/string pair into the hashing table. But we have + to take care for dublicates. */ + if (insert_entry (¤t_domain->symbol_tab, msgid_string, + strlen (msgid_string), entry)) + { + /* We don't need the just constructed entry. */ + free (entry); + + if (verbose_level > 0) + { + /* We give a fatal error about this, but only if the + translations are different. Tell the user the old + definition for reference. */ + find_entry (¤t_domain->symbol_tab, msgid_string, + strlen (msgid_string), (void **) &entry); + if (0 != strcmp(msgstr_string, entry->msgstr)) + { + gram_error_at_line (msgid_pos, _("duplicate message definition")); + gram_error_at_line (&entry->pos, _("\ +...this is the location of the first definition")); + + /* FIXME Should this be always a reason for an exit status != 0? */ + exit_status = EXIT_FAILURE; + } + } + + /* We don't need the just constructed entries' + parameter string (allocated in po-gram.y). */ + free (msgstr_string); + } + +prepare_next: + /* We do not need the msgid string in any case. */ + free (msgid_string); + + /* Prepare for next message. */ + this->is_fuzzy = 0; + this->is_c_format = undecided; + this->do_wrap = undecided; +} + + +/* Test for `#, fuzzy' comments and warn. */ +static void +format_comment_special (that, s) + po_ty *that; + const char *s; +{ + msgfmt_class_ty *this = (msgfmt_class_ty *) that; + + if (strstr (s, "fuzzy") != NULL) + { + static int warned = 0; + + if (!include_all && verbose_level > 1 && warned == 0) + { + warned = 1; + error (0, 0, _("\ +%s: warning: source file contains fuzzy translation"), + gram_pos.file_name); + } + + this->is_fuzzy = 1; + } + this->is_c_format = parse_c_format_description_string (s); + this->do_wrap = parse_c_width_description_string (s); +} + + +static int +compare_id (pval1, pval2) + const void *pval1; + const void *pval2; +{ + return strcmp (((struct id_str_pair *) pval1)->id, + ((struct id_str_pair *) pval2)->id); +} + + +static void +write_table (output_file, tab) + FILE *output_file; + hash_table *tab; +{ + static char null = '\0'; + /* This should be explained: + Each string has an associate hashing value V, computed by a fixed + function. To locate the string we use open addressing with double + hashing. The first index will be V % M, where M is the size of the + hashing table. If no entry is found, iterating with a second, + independent hashing function takes place. This second value will + be 1 + V % (M - 2). + The approximate number of probes will be + + for unsuccessful search: (1 - N / M) ^ -1 + for successful search: - (N / M) ^ -1 * ln (1 - N / M) + + where N is the number of keys. + + If we now choose M to be the next prime bigger than 4 / 3 * N, + we get the values + 4 and 1.85 resp. + Because unsuccesful searches are unlikely this is a good value. + Formulas: [Knuth, The Art of Computer Programming, Volume 3, + Sorting and Searching, 1973, Addison Wesley] */ + nls_uint32 hash_tab_size = no_hash_table ? 0 + : next_prime ((tab->filled * 4) + / 3); + nls_uint32 *hash_tab; + + /* Header of the .mo file to be written. */ + struct mo_file_header header; + struct id_str_pair *msg_arr; + void *ptr; + size_t cnt; + char *id; + struct msgstr_def *entry; + struct string_desc sd; + + /* Fill the structure describing the header. */ + header.magic = _MAGIC; /* Magic number. */ + header.revision = MO_REVISION_NUMBER; /* Revision number of file format. */ + header.nstrings = tab->filled; /* Number of strings. */ + header.orig_tab_offset = sizeof (header); + /* Offset of table for original string offsets. */ + header.trans_tab_offset = sizeof (header) + + tab->filled * sizeof (struct string_desc); + /* Offset of table for translation string offsets. */ + header.hash_tab_size = hash_tab_size; /* Size of used hashing table. */ + header.hash_tab_offset = + no_hash_table ? 0 : sizeof (header) + + 2 * (tab->filled * sizeof (struct string_desc)); + /* Offset of hashing table. */ + + /* Write the header out. */ + fwrite (&header, sizeof (header), 1, output_file); + + /* Allocate table for the all elements of the hashing table. */ + msg_arr = (struct id_str_pair *) alloca (tab->filled * sizeof (msg_arr[0])); + + /* Read values from hashing table into array. */ + for (cnt = 0, ptr = NULL; + iterate_table (tab, &ptr, (const void **) &id, (void **) &entry) >= 0; + ++cnt) + { + msg_arr[cnt].id = id; + msg_arr[cnt].str = entry->msgstr; + } + + /* Sort the table according to original string. */ + qsort (msg_arr, tab->filled, sizeof (msg_arr[0]), compare_id); + + /* Set offset to first byte after all the tables. */ + sd.offset = roundup (sizeof (header) + + tab->filled * sizeof (sd) + + tab->filled * sizeof (sd) + + hash_tab_size * sizeof (nls_uint32), + alignment); + + /* Write out length and starting offset for all original strings. */ + for (cnt = 0; cnt < tab->filled; ++cnt) + { + sd.length = strlen (msg_arr[cnt].id); + fwrite (&sd, sizeof (sd), 1, output_file); + sd.offset += roundup (sd.length + 1, alignment); + } + + /* Write out length and starting offset for all translation strings. */ + for (cnt = 0; cnt < tab->filled; ++cnt) + { + sd.length = strlen (msg_arr[cnt].str); + fwrite (&sd, sizeof (sd), 1, output_file); + sd.offset += roundup (sd.length + 1, alignment); + } + + /* Skip this part when no hash table is needed. */ + if (!no_hash_table) + { + /* Allocate room for the hashing table to be written out. */ + hash_tab = (nls_uint32 *) alloca (hash_tab_size * sizeof (nls_uint32)); + memset (hash_tab, '\0', hash_tab_size * sizeof (nls_uint32)); + + /* Insert all value in the hash table, following the algorithm described + above. */ + for (cnt = 0; cnt < tab->filled; ++cnt) + { + nls_uint32 hash_val = hash_string (msg_arr[cnt].id); + nls_uint32 idx = hash_val % hash_tab_size; + + if (hash_tab[idx] != 0) + { + /* We need the second hashing function. */ + nls_uint32 c = 1 + (hash_val % (hash_tab_size - 2)); + + do + if (idx >= hash_tab_size - c) + idx -= hash_tab_size - c; + else + idx += c; + while (hash_tab[idx] != 0); + } + + hash_tab[idx] = cnt + 1; + } + + /* Write the hash table out. */ + fwrite (hash_tab, sizeof (nls_uint32), hash_tab_size, output_file); + } + + /* Write bytes to make first string to be aligned. */ + cnt = sizeof (header) + 2 * tab->filled * sizeof (sd) + + hash_tab_size * sizeof (nls_uint32); + fwrite (&null, 1, roundup (cnt, alignment) - cnt, output_file); + + /* Now write the original strings. */ + for (cnt = 0; cnt < tab->filled; ++cnt) + { + size_t len = strlen (msg_arr[cnt].id); + + fwrite (msg_arr[cnt].id, len + 1, 1, output_file); + fwrite (&null, 1, roundup (len + 1, alignment) - (len + 1), output_file); + } + + /* Now write the translation strings. */ + for (cnt = 0; cnt < tab->filled; ++cnt) + { + size_t len = strlen (msg_arr[cnt].str); + + fwrite (msg_arr[cnt].str, len + 1, 1, output_file); + fwrite (&null, 1, roundup (len + 1, alignment) - (len + 1), output_file); + + free (msg_arr[cnt].str); + } + + /* Hashing table is not used anmore. */ + delete_hash (tab); +} + + +static void +check_pair (msgid, msgid_pos, msgstr, msgstr_pos, is_format) + const char *msgid; + const lex_pos_ty *msgid_pos; + const char *msgstr; + const lex_pos_ty *msgstr_pos; + int is_format; +{ + size_t msgid_len = strlen (msgid); + size_t msgstr_len = strlen (msgstr); + size_t nidfmts, nstrfmts; + + /* If the msgid string is empty we have the special entry reserved for + information about the translation. */ + if (msgid_len == 0) + return; + + /* Test 1: check whether both or none of the strings begin with a '\n'. */ + if (((msgid[0] == '\n') ^ (msgstr[0] == '\n')) != 0) + { + error_at_line (0, 0, msgid_pos->file_name, msgid_pos->line_number, _("\ +`msgid' and `msgstr' entries do not both begin with '\\n'")); + exit_status = EXIT_FAILURE; + } + + /* Test 2: check whether both or none of the strings end with a '\n'. */ + if (((msgid[msgid_len - 1] == '\n') ^ (msgstr[msgstr_len - 1] == '\n')) != 0) + { + error_at_line (0, 0, msgid_pos->file_name, msgid_pos->line_number, _("\ +`msgid' and `msgstr' entries do not both end with '\\n'")); + exit_status = EXIT_FAILURE; + } + + if (is_format != 0) + { + /* Test 3: check whether both formats strings contain the same + number of format specifications. */ + nidfmts = parse_printf_format (msgid, 0, NULL); + nstrfmts = parse_printf_format (msgstr, 0, NULL); + if (nidfmts != nstrfmts) + { + error_at_line (0, 0, msgid_pos->file_name, msgid_pos->line_number, + _("\ +number of format specifications in `msgid' and `msgstr' does not match")); + exit_status = EXIT_FAILURE; + } + else + { + int *id_args = (int *) alloca (nidfmts * sizeof (int)); + int *str_args = (int *) alloca (nstrfmts * sizeof (int)); + size_t cnt; + + (void) parse_printf_format (msgid, nidfmts, id_args); + (void) parse_printf_format (msgstr, nstrfmts, str_args); + + for (cnt = 0; cnt < nidfmts; ++cnt) + if (id_args[cnt] != str_args[cnt]) + { + error_at_line (0, 0, msgid_pos->file_name, + msgid_pos->line_number, _("\ +format specifications for argument %u are not the same"), cnt); + exit_status = EXIT_FAILURE; + } + } + } +} + + +/* So that the one parser can be used for multiple programs, and also + use good data hiding and encapsulation practices, an object + oriented approach has been taken. An object instance is allocated, + and all actions resulting from the parse will be through + invokations of method functions of that object. */ + +static po_method_ty format_methods = +{ + sizeof (msgfmt_class_ty), + format_constructor, /* constructor */ + NULL, /* destructor */ + format_directive_domain, + format_directive_message, + NULL, /* parse_brief */ + format_debrief, /* parse_debrief */ + NULL, /* comment */ + NULL, /* comment_dot */ + NULL, /* comment_filepos */ + format_comment_special /* comment */ +}; + + +/* Read .po file FILENAME and store translation pairs. */ +static void +grammar (filename) + char *filename; +{ + po_ty *pop; + + pop = po_alloc (&format_methods); + po_scan (pop, filename); + po_free (pop); +} + + +static const char * +add_mo_suffix (fname) + const char *fname; +{ + size_t len; + char *result; + + len = strlen (fname); + if (len > 3 && memcmp (fname + len - 3, ".mo", 3) == 0) + return xstrdup (fname); + if (len > 4 && memcmp (fname + len - 4, ".gmo", 4) == 0) + return xstrdup (fname); + result = (char *) xmalloc (len + 4); + stpcpy (stpcpy (result, fname), ".mo"); + return result; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/msgmerge.c b/debian/gettext-kde/gettext-kde-0.10.35/src/msgmerge.c new file mode 100644 index 00000000..8ec02fc0 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/msgmerge.c @@ -0,0 +1,781 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + This file was written by Peter Miller <[email protected]> + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <getopt.h> +#include <limits.h> +#include <stdio.h> + +#ifdef STDC_HEADERS +# include <stdlib.h> +#endif + +#if HAVE_STRING_H +# include <string.h> +#else +# include <strings.h> +#endif + +#if HAVE_LOCALE_H +# include <locale.h> +#endif + +#include "dir-list.h" +#include "error.h" +#include "message.h" +#include <system.h> +#include <libintl.h> +#include "po.h" + +#define _(str) gettext (str) + + +/* This structure defines a derived class of the po_ty class. (See + po.h for an explanation.) */ +typedef struct merge_class_ty merge_class_ty; +struct merge_class_ty +{ + /* inherited instance variables, etc */ + PO_BASE_TY + + /* Name of domain we are currently examining. */ + char *domain; + + /* List of domains already appeared in the current file. */ + string_list_ty *domain_list; + + /* List of messages already appeared in the current file. */ + message_list_ty *mlp; + + /* Accumulate comments for next message directive */ + string_list_ty *comment; + string_list_ty *comment_dot; + + /* Flags transported in special comments. */ + int is_fuzzy; + enum is_c_format is_c_format; + enum is_c_format do_wrap; + + /* Accumulate filepos comments for the next message directive. */ + size_t filepos_count; + lex_pos_ty *filepos; +}; + + +/* String containing name the program is called with. */ +const char *program_name; + +/* If non-zero do not print unneeded messages. */ +static int quiet; + +/* Verbosity level. */ +static int verbosity_level; + +/* If nonzero, remember comments for file name and line number for each + msgid, if present in the reference input. Defaults to true. */ +static int line_comment = 1; + +/* Force output of PO file even if empty. */ +static int force_po; + +/* Long options. */ +static const struct option long_options[] = +{ + { "add-location", no_argument, &line_comment, 1 }, + { "directory", required_argument, NULL, 'D' }, + { "escape", no_argument, NULL, 'E' }, + { "force-po", no_argument, &force_po, 1 }, + { "help", no_argument, NULL, 'h' }, + { "indent", no_argument, NULL, 'i' }, + { "no-escape", no_argument, NULL, 'e' }, + { "no-location", no_argument, &line_comment, 0 }, + { "output-file", required_argument, NULL, 'o' }, + { "quiet", no_argument, NULL, 'q' }, + { "sort-by-file", no_argument, NULL, 'F' }, + { "sort-output", no_argument, NULL, 's' }, + { "silent", no_argument, NULL, 'q' }, + { "strict", no_argument, NULL, 'S' }, + { "verbose", no_argument, NULL, 'v' }, + { "version", no_argument, NULL, 'V' }, + { "width", required_argument, NULL, 'w', }, + { NULL, 0, NULL, 0 } +}; + + +/* Prototypes for local functions. */ +static void usage PARAMS ((int __status)); +static void error_print PARAMS ((void)); +static void merge_constructor PARAMS ((po_ty *__that)); +static void merge_destructor PARAMS ((po_ty *__that)); +static void merge_directive_domain PARAMS ((po_ty *__that, char *__name)); +static void merge_directive_message PARAMS ((po_ty *__that, char *__msgid, + lex_pos_ty *__msgid_pos, + char *__msgstr, + lex_pos_ty *__msgstr_pos)); +static void merge_parse_brief PARAMS ((po_ty *__that)); +static void merge_parse_debrief PARAMS ((po_ty *__that)); +static void merge_comment PARAMS ((po_ty *__that, const char *__s)); +static void merge_comment_dot PARAMS ((po_ty *__that, const char *__s)); +static void merge_comment_special PARAMS ((po_ty *__that, const char *__s)); +static void merge_comment_filepos PARAMS ((po_ty *__that, const char *__name, + int __line)); +static message_list_ty *grammar PARAMS ((const char *__filename)); +static message_list_ty *merge PARAMS ((const char *__fn1, const char *__fn2)); + + +int +main (argc, argv) + int argc; + char **argv; +{ + int opt; + int do_help; + int do_version; + char *output_file; + message_list_ty *result; + int sort_by_filepos = 0; + int sort_by_msgid = 0; + + /* Set program name for messages. */ + program_name = argv[0]; + verbosity_level = 0; + quiet = 0; + error_print_progname = error_print; + gram_max_allowed_errors = INT_MAX; + +#ifdef HAVE_SETLOCALE + /* Set locale via LC_ALL. */ + setlocale (LC_ALL, ""); +#endif + + /* Set the text message domain. */ + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + + /* Set default values for variables. */ + do_help = 0; + do_version = 0; + output_file = NULL; + + while ((opt + = getopt_long (argc, argv, "D:eEFhio:qsvVw:", long_options, NULL)) + != EOF) + switch (opt) + { + case '\0': /* Long option. */ + break; + + case 'D': + dir_list_append (optarg); + break; + + case 'e': + message_print_style_escape (0); + break; + + case 'E': + message_print_style_escape (1); + break; + + case 'F': + sort_by_filepos = 1; + break; + + case 'h': + do_help = 1; + break; + + case 'i': + message_print_style_indent (); + break; + + case 'o': + output_file = optarg; + break; + + case 'q': + quiet = 1; + break; + + case 's': + sort_by_msgid = 1; + break; + + case 'S': + message_print_style_uniforum (); + break; + + case 'v': + ++verbosity_level; + break; + + case 'V': + do_version = 1; + break; + + case 'w': + { + int value; + char *endp; + value = strtol (optarg, &endp, 10); + if (endp != optarg) + message_page_width_set (value); + } + break; + + default: + usage (EXIT_FAILURE); + break; + } + + /* Version information is requested. */ + if (do_version) + { + printf ("%s (GNU %s) %s\n", basename (program_name), PACKAGE, VERSION); + /* xgettext: no-wrap */ + printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\ +This is free software; see the source for copying conditions. There is NO\n\ +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ +"), + "1995, 1996, 1997, 1998"); + printf (_("Written by %s.\n"), "Peter Miller"); + exit (EXIT_SUCCESS); + } + + /* Help is requested. */ + if (do_help) + usage (EXIT_SUCCESS); + + /* Test whether we have an .po file name as argument. */ + if (optind >= argc) + { + error (EXIT_SUCCESS, 0, _("no input files given")); + usage (EXIT_FAILURE); + } + if (optind + 2 != argc) + { + error (EXIT_SUCCESS, 0, _("exactly 2 input files required")); + usage (EXIT_FAILURE); + } + + /* merge the two files */ + result = merge (argv[optind], argv[optind + 1]); + + /* Sort the results. */ + if (sort_by_filepos) + message_list_sort_by_filepos (result); + else if (sort_by_msgid) + message_list_sort_by_msgid (result); + + /* Write the merged message list out. */ + message_list_print (result, output_file, force_po, 0); + + exit (EXIT_SUCCESS); +} + + +/* Display usage information and exit. */ +static void +usage (status) + int status; +{ + if (status != EXIT_SUCCESS) + fprintf (stderr, _("Try `%s --help' for more information.\n"), + program_name); + else + { + /* xgettext: no-wrap */ + printf (_("\ +Usage: %s [OPTION] def.po ref.po\n\ +Mandatory arguments to long options are mandatory for short options too.\n\ + -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n\ + -e, --no-escape do not use C escapes in output (default)\n\ + -E, --escape use C escapes in output, no extended chars\n\ + --force-po write PO file even if empty\n\ + -h, --help display this help and exit\n\ + -i, --indent indented output style\n\ + -o, --output-file=FILE result will be written to FILE\n\ + --no-location suppress '#: filename:line' lines\n\ + --add-location preserve '#: filename:line' lines (default)\n\ + --strict strict Uniforum output style\n\ + -v, --verbose increase verbosity level\n\ + -V, --version output version information and exit\n\ + -w, --width=NUMBER set output page width\n"), + program_name); + /* xgettext: no-wrap */ + fputs (_("\n\ +Merges two Uniforum style .po files together. The def.po file is an\n\ +existing PO file with the old translations which will be taken over to\n\ +the newly created file as long as they still match; comments will be\n\ +preserved, but extract comments and file positions will be discarded.\n\ +The ref.po file is the last created PO file (generally by xgettext), any\n\ +translations or comments in the file will be discarded, however dot\n\ +comments and file positions will be preserved. Where an exact match\n\ +cannot be found, fuzzy matching is used to produce better results. The\n\ +results are written to stdout unless an output file is specified.\n"), stdout); + fputs (_("Report bugs to <[email protected]>.\n"), + stdout); + } + + exit (status); +} + + +/* The address of this function will be assigned to the hook in the + error functions. */ +static void +error_print () +{ + /* We don't want the program name to be printed in messages. Emacs' + compile.el does not like this. */ + + /* FIXME Why must this program toady to Emacs? Why can't compile.el + be enhanced to cope with a leading program name? --PMiller */ +} + + +static void +merge_constructor (that) + po_ty *that; +{ + merge_class_ty *this = (merge_class_ty *) that; + + this->mlp = message_list_alloc (); + this->domain = MESSAGE_DOMAIN_DEFAULT; + this->domain_list = string_list_alloc (); + this->comment = NULL; + this->comment_dot = NULL; + this->filepos_count = 0; + this->filepos = NULL; + this->is_fuzzy = 0; + this->is_c_format = undecided; + this->do_wrap = undecided; +} + + +static void +merge_destructor (that) + po_ty *that; +{ + merge_class_ty *this = (merge_class_ty *) that; + size_t j; + + string_list_free (this->domain_list); + /* Do not free this->mlp. */ + if (this->comment != NULL) + string_list_free (this->comment); + if (this->comment_dot != NULL) + string_list_free (this->comment_dot); + for (j = 0; j < this->filepos_count; ++j) + free (this->filepos[j].file_name); + if (this->filepos != NULL) + free (this->filepos); +} + + +static void +merge_directive_domain (that, name) + po_ty *that; + char *name; +{ + size_t j; + + merge_class_ty *this = (merge_class_ty *) that; + /* Override current domain name. Don't free memory. */ + this->domain = name; + + /* If there are accumulated comments, throw them away, they are + probably part of the file header, or about the domain directive, + and will be unrelated to the next message. */ + if (this->comment != NULL) + { + string_list_free (this->comment); + this->comment = NULL; + } + if (this->comment_dot != NULL) + { + string_list_free (this->comment_dot); + this->comment_dot = NULL; + } + for (j = 0; j < this->filepos_count; ++j) + free (this->filepos[j].file_name); + if (this->filepos != NULL) + free (this->filepos); + this->filepos_count = 0; + this->filepos = NULL; +} + + +static void +merge_directive_message (that, msgid, msgid_pos, msgstr, msgstr_pos) + po_ty *that; + char *msgid; + lex_pos_ty *msgid_pos; + char *msgstr; + lex_pos_ty *msgstr_pos; +{ + merge_class_ty *this = (merge_class_ty *) that; + message_ty *mp; + message_variant_ty *mvp; + size_t j; + + /* Remember the domain names for later. */ + string_list_append_unique (this->domain_list, this->domain); + + /* See if this message ID has been seen before. */ + mp = message_list_search (this->mlp, msgid); + if (mp) + free (msgid); + else + { + mp = message_alloc (msgid); + message_list_append (this->mlp, mp); + } + + /* Add the accumulated comments to the message. Clear the + accumulation in preparation for the next message. */ + if (this->comment != NULL) + { + for (j = 0; j < this->comment->nitems; ++j) + message_comment_append (mp, this->comment->item[j]); + string_list_free (this->comment); + this->comment = NULL; + } + if (this->comment_dot != NULL) + { + for (j = 0; j < this->comment_dot->nitems; ++j) + message_comment_dot_append (mp, this->comment_dot->item[j]); + string_list_free (this->comment_dot); + this->comment_dot = NULL; + } + for (j = 0; j < this->filepos_count; ++j) + { + lex_pos_ty *pp; + + pp = &this->filepos[j]; + message_comment_filepos (mp, pp->file_name, pp->line_number); + free (pp->file_name); + } + mp->is_fuzzy = this->is_fuzzy; + mp->is_c_format = this->is_c_format; + mp->do_wrap = this->do_wrap; + + if (this->filepos != NULL) + free (this->filepos); + this->filepos_count = 0; + this->filepos = NULL; + this->is_fuzzy = 0; + this->is_c_format = undecided; + this->do_wrap = undecided; + + /* See if this domain has been seen for this message ID. */ + mvp = message_variant_search (mp, this->domain); + if (mvp) + { + gram_error_at_line (msgid_pos, _("duplicate message definition")); + gram_error_at_line (&mvp->pos, _("\ +...this is the location of the first definition")); + free (msgstr); + } + else + message_variant_append (mp, this->domain, msgstr, msgstr_pos); +} + + +static void +merge_parse_brief (that) + po_ty *that; +{ + po_lex_pass_comments (1); +} + + +static void +merge_parse_debrief (that) + po_ty *that; +{ + merge_class_ty *this = (merge_class_ty *) that; + message_list_ty *mlp = this->mlp; + size_t j; + + /* For each domain in the used-domain-list, make sure each message + defines a msgstr in that domain. */ + for (j = 0; j < this->domain_list->nitems; ++j) + { + const char *domain_name; + size_t k; + + domain_name = this->domain_list->item[j]; + for (k = 0; k < mlp->nitems; ++k) + { + const message_ty *mp; + size_t m; + + mp = mlp->item[k]; + for (m = 0; m < mp->variant_count; ++m) + { + message_variant_ty *mvp; + + mvp = &mp->variant[m]; + if (strcmp (domain_name, mvp->domain) == 0) + break; + } + if (m >= mp->variant_count) + gram_error_at_line (&mp->variant[0].pos, _("\ +this message has no definition in the \"%s\" domain"), domain_name); + } + } +} + + +static void +merge_comment (that, s) + po_ty *that; + const char *s; +{ + merge_class_ty *this = (merge_class_ty *) that; + + if (this->comment == NULL) + this->comment = string_list_alloc (); + string_list_append (this->comment, s); +} + + +static void +merge_comment_dot (that, s) + po_ty *that; + const char *s; +{ + merge_class_ty *this = (merge_class_ty *) that; + + if (this->comment_dot == NULL) + this->comment_dot = string_list_alloc (); + string_list_append (this->comment_dot, s); +} + + +static void +merge_comment_special (that, s) + po_ty *that; + const char *s; +{ + merge_class_ty *this = (merge_class_ty *) that; + + if (strstr (s, "fuzzy") != NULL) + this->is_fuzzy = 1; + + this->is_c_format = parse_c_format_description_string (s); + this->do_wrap = parse_c_width_description_string (s); +} + + +static void +merge_comment_filepos (that, name, line) + po_ty *that; + const char *name; + int line; +{ + merge_class_ty *this = (merge_class_ty *) that; + size_t nbytes; + lex_pos_ty *pp; + + if (!line_comment) + return; + nbytes = (this->filepos_count + 1) * sizeof (this->filepos[0]); + this->filepos = xrealloc (this->filepos, nbytes); + pp = &this->filepos[this->filepos_count++]; + pp->file_name = xstrdup (name); + pp->line_number = line; +} + + +/* So that the one parser can be used for multiple programs, and also + use good data hiding and encapsulation practices, an object + oriented approach has been taken. An object instance is allocated, + and all actions resulting from the parse will be through + invokations of method functions of that object. */ + +static po_method_ty merge_methods = +{ + sizeof (merge_class_ty), + merge_constructor, + merge_destructor, + merge_directive_domain, + merge_directive_message, + merge_parse_brief, + merge_parse_debrief, + merge_comment, + merge_comment_dot, + merge_comment_filepos, + merge_comment_special +}; + + +static message_list_ty * +grammar (filename) + const char *filename; +{ + po_ty *pop; + message_list_ty *mlp; + + pop = po_alloc (&merge_methods); + po_lex_pass_obsolete_entries (1); + po_scan (pop, filename); + mlp = ((merge_class_ty *) pop)->mlp; + po_free (pop); + return mlp; +} + + +#define DOT_FREQUENCE 10 + +static message_list_ty * +merge (fn1, fn2) + const char *fn1; /* definitions */ + const char *fn2; /* references */ +{ + message_list_ty *def; + message_list_ty *ref; + message_ty *defmsg; + size_t j, k; + size_t merged, fuzzied, missing, obsolete; + message_list_ty *result; + + merged = fuzzied = missing = obsolete = 0; + + /* This is the definitions file, created by a human. */ + def = grammar (fn1); + + /* This is the references file, created by groping the sources with + the xgettext program. */ + ref = grammar (fn2); + + result = message_list_alloc (); + + /* Every reference must be matched with its definition. */ + for (j = 0; j < ref->nitems; ++j) + { + message_ty *refmsg; + + /* Because merging can take a while we print something to signal + we are not dead. */ + if (!quiet && verbosity_level <= 1 && j % DOT_FREQUENCE == 0) + fputc ('.', stderr); + + refmsg = ref->item[j]; + + /* See if it is in the other file. */ + defmsg = message_list_search (def, refmsg->msgid); + if (defmsg) + { + /* Merge the reference with the definition: take the #. and + #: comments from the reference, take the # comments from + the definition, take the msgstr from the definition. Add + this merged entry to the output message list. */ + message_ty *mp = message_merge (defmsg, refmsg); + + message_list_append (result, mp); + + /* Remember that this message has been used, when we scan + later to see if anything was omitted. */ + defmsg->used = 1; + ++merged; + continue; + } + + /* If the message was not defined at all, try to find a very + similar message, it could be a typo, or the suggestion may + help. */ + defmsg = message_list_search_fuzzy (def, refmsg->msgid); + if (defmsg) + { + message_ty *mp; + + if (verbosity_level > 1) + { + gram_error_at_line (&refmsg->variant[0].pos, _("\ +this message is used but not defined...")); + gram_error_at_line (&defmsg->variant[0].pos, _("\ +...but this definition is similar")); + } + + /* Merge the reference with the definition: take the #. and + #: comments from the reference, take the # comments from + the definition, take the msgstr from the definition. Add + this merged entry to the output message list. */ + mp = message_merge (defmsg, refmsg); + + mp->is_fuzzy = 1; + + message_list_append (result, mp); + + /* Remember that this message has been used, when we scan + later to see if anything was omitted. */ + defmsg->used = 1; + ++fuzzied; + if (!quiet && verbosity_level <= 1) + /* Always print a dot if we handled a fuzzy match. */ + fputc ('.', stderr); + } + else + { + message_ty *mp; + + if (verbosity_level > 1) + gram_error_at_line (&refmsg->variant[0].pos, _("\ +this message is used but not defined in %s"), fn1); + + mp = message_copy (refmsg); + + message_list_append (result, mp); + ++missing; + } + } + + /* Look for messages in the definition file, which are not present + in the reference file, indicating messages which defined but not + used in the program. */ + for (k = 0; k < def->nitems; ++k) + { + defmsg = def->item[k]; + if (defmsg->used) + continue; + + /* Remember the old translation although it is not used anymore. + But we mark it as obsolete. */ + defmsg->obsolete = 1; + + message_list_append (result, defmsg); + ++obsolete; + } + + /* Report some statistics. */ + if (verbosity_level > 0) + fprintf (stderr, _("%s\ +Read %d old + %d reference, \ +merged %d, fuzzied %d, missing %d, obsolete %d.\n"), + !quiet && verbosity_level <= 1 ? "\n" : "", + def->nitems, ref->nitems, merged, fuzzied, missing, obsolete); + else if (!quiet) + fputs (_(" done.\n"), stderr); + + return result; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/msgunfmt.c b/debian/gettext-kde/gettext-kde-0.10.35/src/msgunfmt.c new file mode 100644 index 00000000..920d82fe --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/msgunfmt.c @@ -0,0 +1,411 @@ +/* msgunfmt - converts binary .mo files to Uniforum style .po files + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Written by Ulrich Drepper <[email protected]>, April 1995. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <ctype.h> +#include <errno.h> +#include <getopt.h> +#include <stdio.h> +#include <sys/param.h> +#include <sys/types.h> + +#ifdef STDC_HEADERS +# include <stdlib.h> +#endif + +#ifdef HAVE_LOCALE_H +# include <locale.h> +#endif + +#include "hash.h" + +#include "error.h" +#include "getline.h" +#include "printf.h" +#include <system.h> + +#include "gettext.h" +#include "domain.h" +#include "hash-string.h" +#include <libintl.h> +#include "message.h" + +#define _(str) gettext (str) + +#ifndef errno +extern int errno; +#endif + + +/* String containing name the program is called with. */ +const char *program_name; + +/* Force output of PO file even if empty. */ +static int force_po; + +/* Long options. */ +static const struct option long_options[] = +{ + { "escape", no_argument, NULL, 'E' }, + { "force-po", no_argument, &force_po, 1 }, + { "help", no_argument, NULL, 'h' }, + { "indent", no_argument, NULL, 'i' }, + { "no-escape", no_argument, NULL, 'e' }, + { "output-file", required_argument, NULL, 'o' }, + { "strict", no_argument, NULL, 'S' }, + { "version", no_argument, NULL, 'V' }, + { "width", required_argument, NULL, 'w', }, + { NULL, 0, NULL, 0 } +}; + + +/* This defines the byte order within the file. It needs to be set + appropriately once we have the file open. */ +static enum { MO_LITTLE_ENDIAN, MO_BIG_ENDIAN } endian; + + +/* Prototypes for local functions. */ +static void usage PARAMS ((int __status)); +static void error_print PARAMS ((void)); +static nls_uint32 read32 PARAMS ((FILE *__fp, const char *__fn)); +static void seek32 PARAMS ((FILE *__fp, const char *__fn, long __offset)); +static char *string32 PARAMS ((FILE *__fp, const char *__fn, long __offset)); +static message_list_ty *read_mo_file PARAMS ((message_list_ty *__mlp, + const char *__fn)); + + +int +main (argc, argv) + int argc; + char **argv; +{ + int optchar; + int do_help = 0; + int do_version = 0; + const char *output_file = "-"; + message_list_ty *mlp = NULL; + + /* Set program name for messages. */ + program_name = argv[0]; + error_print_progname = error_print; + +#ifdef HAVE_SETLOCALE + /* Set locale via LC_ALL. */ + setlocale (LC_ALL, ""); +#endif + + /* Set the text message domain. */ + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + + while ((optchar = getopt_long (argc, argv, "hio:Vw:", long_options, NULL)) + != EOF) + switch (optchar) + { + case '\0': + /* long option */ + break; + + case 'e': + message_print_style_escape (0); + break; + + case 'E': + message_print_style_escape (1); + break; + + case 'h': + do_help = 1; + break; + + case 'i': + message_print_style_indent (); + break; + + case 'o': + output_file = optarg; + break; + + case 'S': + message_print_style_uniforum (); + break; + + case 'V': + do_version = 1; + break; + + case 'w': + { + int value; + char *endp; + value = strtol (optarg, &endp, 10); + if (endp != optarg) + message_page_width_set (value); + } + break; + + default: + usage (EXIT_FAILURE); + break; + } + + /* Version information is requested. */ + if (do_version) + { + printf ("%s (GNU %s) %s\n", basename (program_name), PACKAGE, VERSION); + /* xgettext: no-wrap */ + printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\ +This is free software; see the source for copying conditions. There is NO\n\ +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ +"), + "1995, 1996, 1997, 1998"); + printf (_("Written by %s.\n"), "Ulrich Drepper"); + exit (EXIT_SUCCESS); + } + + /* Help is requested. */ + if (do_help) + usage (EXIT_SUCCESS); + + /* Read the given .mo file. */ + if (optind < argc) + do + mlp = read_mo_file (mlp, argv[optind]); + while (++optind < argc); + else + mlp = read_mo_file (NULL, "-"); + + /* Write the resulting message list to the given .po file. */ + message_list_print (mlp, output_file, force_po, 0); + + /* No problems. */ + exit (EXIT_SUCCESS); +} + + +/* Display usage information and exit. */ +static void +usage (status) + int status; +{ + if (status != EXIT_SUCCESS) + fprintf (stderr, _("Try `%s --help' for more information.\n"), + program_name); + else + { + /* xgettext: no-wrap */ + printf (_("\ +Usage: %s [OPTION] [FILE]...\n\ +Mandatory arguments to long options are mandatory for short options too.\n\ + -e, --no-escape do not use C escapes in output (default)\n\ + -E, --escape use C escapes in output, no extended chars\n\ + --force-po write PO file even if empty\n\ + -h, --help display this help and exit\n\ + -i, --indent write indented output style\n\ + -o, --output-file=FILE write output into FILE instead of standard output\n\ + --strict write strict uniforum style\n\ + -V, --version output version information and exit\n\ + -w, --width=NUMBER set output page width\n"), + program_name); + /* xgettext: no-wrap */ + fputs (_("\n\ +Convert binary .mo files to Uniforum style .po files.\n\ +Both little-endian and big-endian .mo files are handled.\n\ +If no input file is given or it is -, standard input is read.\n\ +By default the output is written to standard output.\n"), stdout); + fputs (_("Report bugs to <[email protected]>.\n"), + stdout); + } + + exit (status); +} + + +/* The address of this function will be assigned to the hook in the error + functions. */ +static void +error_print () +{ + /* We don't want the program name to be printed in messages. Emacs' + compile.el does not like this. */ +} + + +/* This function reads a 32-bit number from the file, and assembles it + according to the current ``endian'' setting. */ +static nls_uint32 +read32 (fp, fn) + FILE *fp; + const char *fn; +{ + int c1, c2, c3, c4; + + c1 = getc (fp); + if (c1 == EOF) + { + bomb: + if (ferror (fp)) + error (EXIT_FAILURE, errno, _("error while reading \"%s\""), fn); + error (EXIT_FAILURE, 0, _("file \"%s\" truncated"), fn); + } + c2 = getc (fp); + if (c2 == EOF) + goto bomb; + c3 = getc (fp); + if (c3 == EOF) + goto bomb; + c4 = getc (fp); + if (c4 == EOF) + goto bomb; + if (endian == MO_LITTLE_ENDIAN) + return (((nls_uint32) c1) + | ((nls_uint32) c2 << 8) + | ((nls_uint32) c3 << 16) + | ((nls_uint32) c4 << 24)); + + return (((nls_uint32) c1 << 24) + | ((nls_uint32) c2 << 16) + | ((nls_uint32) c3 << 8) + | ((nls_uint32) c4)); +} + + +static void +seek32 (fp, fn, offset) + FILE *fp; + const char *fn; + long offset; +{ + if (fseek (fp, offset, 0) < 0) + error (EXIT_FAILURE, errno, _("seek \"%s\" offset %ld failed"), + fn, offset); +} + + +static char * +string32 (fp, fn, offset) + FILE *fp; + const char *fn; + long offset; +{ + long length; + char *buffer; + long n; + + /* Read the string_desc structure, describing where in the file to + find the string. */ + seek32 (fp, fn, offset); + length = read32 (fp, fn); + offset = read32 (fp, fn); + + /* Allocate memory for the string to be read into. Leave space for + the NUL on the end. */ + buffer = xmalloc (length + 1); + + /* Read in the string. Complain if there is an error or it comes up + short. Add the NUL ourselves. */ + seek32 (fp, fn, offset); + n = fread (buffer, 1, length, fp); + if (n != length) + { + if (ferror (fp)) + error (EXIT_FAILURE, errno, _("error while reading \"%s\""), fn); + error (EXIT_FAILURE, 0, _("file \"%s\" truncated"), fn); + } + buffer[length] = 0; + + /* Return the string to the caller. */ + return buffer; +} + + +/* This function reads and existing .mo file. Return a message list. */ +static message_list_ty * +read_mo_file (mlp, fn) + message_list_ty *mlp; + const char *fn; +{ + FILE *fp; + struct mo_file_header header; + int j; + + if (strcmp (fn, "-") == 0 || strcmp (fn, "/dev/stdout") == 0) + fp = stdin; + else + { + fp = fopen (fn, "rb"); + if (fp == NULL) + error (EXIT_FAILURE, errno, + _("error while opening \"%s\" for reading"), fn); + } + + /* We must grope the file to determine which endian it is. + Perversity of the universe tends towards maximum, so it will + probably not match the currently executing architecture. */ + endian = MO_BIG_ENDIAN; + header.magic = read32 (fp, fn); + if (header.magic != _MAGIC) + { + endian = MO_LITTLE_ENDIAN; + seek32 (fp, fn, 0L); + header.magic = read32 (fp, fn); + if (header.magic != _MAGIC) + { + unrecognised: + error (EXIT_FAILURE, 0, _("file \"%s\" is not in GNU .mo format"), + fn); + } + } + + /* Fill the structure describing the header. */ + header.revision = read32 (fp, fn); + if (header.revision != MO_REVISION_NUMBER) + goto unrecognised; + header.nstrings = read32 (fp, fn); + header.orig_tab_offset = read32 (fp, fn); + header.trans_tab_offset = read32 (fp, fn); + header.hash_tab_size = read32 (fp, fn); + header.hash_tab_offset = read32 (fp, fn); + + if (mlp == NULL) + mlp = message_list_alloc (); + for (j = 0; j < header.nstrings; ++j) + { + static lex_pos_ty pos = { __FILE__, __LINE__ }; + message_ty *mp; + char *msgid; + char *msgstr; + + /* Read the msgid. */ + msgid = string32 (fp, fn, header.orig_tab_offset + j * 8); + + /* Read the msgstr. */ + msgstr = string32 (fp, fn, header.trans_tab_offset + j * 8); + + mp = message_alloc (msgid); + message_variant_append (mp, MESSAGE_DOMAIN_DEFAULT, msgstr, &pos); + message_list_append (mlp, mp); + } + + if (fp != stdin) + fclose (fp); + return mlp; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/open-po.c b/debian/gettext-kde/gettext-kde-0.10.35/src/open-po.c new file mode 100644 index 00000000..aad7e619 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/open-po.c @@ -0,0 +1,131 @@ +/* open-po - search for .po file along search path list and open for reading + Copyright (C) 1995, 1996 Free Software Foundation, Inc. + Written by Ulrich Drepper <[email protected]>, April 1995. + +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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <errno.h> +#include <stdio.h> +#include <sys/types.h> + +#ifdef STDC_HEADERS +# include <stdlib.h> +#endif + +#if defined STDC_HEADERS || HAVE_STRING_H +# include <string.h> +#else +# include <strings.h> +#endif + +#include "dir-list.h" +#include "error.h" +#include "system.h" + +#include <libintl.h> + +#define _(str) gettext (str) + +#ifndef errno +extern int errno; +#endif + +/* Prototypes for helper functions. */ +extern char *xstrdup PARAMS ((const char *string)); + +/* This macro is used to determine the number of elements in an erray. */ +#define SIZEOF(a) (sizeof(a)/sizeof(a[0])) + +/* Open the input file with the name INPUT_NAME. The ending .po is added + if necessary. If INPUT_NAME is not an absolute file name and the file is + not found, the list of directories in INPUT_PATH_LIST is searched. */ +FILE * +open_po_file (input_name, file_name) + const char *input_name; + char **file_name; +{ + static const char *extension[] = { "", ".po", ".pot", }; + FILE *ret_val; + int j, k; + const char *dir; + const char *ext; + + if (strcmp (input_name, "-") == 0 || strcmp (input_name, "/dev/stdin") == 0) + { + *file_name = xstrdup (_("<stdin>")); + return stdin; + } + + /* We have a real name for the input file. If the name is absolute, + try the various extensions, but ignore the directory search list. */ + if (*input_name == '/') + { + for (k = 0; k < SIZEOF (extension); ++k) + { + ext = extension[k]; + *file_name = xmalloc (strlen (input_name) + strlen (ext) + 1); + stpcpy (stpcpy (*file_name, input_name), ext); + + ret_val = fopen (*file_name, "r"); + if (ret_val != NULL || errno != ENOENT) + /* We found the file. */ + return ret_val; + + free (*file_name); + } + + /* File does not exist. */ + *file_name = xstrdup (input_name); + errno = ENOENT; + return NULL; + } + + /* For relative file names, look through the directory search list, + trying the various extensions. If no directory search list is + specified, the current directory is used. */ + for (j = 0; (dir = dir_list_nth (j)) != NULL; ++j) + for (k = 0; k < SIZEOF (extension); ++k) + { + ext = extension[k]; + if (dir[0] == '.' && dir[1] == '\0') + { + *file_name = xmalloc (strlen(input_name) + strlen(ext) + 1); + stpcpy (stpcpy (*file_name, input_name), ext); + } + else + { + *file_name = xmalloc (strlen (dir) + strlen (input_name) + + strlen (ext) + 2); + stpcpy (stpcpy (stpcpy (stpcpy (*file_name, dir), "/"), + input_name), + ext); + } + + ret_val = fopen (*file_name, "r"); + if (ret_val != NULL || errno != ENOENT) + return ret_val; + + free (*file_name); + } + + /* File does not exist. */ + *file_name = xstrdup (input_name); + errno = ENOENT; + return NULL; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/po-gram.gen.c b/debian/gettext-kde/gettext-kde-0.10.35/src/po-gram.gen.c new file mode 100644 index 00000000..7ac7fa62 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/po-gram.gen.c @@ -0,0 +1,912 @@ + +/* A Bison parser, made from ../../src/po-gram.y + by GNU Bison version 1.25 + */ + +#define po_gram_BISON 1 /* Identify Bison output. */ + +#define COMMENT 258 +#define DOMAIN 259 +#define JUNK 260 +#define MSGID 261 +#define MSGSTR 262 +#define NAME 263 +#define NUMBER 264 +#define STRING 265 + +#line 20 "../../src/po-gram.y" + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <stdio.h> + +#include "po-lex.h" +#include "po-gram.h" +#include "error.h" +#include "system.h" +#include <libintl.h> +#include "po.h" + +#define _(str) gettext (str) + +#line 46 "../../src/po-gram.y" +typedef union +{ + char *string; + long number; + lex_pos_ty pos; +} po_gram_STYPE; +#include <stdio.h> + +#ifndef __cplusplus +#ifndef __STDC__ +#define const +#endif +#endif + + + +#define po_gram_FINAL 18 +#define po_gram_FLAG -32768 +#define po_gram_NTBASE 11 + +#define po_gram_TRANSLATE(x) ((unsigned)(x) <= 265 ? po_gram_translate[x] : 18) + +static const char po_gram_translate[] = { 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10 +}; + +#if po_gram_DEBUG != 0 +static const short po_gram_prhs[] = { 0, + 0, 1, 4, 7, 10, 13, 16, 21, 24, 26, + 28, 30, 33 +}; + +static const short po_gram_rhs[] = { -1, + 11, 17, 0, 11, 12, 0, 11, 13, 0, 11, + 1, 0, 4, 10, 0, 14, 16, 15, 16, 0, + 14, 16, 0, 6, 0, 7, 0, 10, 0, 16, + 10, 0, 3, 0 +}; + +#endif + +#if po_gram_DEBUG != 0 +static const short po_gram_rline[] = { 0, + 62, 63, 64, 65, 66, 70, 77, 81, 89, 96, + 103, 107, 122 +}; +#endif + + +#if po_gram_DEBUG != 0 || defined (po_gram_ERROR_VERBOSE) + +static const char * const po_gram_tname[] = { "$","error","$undefined.","COMMENT", +"DOMAIN","JUNK","MSGID","MSGSTR","NAME","NUMBER","STRING","msgfmt","domain", +"message","msgid","msgstr","string_list","comment", NULL +}; +#endif + +static const short po_gram_r1[] = { 0, + 11, 11, 11, 11, 11, 12, 13, 13, 14, 15, + 16, 16, 17 +}; + +static const short po_gram_r2[] = { 0, + 0, 2, 2, 2, 2, 2, 4, 2, 1, 1, + 1, 2, 1 +}; + +static const short po_gram_defact[] = { 1, + 0, 5, 13, 0, 9, 3, 4, 0, 2, 6, + 11, 8, 10, 12, 0, 7, 0, 0 +}; + +static const short po_gram_defgoto[] = { 1, + 6, 7, 8, 15, 12, 9 +}; + +static const short po_gram_pact[] = {-32768, + 0,-32768,-32768, -3,-32768,-32768,-32768, -2,-32768,-32768, +-32768, -5,-32768,-32768, -2, -1, 10,-32768 +}; + +static const short po_gram_pgoto[] = {-32768, +-32768,-32768,-32768,-32768, -4,-32768 +}; + + +#define po_gram_LAST 11 + + +static const short po_gram_table[] = { 17, + 2, 13, 3, 4, 14, 5, 10, 11, 14, 18, + 16 +}; + +static const short po_gram_check[] = { 0, + 1, 7, 3, 4, 10, 6, 10, 10, 10, 0, + 15 +}; +/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ +#line 3 "/usr/lib/bison.simple" + +/* Skeleton output parser for bison, + Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +#ifndef alloca +#ifdef __GNUC__ +#define alloca __builtin_alloca +#else /* not GNU C. */ +#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) +#include <alloca.h> +#else /* not sparc */ +#if defined (MSDOS) && !defined (__TURBOC__) +#include <malloc.h> +#else /* not MSDOS, or __TURBOC__ */ +#if defined(_AIX) +#include <malloc.h> + #pragma alloca +#else /* not MSDOS, __TURBOC__, or _AIX */ +#ifdef __hpux +#ifdef __cplusplus +extern "C" { +void *alloca (unsigned int); +}; +#else /* not __cplusplus */ +void *alloca (); +#endif /* not __cplusplus */ +#endif /* __hpux */ +#endif /* not _AIX */ +#endif /* not MSDOS, or __TURBOC__ */ +#endif /* not sparc. */ +#endif /* not GNU C. */ +#endif /* alloca not defined. */ + +/* This is the parser code that is written into each bison parser + when the %semantic_parser declaration is not specified in the grammar. + It was written by Richard Stallman by simplifying the hairy parser + used when %semantic_parser is specified. */ + +/* Note: there must be only one dollar sign in this file. + It is replaced by the list of actions, each action + as one case of the switch. */ + +#define po_gram_errok (po_gram_errstatus = 0) +#define po_gram_clearin (po_gram_char = po_gram_EMPTY) +#define po_gram_EMPTY -2 +#define po_gram_EOF 0 +#define po_gram_ACCEPT return(0) +#define po_gram_ABORT return(1) +#define po_gram_ERROR goto po_gram_errlab1 +/* Like po_gram_ERROR except do call po_gram_error. + This remains here temporarily to ease the + transition to the new meaning of po_gram_ERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ +#define po_gram_FAIL goto po_gram_errlab +#define po_gram_RECOVERING() (!!po_gram_errstatus) +#define po_gram_BACKUP(token, value) \ +do \ + if (po_gram_char == po_gram_EMPTY && po_gram_len == 1) \ + { po_gram_char = (token), po_gram_lval = (value); \ + po_gram_char1 = po_gram_TRANSLATE (po_gram_char); \ + po_gram_POPSTACK; \ + goto po_gram_backup; \ + } \ + else \ + { po_gram_error ("syntax error: cannot back up"); po_gram_ERROR; } \ +while (0) + +#define po_gram_TERROR 1 +#define po_gram_ERRCODE 256 + +#ifndef po_gram_PURE +#define po_gram_LEX po_gram_lex() +#endif + +#ifdef po_gram_PURE +#ifdef po_gram_LSP_NEEDED +#ifdef po_gram_LEX_PARAM +#define po_gram_LEX po_gram_lex(&po_gram_lval, &po_gram_lloc, po_gram_LEX_PARAM) +#else +#define po_gram_LEX po_gram_lex(&po_gram_lval, &po_gram_lloc) +#endif +#else /* not po_gram_LSP_NEEDED */ +#ifdef po_gram_LEX_PARAM +#define po_gram_LEX po_gram_lex(&po_gram_lval, po_gram_LEX_PARAM) +#else +#define po_gram_LEX po_gram_lex(&po_gram_lval) +#endif +#endif /* not po_gram_LSP_NEEDED */ +#endif + +/* If nonreentrant, generate the variables here */ + +#ifndef po_gram_PURE + +int po_gram_char; /* the lookahead symbol */ +po_gram_STYPE po_gram_lval; /* the semantic value of the */ + /* lookahead symbol */ + +#ifdef po_gram_LSP_NEEDED +po_gram_LTYPE po_gram_lloc; /* location data for the lookahead */ + /* symbol */ +#endif + +int po_gram_nerrs; /* number of parse errors so far */ +#endif /* not po_gram_PURE */ + +#if po_gram_DEBUG != 0 +int po_gram_debug; /* nonzero means print parse trace */ +/* Since this is uninitialized, it does not stop multiple parsers + from coexisting. */ +#endif + +/* po_gram_INITDEPTH indicates the initial size of the parser's stacks */ + +#ifndef po_gram_INITDEPTH +#define po_gram_INITDEPTH 200 +#endif + +/* po_gram_MAXDEPTH is the maximum size the stacks can grow to + (effective only if the built-in stack extension method is used). */ + +#if po_gram_MAXDEPTH == 0 +#undef po_gram_MAXDEPTH +#endif + +#ifndef po_gram_MAXDEPTH +#define po_gram_MAXDEPTH 10000 +#endif + +/* Prevent warning if -Wstrict-prototypes. */ +#ifdef __GNUC__ +int po_gram_parse (void); +#endif + +#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ +#define __po_gram__memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) +#else /* not GNU C or C++ */ +#ifndef __cplusplus + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__po_gram__memcpy (to, from, count) + char *to; + char *from; + int count; +{ + register char *f = from; + register char *t = to; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#else /* __cplusplus */ + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__po_gram__memcpy (char *to, char *from, int count) +{ + register char *f = from; + register char *t = to; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#endif +#endif + +#line 196 "/usr/lib/bison.simple" + +/* The user can define po_gram_PARSE_PARAM as the name of an argument to be passed + into po_gram_parse. The argument should have type void *. + It should actually point to an object. + Grammar actions can access the variable by casting it + to the proper pointer type. */ + +#ifdef po_gram_PARSE_PARAM +#ifdef __cplusplus +#define po_gram_PARSE_PARAM_ARG void *po_gram_PARSE_PARAM +#define po_gram_PARSE_PARAM_DECL +#else /* not __cplusplus */ +#define po_gram_PARSE_PARAM_ARG po_gram_PARSE_PARAM +#define po_gram_PARSE_PARAM_DECL void *po_gram_PARSE_PARAM; +#endif /* not __cplusplus */ +#else /* not po_gram_PARSE_PARAM */ +#define po_gram_PARSE_PARAM_ARG +#define po_gram_PARSE_PARAM_DECL +#endif /* not po_gram_PARSE_PARAM */ + +int +po_gram_parse(po_gram_PARSE_PARAM_ARG) + po_gram_PARSE_PARAM_DECL +{ + register int po_gram_state; + register int po_gram_n; + register short *po_gram_ssp; + register po_gram_STYPE *po_gram_vsp; + int po_gram_errstatus; /* number of tokens to shift before error messages enabled */ + int po_gram_char1 = 0; /* lookahead token as an internal (translated) token number */ + + short po_gram_ssa[po_gram_INITDEPTH]; /* the state stack */ + po_gram_STYPE po_gram_vsa[po_gram_INITDEPTH]; /* the semantic value stack */ + + short *po_gram_ss = po_gram_ssa; /* refer to the stacks thru separate pointers */ + po_gram_STYPE *po_gram_vs = po_gram_vsa; /* to allow po_gram_overflow to reallocate them elsewhere */ + +#ifdef po_gram_LSP_NEEDED + po_gram_LTYPE po_gram_lsa[po_gram_INITDEPTH]; /* the location stack */ + po_gram_LTYPE *po_gram_ls = po_gram_lsa; + po_gram_LTYPE *po_gram_lsp; + +#define po_gram_POPSTACK (po_gram_vsp--, po_gram_ssp--, po_gram_lsp--) +#else +#define po_gram_POPSTACK (po_gram_vsp--, po_gram_ssp--) +#endif + + int po_gram_stacksize = po_gram_INITDEPTH; + +#ifdef po_gram_PURE + int po_gram_char; + po_gram_STYPE po_gram_lval; + int po_gram_nerrs; +#ifdef po_gram_LSP_NEEDED + po_gram_LTYPE po_gram_lloc; +#endif +#endif + + po_gram_STYPE po_gram_val; /* the variable used to return */ + /* semantic values from the action */ + /* routines */ + + int po_gram_len; + +#if po_gram_DEBUG != 0 + if (po_gram_debug) + fprintf(stderr, "Starting parse\n"); +#endif + + po_gram_state = 0; + po_gram_errstatus = 0; + po_gram_nerrs = 0; + po_gram_char = po_gram_EMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + po_gram_ssp = po_gram_ss - 1; + po_gram_vsp = po_gram_vs; +#ifdef po_gram_LSP_NEEDED + po_gram_lsp = po_gram_ls; +#endif + +/* Push a new state, which is found in po_gram_state . */ +/* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. */ +po_gram_newstate: + + *++po_gram_ssp = po_gram_state; + + if (po_gram_ssp >= po_gram_ss + po_gram_stacksize - 1) + { + /* Give user a chance to reallocate the stack */ + /* Use copies of these so that the &'s don't force the real ones into memory. */ + po_gram_STYPE *po_gram_vs1 = po_gram_vs; + short *po_gram_ss1 = po_gram_ss; +#ifdef po_gram_LSP_NEEDED + po_gram_LTYPE *po_gram_ls1 = po_gram_ls; +#endif + + /* Get the current used size of the three stacks, in elements. */ + int size = po_gram_ssp - po_gram_ss + 1; + +#ifdef po_gram_overflow + /* Each stack pointer address is followed by the size of + the data in use in that stack, in bytes. */ +#ifdef po_gram_LSP_NEEDED + /* This used to be a conditional around just the two extra args, + but that might be undefined if po_gram_overflow is a macro. */ + po_gram_overflow("parser stack overflow", + &po_gram_ss1, size * sizeof (*po_gram_ssp), + &po_gram_vs1, size * sizeof (*po_gram_vsp), + &po_gram_ls1, size * sizeof (*po_gram_lsp), + &po_gram_stacksize); +#else + po_gram_overflow("parser stack overflow", + &po_gram_ss1, size * sizeof (*po_gram_ssp), + &po_gram_vs1, size * sizeof (*po_gram_vsp), + &po_gram_stacksize); +#endif + + po_gram_ss = po_gram_ss1; po_gram_vs = po_gram_vs1; +#ifdef po_gram_LSP_NEEDED + po_gram_ls = po_gram_ls1; +#endif +#else /* no po_gram_overflow */ + /* Extend the stack our own way. */ + if (po_gram_stacksize >= po_gram_MAXDEPTH) + { + po_gram_error("parser stack overflow"); + return 2; + } + po_gram_stacksize *= 2; + if (po_gram_stacksize > po_gram_MAXDEPTH) + po_gram_stacksize = po_gram_MAXDEPTH; + po_gram_ss = (short *) alloca (po_gram_stacksize * sizeof (*po_gram_ssp)); + __po_gram__memcpy ((char *)po_gram_ss, (char *)po_gram_ss1, size * sizeof (*po_gram_ssp)); + po_gram_vs = (po_gram_STYPE *) alloca (po_gram_stacksize * sizeof (*po_gram_vsp)); + __po_gram__memcpy ((char *)po_gram_vs, (char *)po_gram_vs1, size * sizeof (*po_gram_vsp)); +#ifdef po_gram_LSP_NEEDED + po_gram_ls = (po_gram_LTYPE *) alloca (po_gram_stacksize * sizeof (*po_gram_lsp)); + __po_gram__memcpy ((char *)po_gram_ls, (char *)po_gram_ls1, size * sizeof (*po_gram_lsp)); +#endif +#endif /* no po_gram_overflow */ + + po_gram_ssp = po_gram_ss + size - 1; + po_gram_vsp = po_gram_vs + size - 1; +#ifdef po_gram_LSP_NEEDED + po_gram_lsp = po_gram_ls + size - 1; +#endif + +#if po_gram_DEBUG != 0 + if (po_gram_debug) + fprintf(stderr, "Stack size increased to %d\n", po_gram_stacksize); +#endif + + if (po_gram_ssp >= po_gram_ss + po_gram_stacksize - 1) + po_gram_ABORT; + } + +#if po_gram_DEBUG != 0 + if (po_gram_debug) + fprintf(stderr, "Entering state %d\n", po_gram_state); +#endif + + goto po_gram_backup; + po_gram_backup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* po_gram_resume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + po_gram_n = po_gram_pact[po_gram_state]; + if (po_gram_n == po_gram_FLAG) + goto po_gram_default; + + /* Not known => get a lookahead token if don't already have one. */ + + /* po_gram_char is either po_gram_EMPTY or po_gram_EOF + or a valid token in external form. */ + + if (po_gram_char == po_gram_EMPTY) + { +#if po_gram_DEBUG != 0 + if (po_gram_debug) + fprintf(stderr, "Reading a token: "); +#endif + po_gram_char = po_gram_LEX; + } + + /* Convert token to internal form (in po_gram_char1) for indexing tables with */ + + if (po_gram_char <= 0) /* This means end of input. */ + { + po_gram_char1 = 0; + po_gram_char = po_gram_EOF; /* Don't call po_gram_LEX any more */ + +#if po_gram_DEBUG != 0 + if (po_gram_debug) + fprintf(stderr, "Now at end of input.\n"); +#endif + } + else + { + po_gram_char1 = po_gram_TRANSLATE(po_gram_char); + +#if po_gram_DEBUG != 0 + if (po_gram_debug) + { + fprintf (stderr, "Next token is %d (%s", po_gram_char, po_gram_tname[po_gram_char1]); + /* Give the individual parser a way to print the precise meaning + of a token, for further debugging info. */ +#ifdef po_gram_PRINT + po_gram_PRINT (stderr, po_gram_char, po_gram_lval); +#endif + fprintf (stderr, ")\n"); + } +#endif + } + + po_gram_n += po_gram_char1; + if (po_gram_n < 0 || po_gram_n > po_gram_LAST || po_gram_check[po_gram_n] != po_gram_char1) + goto po_gram_default; + + po_gram_n = po_gram_table[po_gram_n]; + + /* po_gram_n is what to do for this token type in this state. + Negative => reduce, -po_gram_n is rule number. + Positive => shift, po_gram_n is new state. + New state is final state => don't bother to shift, + just return success. + 0, or most negative number => error. */ + + if (po_gram_n < 0) + { + if (po_gram_n == po_gram_FLAG) + goto po_gram_errlab; + po_gram_n = -po_gram_n; + goto po_gram_reduce; + } + else if (po_gram_n == 0) + goto po_gram_errlab; + + if (po_gram_n == po_gram_FINAL) + po_gram_ACCEPT; + + /* Shift the lookahead token. */ + +#if po_gram_DEBUG != 0 + if (po_gram_debug) + fprintf(stderr, "Shifting token %d (%s), ", po_gram_char, po_gram_tname[po_gram_char1]); +#endif + + /* Discard the token being shifted unless it is eof. */ + if (po_gram_char != po_gram_EOF) + po_gram_char = po_gram_EMPTY; + + *++po_gram_vsp = po_gram_lval; +#ifdef po_gram_LSP_NEEDED + *++po_gram_lsp = po_gram_lloc; +#endif + + /* count tokens shifted since error; after three, turn off error status. */ + if (po_gram_errstatus) po_gram_errstatus--; + + po_gram_state = po_gram_n; + goto po_gram_newstate; + +/* Do the default action for the current state. */ +po_gram_default: + + po_gram_n = po_gram_defact[po_gram_state]; + if (po_gram_n == 0) + goto po_gram_errlab; + +/* Do a reduction. po_gram_n is the number of a rule to reduce with. */ +po_gram_reduce: + po_gram_len = po_gram_r2[po_gram_n]; + if (po_gram_len > 0) + po_gram_val = po_gram_vsp[1-po_gram_len]; /* implement default value of the action */ + +#if po_gram_DEBUG != 0 + if (po_gram_debug) + { + int i; + + fprintf (stderr, "Reducing via rule %d (line %d), ", + po_gram_n, po_gram_rline[po_gram_n]); + + /* Print the symbols being reduced, and their result. */ + for (i = po_gram_prhs[po_gram_n]; po_gram_rhs[i] > 0; i++) + fprintf (stderr, "%s ", po_gram_tname[po_gram_rhs[i]]); + fprintf (stderr, " -> %s\n", po_gram_tname[po_gram_r1[po_gram_n]]); + } +#endif + + + switch (po_gram_n) { + +case 6: +#line 71 "../../src/po-gram.y" +{ + po_callback_domain (po_gram_vsp[0].string); + ; + break;} +case 7: +#line 78 "../../src/po-gram.y" +{ + po_callback_message (po_gram_vsp[-2].string, &po_gram_vsp[-3].pos, po_gram_vsp[0].string, &po_gram_vsp[-1].pos); + ; + break;} +case 8: +#line 82 "../../src/po-gram.y" +{ + gram_error_at_line (&po_gram_vsp[-1].pos, _("missing `msgstr' section")); + free (po_gram_vsp[0].string); + ; + break;} +case 9: +#line 90 "../../src/po-gram.y" +{ + po_gram_val.pos = gram_pos; + ; + break;} +case 10: +#line 97 "../../src/po-gram.y" +{ + po_gram_val.pos = gram_pos; + ; + break;} +case 11: +#line 104 "../../src/po-gram.y" +{ + po_gram_val.string = po_gram_vsp[0].string; + ; + break;} +case 12: +#line 108 "../../src/po-gram.y" +{ + size_t len1; + size_t len2; + + len1 = strlen (po_gram_vsp[-1].string); + len2 = strlen (po_gram_vsp[0].string); + po_gram_val.string = (char *) xmalloc (len1 + len2 + 1); + stpcpy (stpcpy (po_gram_val.string, po_gram_vsp[-1].string), po_gram_vsp[0].string); + free (po_gram_vsp[-1].string); + free (po_gram_vsp[0].string); + ; + break;} +case 13: +#line 123 "../../src/po-gram.y" +{ + po_callback_comment (po_gram_vsp[0].string); + ; + break;} +} + /* the action file gets copied in in place of this dollarsign */ +#line 498 "/usr/lib/bison.simple" + + po_gram_vsp -= po_gram_len; + po_gram_ssp -= po_gram_len; +#ifdef po_gram_LSP_NEEDED + po_gram_lsp -= po_gram_len; +#endif + +#if po_gram_DEBUG != 0 + if (po_gram_debug) + { + short *ssp1 = po_gram_ss - 1; + fprintf (stderr, "state stack now"); + while (ssp1 != po_gram_ssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + + *++po_gram_vsp = po_gram_val; + +#ifdef po_gram_LSP_NEEDED + po_gram_lsp++; + if (po_gram_len == 0) + { + po_gram_lsp->first_line = po_gram_lloc.first_line; + po_gram_lsp->first_column = po_gram_lloc.first_column; + po_gram_lsp->last_line = (po_gram_lsp-1)->last_line; + po_gram_lsp->last_column = (po_gram_lsp-1)->last_column; + po_gram_lsp->text = 0; + } + else + { + po_gram_lsp->last_line = (po_gram_lsp+po_gram_len-1)->last_line; + po_gram_lsp->last_column = (po_gram_lsp+po_gram_len-1)->last_column; + } +#endif + + /* Now "shift" the result of the reduction. + Determine what state that goes to, + based on the state we popped back to + and the rule number reduced by. */ + + po_gram_n = po_gram_r1[po_gram_n]; + + po_gram_state = po_gram_pgoto[po_gram_n - po_gram_NTBASE] + *po_gram_ssp; + if (po_gram_state >= 0 && po_gram_state <= po_gram_LAST && po_gram_check[po_gram_state] == *po_gram_ssp) + po_gram_state = po_gram_table[po_gram_state]; + else + po_gram_state = po_gram_defgoto[po_gram_n - po_gram_NTBASE]; + + goto po_gram_newstate; + +po_gram_errlab: /* here on detecting error */ + + if (! po_gram_errstatus) + /* If not already recovering from an error, report this error. */ + { + ++po_gram_nerrs; + +#ifdef po_gram_ERROR_VERBOSE + po_gram_n = po_gram_pact[po_gram_state]; + + if (po_gram_n > po_gram_FLAG && po_gram_n < po_gram_LAST) + { + int size = 0; + char *msg; + int x, count; + + count = 0; + /* Start X at -po_gram_n if nec to avoid negative indexes in po_gram_check. */ + for (x = (po_gram_n < 0 ? -po_gram_n : 0); + x < (sizeof(po_gram_tname) / sizeof(char *)); x++) + if (po_gram_check[x + po_gram_n] == x) + size += strlen(po_gram_tname[x]) + 15, count++; + msg = (char *) malloc(size + 15); + if (msg != 0) + { + strcpy(msg, "parse error"); + + if (count < 5) + { + count = 0; + for (x = (po_gram_n < 0 ? -po_gram_n : 0); + x < (sizeof(po_gram_tname) / sizeof(char *)); x++) + if (po_gram_check[x + po_gram_n] == x) + { + strcat(msg, count == 0 ? ", expecting `" : " or `"); + strcat(msg, po_gram_tname[x]); + strcat(msg, "'"); + count++; + } + } + po_gram_error(msg); + free(msg); + } + else + po_gram_error ("parse error; also virtual memory exceeded"); + } + else +#endif /* po_gram_ERROR_VERBOSE */ + po_gram_error("parse error"); + } + + goto po_gram_errlab1; +po_gram_errlab1: /* here on error raised explicitly by an action */ + + if (po_gram_errstatus == 3) + { + /* if just tried and failed to reuse lookahead token after an error, discard it. */ + + /* return failure if at end of input */ + if (po_gram_char == po_gram_EOF) + po_gram_ABORT; + +#if po_gram_DEBUG != 0 + if (po_gram_debug) + fprintf(stderr, "Discarding token %d (%s).\n", po_gram_char, po_gram_tname[po_gram_char1]); +#endif + + po_gram_char = po_gram_EMPTY; + } + + /* Else will try to reuse lookahead token + after shifting the error token. */ + + po_gram_errstatus = 3; /* Each real token shifted decrements this */ + + goto po_gram_errhandle; + +po_gram_errdefault: /* current state does not do anything special for the error token. */ + +#if 0 + /* This is wrong; only states that explicitly want error tokens + should shift them. */ + po_gram_n = po_gram_defact[po_gram_state]; /* If its default is to accept any token, ok. Otherwise pop it.*/ + if (po_gram_n) goto po_gram_default; +#endif + +po_gram_errpop: /* pop the current state because it cannot handle the error token */ + + if (po_gram_ssp == po_gram_ss) po_gram_ABORT; + po_gram_vsp--; + po_gram_state = *--po_gram_ssp; +#ifdef po_gram_LSP_NEEDED + po_gram_lsp--; +#endif + +#if po_gram_DEBUG != 0 + if (po_gram_debug) + { + short *ssp1 = po_gram_ss - 1; + fprintf (stderr, "Error: state stack now"); + while (ssp1 != po_gram_ssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + +po_gram_errhandle: + + po_gram_n = po_gram_pact[po_gram_state]; + if (po_gram_n == po_gram_FLAG) + goto po_gram_errdefault; + + po_gram_n += po_gram_TERROR; + if (po_gram_n < 0 || po_gram_n > po_gram_LAST || po_gram_check[po_gram_n] != po_gram_TERROR) + goto po_gram_errdefault; + + po_gram_n = po_gram_table[po_gram_n]; + if (po_gram_n < 0) + { + if (po_gram_n == po_gram_FLAG) + goto po_gram_errpop; + po_gram_n = -po_gram_n; + goto po_gram_reduce; + } + else if (po_gram_n == 0) + goto po_gram_errpop; + + if (po_gram_n == po_gram_FINAL) + po_gram_ACCEPT; + +#if po_gram_DEBUG != 0 + if (po_gram_debug) + fprintf(stderr, "Shifting error token, "); +#endif + + *++po_gram_vsp = po_gram_lval; +#ifdef po_gram_LSP_NEEDED + *++po_gram_lsp = po_gram_lloc; +#endif + + po_gram_state = po_gram_n; + goto po_gram_newstate; +} +#line 127 "../../src/po-gram.y" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/po-gram.gen.h b/debian/gettext-kde/gettext-kde-0.10.35/src/po-gram.gen.h new file mode 100644 index 00000000..690eb304 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/po-gram.gen.h @@ -0,0 +1,17 @@ +typedef union +{ + char *string; + long number; + lex_pos_ty pos; +} po_gram_STYPE; +#define COMMENT 258 +#define DOMAIN 259 +#define JUNK 260 +#define MSGID 261 +#define MSGSTR 262 +#define NAME 263 +#define NUMBER 264 +#define STRING 265 + + +extern po_gram_STYPE po_gram_lval; diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/po-gram.h b/debian/gettext-kde/gettext-kde-0.10.35/src/po-gram.h new file mode 100644 index 00000000..11c62226 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/po-gram.h @@ -0,0 +1,28 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + +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, 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. */ + +#ifndef _PO_GRAM_H +#define _PO_GRAM_H + +/* Include some fundamental headers. */ +#include <sys/types.h> + +int po_gram_parse PARAMS ((void)); + +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/po-gram.y b/debian/gettext-kde/gettext-kde-0.10.35/src/po-gram.y new file mode 100644 index 00000000..f4436198 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/po-gram.y @@ -0,0 +1,126 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995, 1996, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + +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, 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. */ + +%{ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <stdio.h> + +#include "po-lex.h" +#include "po-gram.h" +#include "error.h" +#include "system.h" +#include <libintl.h> +#include "po.h" + +#define _(str) gettext (str) +%} + +%token COMMENT +%token DOMAIN +%token JUNK +%token MSGID +%token MSGSTR +%token NAME +%token NUMBER +%token STRING + +%union +{ + char *string; + long number; + lex_pos_ty pos; +} + +%type <string> STRING COMMENT string_list +%type <number> NUMBER +%type <pos> msgid msgstr + +%right MSGSTR + +%% + +msgfmt + : /* empty */ + | msgfmt comment + | msgfmt domain + | msgfmt message + | msgfmt error + ; + +domain + : DOMAIN STRING + { + po_callback_domain ($2); + } + ; + +message + : msgid string_list msgstr string_list + { + po_callback_message ($2, &$1, $4, &$3); + } + | msgid string_list + { + gram_error_at_line (&$1, _("missing `msgstr' section")); + free ($2); + } + ; + +msgid + : MSGID + { + $$ = gram_pos; + } + ; + +msgstr + : MSGSTR + { + $$ = gram_pos; + } + ; + +string_list + : STRING + { + $$ = $1; + } + | string_list STRING + { + size_t len1; + size_t len2; + + len1 = strlen ($1); + len2 = strlen ($2); + $$ = (char *) xmalloc (len1 + len2 + 1); + stpcpy (stpcpy ($$, $1), $2); + free ($1); + free ($2); + } + ; + +comment + : COMMENT + { + po_callback_comment ($1); + } + ; diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/po-hash.gen.c b/debian/gettext-kde/gettext-kde-0.10.35/src/po-hash.gen.c new file mode 100644 index 00000000..b7ded1b8 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/po-hash.gen.c @@ -0,0 +1,1022 @@ + +/* A Bison parser, made from ../../src/po-hash.y + by GNU Bison version 1.25 + */ + +#define po_hash_BISON 1 /* Identify Bison output. */ + +#define STRING 258 +#define NUMBER 259 +#define COLON 260 +#define COMMA 261 +#define FILE_KEYWORD 262 +#define LINE_KEYWORD 263 +#define NUMBER_KEYWORD 264 + +#line 20 "../../src/po-hash.y" + + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <stdio.h> + +#include <system.h> +#include "po-hash.h" +#include "po.h" + + +#line 42 "../../src/po-hash.y" +typedef union +{ + char *string; + int number; +} po_hash_STYPE; +#line 51 "../../src/po-hash.y" + + +static const char *cur; + + +void po_hash_error PARAMS ((char *)); +int po_hash_lex PARAMS ((void)); + + +int +po_hash (s) + const char *s; +{ + extern int po_hash_parse PARAMS ((void)); + + cur = s; + return po_hash_parse (); +} + + +void +po_hash_error (s) + char *s; +{ + /* Do nothing, the grammar is used as a recogniser. */ +} +#include <stdio.h> + +#ifndef __cplusplus +#ifndef __STDC__ +#define const +#endif +#endif + + + +#define po_hash_FINAL 18 +#define po_hash_FLAG -32768 +#define po_hash_NTBASE 10 + +#define po_hash_TRANSLATE(x) ((unsigned)(x) <= 264 ? po_hash_translate[x] : 12) + +static const char po_hash_translate[] = { 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, + 6, 7, 8, 9 +}; + +#if po_hash_DEBUG != 0 +static const short po_hash_prhs[] = { 0, + 0, 1, 4, 8, 16, 25 +}; + +static const short po_hash_rhs[] = { -1, + 10, 11, 0, 3, 5, 4, 0, 7, 5, 3, + 6, 8, 5, 4, 0, 7, 5, 3, 6, 8, + 9, 5, 4, 0, 7, 5, 4, 0 +}; + +#endif + +#if po_hash_DEBUG != 0 +static const short po_hash_rline[] = { 0, + 82, 83, 87, 93, 99, 105 +}; +#endif + + +#if po_hash_DEBUG != 0 || defined (po_hash_ERROR_VERBOSE) + +static const char * const po_hash_tname[] = { "$","error","$undefined.","STRING", +"NUMBER","COLON","COMMA","FILE_KEYWORD","LINE_KEYWORD","NUMBER_KEYWORD","filepos_line", +"filepos", NULL +}; +#endif + +static const short po_hash_r1[] = { 0, + 10, 10, 11, 11, 11, 11 +}; + +static const short po_hash_r2[] = { 0, + 0, 2, 3, 7, 8, 3 +}; + +static const short po_hash_defact[] = { 1, + 0, 0, 0, 2, 0, 0, 3, 0, 6, 0, + 0, 0, 0, 4, 0, 5, 0, 0 +}; + +static const short po_hash_defgoto[] = { 1, + 4 +}; + +static const short po_hash_pact[] = {-32768, + 0, -3, -1,-32768, 2, 5,-32768, 4,-32768, 3, + -4, 8, 9,-32768, 11,-32768, 13,-32768 +}; + +static const short po_hash_pgoto[] = {-32768, +-32768 +}; + + +#define po_hash_LAST 15 + + +static const short po_hash_table[] = { 17, + 12, 5, 2, 6, 13, 7, 3, 8, 9, 10, + 11, 14, 18, 15, 16 +}; + +static const short po_hash_check[] = { 0, + 5, 5, 3, 5, 9, 4, 7, 3, 4, 6, + 8, 4, 0, 5, 4 +}; +/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ +#line 3 "/usr/lib/bison.simple" + +/* Skeleton output parser for bison, + Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +#ifndef alloca +#ifdef __GNUC__ +#define alloca __builtin_alloca +#else /* not GNU C. */ +#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) +#include <alloca.h> +#else /* not sparc */ +#if defined (MSDOS) && !defined (__TURBOC__) +#include <malloc.h> +#else /* not MSDOS, or __TURBOC__ */ +#if defined(_AIX) +#include <malloc.h> + #pragma alloca +#else /* not MSDOS, __TURBOC__, or _AIX */ +#ifdef __hpux +#ifdef __cplusplus +extern "C" { +void *alloca (unsigned int); +}; +#else /* not __cplusplus */ +void *alloca (); +#endif /* not __cplusplus */ +#endif /* __hpux */ +#endif /* not _AIX */ +#endif /* not MSDOS, or __TURBOC__ */ +#endif /* not sparc. */ +#endif /* not GNU C. */ +#endif /* alloca not defined. */ + +/* This is the parser code that is written into each bison parser + when the %semantic_parser declaration is not specified in the grammar. + It was written by Richard Stallman by simplifying the hairy parser + used when %semantic_parser is specified. */ + +/* Note: there must be only one dollar sign in this file. + It is replaced by the list of actions, each action + as one case of the switch. */ + +#define po_hash_errok (po_hash_errstatus = 0) +#define po_hash_clearin (po_hash_char = po_hash_EMPTY) +#define po_hash_EMPTY -2 +#define po_hash_EOF 0 +#define po_hash_ACCEPT return(0) +#define po_hash_ABORT return(1) +#define po_hash_ERROR goto po_hash_errlab1 +/* Like po_hash_ERROR except do call po_hash_error. + This remains here temporarily to ease the + transition to the new meaning of po_hash_ERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ +#define po_hash_FAIL goto po_hash_errlab +#define po_hash_RECOVERING() (!!po_hash_errstatus) +#define po_hash_BACKUP(token, value) \ +do \ + if (po_hash_char == po_hash_EMPTY && po_hash_len == 1) \ + { po_hash_char = (token), po_hash_lval = (value); \ + po_hash_char1 = po_hash_TRANSLATE (po_hash_char); \ + po_hash_POPSTACK; \ + goto po_hash_backup; \ + } \ + else \ + { po_hash_error ("syntax error: cannot back up"); po_hash_ERROR; } \ +while (0) + +#define po_hash_TERROR 1 +#define po_hash_ERRCODE 256 + +#ifndef po_hash_PURE +#define po_hash_LEX po_hash_lex() +#endif + +#ifdef po_hash_PURE +#ifdef po_hash_LSP_NEEDED +#ifdef po_hash_LEX_PARAM +#define po_hash_LEX po_hash_lex(&po_hash_lval, &po_hash_lloc, po_hash_LEX_PARAM) +#else +#define po_hash_LEX po_hash_lex(&po_hash_lval, &po_hash_lloc) +#endif +#else /* not po_hash_LSP_NEEDED */ +#ifdef po_hash_LEX_PARAM +#define po_hash_LEX po_hash_lex(&po_hash_lval, po_hash_LEX_PARAM) +#else +#define po_hash_LEX po_hash_lex(&po_hash_lval) +#endif +#endif /* not po_hash_LSP_NEEDED */ +#endif + +/* If nonreentrant, generate the variables here */ + +#ifndef po_hash_PURE + +int po_hash_char; /* the lookahead symbol */ +po_hash_STYPE po_hash_lval; /* the semantic value of the */ + /* lookahead symbol */ + +#ifdef po_hash_LSP_NEEDED +po_hash_LTYPE po_hash_lloc; /* location data for the lookahead */ + /* symbol */ +#endif + +int po_hash_nerrs; /* number of parse errors so far */ +#endif /* not po_hash_PURE */ + +#if po_hash_DEBUG != 0 +int po_hash_debug; /* nonzero means print parse trace */ +/* Since this is uninitialized, it does not stop multiple parsers + from coexisting. */ +#endif + +/* po_hash_INITDEPTH indicates the initial size of the parser's stacks */ + +#ifndef po_hash_INITDEPTH +#define po_hash_INITDEPTH 200 +#endif + +/* po_hash_MAXDEPTH is the maximum size the stacks can grow to + (effective only if the built-in stack extension method is used). */ + +#if po_hash_MAXDEPTH == 0 +#undef po_hash_MAXDEPTH +#endif + +#ifndef po_hash_MAXDEPTH +#define po_hash_MAXDEPTH 10000 +#endif + +/* Prevent warning if -Wstrict-prototypes. */ +#ifdef __GNUC__ +int po_hash_parse (void); +#endif + +#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ +#define __po_hash__memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) +#else /* not GNU C or C++ */ +#ifndef __cplusplus + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__po_hash__memcpy (to, from, count) + char *to; + char *from; + int count; +{ + register char *f = from; + register char *t = to; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#else /* __cplusplus */ + +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__po_hash__memcpy (char *to, char *from, int count) +{ + register char *f = from; + register char *t = to; + register int i = count; + + while (i-- > 0) + *t++ = *f++; +} + +#endif +#endif + +#line 196 "/usr/lib/bison.simple" + +/* The user can define po_hash_PARSE_PARAM as the name of an argument to be passed + into po_hash_parse. The argument should have type void *. + It should actually point to an object. + Grammar actions can access the variable by casting it + to the proper pointer type. */ + +#ifdef po_hash_PARSE_PARAM +#ifdef __cplusplus +#define po_hash_PARSE_PARAM_ARG void *po_hash_PARSE_PARAM +#define po_hash_PARSE_PARAM_DECL +#else /* not __cplusplus */ +#define po_hash_PARSE_PARAM_ARG po_hash_PARSE_PARAM +#define po_hash_PARSE_PARAM_DECL void *po_hash_PARSE_PARAM; +#endif /* not __cplusplus */ +#else /* not po_hash_PARSE_PARAM */ +#define po_hash_PARSE_PARAM_ARG +#define po_hash_PARSE_PARAM_DECL +#endif /* not po_hash_PARSE_PARAM */ + +int +po_hash_parse(po_hash_PARSE_PARAM_ARG) + po_hash_PARSE_PARAM_DECL +{ + register int po_hash_state; + register int po_hash_n; + register short *po_hash_ssp; + register po_hash_STYPE *po_hash_vsp; + int po_hash_errstatus; /* number of tokens to shift before error messages enabled */ + int po_hash_char1 = 0; /* lookahead token as an internal (translated) token number */ + + short po_hash_ssa[po_hash_INITDEPTH]; /* the state stack */ + po_hash_STYPE po_hash_vsa[po_hash_INITDEPTH]; /* the semantic value stack */ + + short *po_hash_ss = po_hash_ssa; /* refer to the stacks thru separate pointers */ + po_hash_STYPE *po_hash_vs = po_hash_vsa; /* to allow po_hash_overflow to reallocate them elsewhere */ + +#ifdef po_hash_LSP_NEEDED + po_hash_LTYPE po_hash_lsa[po_hash_INITDEPTH]; /* the location stack */ + po_hash_LTYPE *po_hash_ls = po_hash_lsa; + po_hash_LTYPE *po_hash_lsp; + +#define po_hash_POPSTACK (po_hash_vsp--, po_hash_ssp--, po_hash_lsp--) +#else +#define po_hash_POPSTACK (po_hash_vsp--, po_hash_ssp--) +#endif + + int po_hash_stacksize = po_hash_INITDEPTH; + +#ifdef po_hash_PURE + int po_hash_char; + po_hash_STYPE po_hash_lval; + int po_hash_nerrs; +#ifdef po_hash_LSP_NEEDED + po_hash_LTYPE po_hash_lloc; +#endif +#endif + + po_hash_STYPE po_hash_val; /* the variable used to return */ + /* semantic values from the action */ + /* routines */ + + int po_hash_len; + +#if po_hash_DEBUG != 0 + if (po_hash_debug) + fprintf(stderr, "Starting parse\n"); +#endif + + po_hash_state = 0; + po_hash_errstatus = 0; + po_hash_nerrs = 0; + po_hash_char = po_hash_EMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + po_hash_ssp = po_hash_ss - 1; + po_hash_vsp = po_hash_vs; +#ifdef po_hash_LSP_NEEDED + po_hash_lsp = po_hash_ls; +#endif + +/* Push a new state, which is found in po_hash_state . */ +/* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. */ +po_hash_newstate: + + *++po_hash_ssp = po_hash_state; + + if (po_hash_ssp >= po_hash_ss + po_hash_stacksize - 1) + { + /* Give user a chance to reallocate the stack */ + /* Use copies of these so that the &'s don't force the real ones into memory. */ + po_hash_STYPE *po_hash_vs1 = po_hash_vs; + short *po_hash_ss1 = po_hash_ss; +#ifdef po_hash_LSP_NEEDED + po_hash_LTYPE *po_hash_ls1 = po_hash_ls; +#endif + + /* Get the current used size of the three stacks, in elements. */ + int size = po_hash_ssp - po_hash_ss + 1; + +#ifdef po_hash_overflow + /* Each stack pointer address is followed by the size of + the data in use in that stack, in bytes. */ +#ifdef po_hash_LSP_NEEDED + /* This used to be a conditional around just the two extra args, + but that might be undefined if po_hash_overflow is a macro. */ + po_hash_overflow("parser stack overflow", + &po_hash_ss1, size * sizeof (*po_hash_ssp), + &po_hash_vs1, size * sizeof (*po_hash_vsp), + &po_hash_ls1, size * sizeof (*po_hash_lsp), + &po_hash_stacksize); +#else + po_hash_overflow("parser stack overflow", + &po_hash_ss1, size * sizeof (*po_hash_ssp), + &po_hash_vs1, size * sizeof (*po_hash_vsp), + &po_hash_stacksize); +#endif + + po_hash_ss = po_hash_ss1; po_hash_vs = po_hash_vs1; +#ifdef po_hash_LSP_NEEDED + po_hash_ls = po_hash_ls1; +#endif +#else /* no po_hash_overflow */ + /* Extend the stack our own way. */ + if (po_hash_stacksize >= po_hash_MAXDEPTH) + { + po_hash_error("parser stack overflow"); + return 2; + } + po_hash_stacksize *= 2; + if (po_hash_stacksize > po_hash_MAXDEPTH) + po_hash_stacksize = po_hash_MAXDEPTH; + po_hash_ss = (short *) alloca (po_hash_stacksize * sizeof (*po_hash_ssp)); + __po_hash__memcpy ((char *)po_hash_ss, (char *)po_hash_ss1, size * sizeof (*po_hash_ssp)); + po_hash_vs = (po_hash_STYPE *) alloca (po_hash_stacksize * sizeof (*po_hash_vsp)); + __po_hash__memcpy ((char *)po_hash_vs, (char *)po_hash_vs1, size * sizeof (*po_hash_vsp)); +#ifdef po_hash_LSP_NEEDED + po_hash_ls = (po_hash_LTYPE *) alloca (po_hash_stacksize * sizeof (*po_hash_lsp)); + __po_hash__memcpy ((char *)po_hash_ls, (char *)po_hash_ls1, size * sizeof (*po_hash_lsp)); +#endif +#endif /* no po_hash_overflow */ + + po_hash_ssp = po_hash_ss + size - 1; + po_hash_vsp = po_hash_vs + size - 1; +#ifdef po_hash_LSP_NEEDED + po_hash_lsp = po_hash_ls + size - 1; +#endif + +#if po_hash_DEBUG != 0 + if (po_hash_debug) + fprintf(stderr, "Stack size increased to %d\n", po_hash_stacksize); +#endif + + if (po_hash_ssp >= po_hash_ss + po_hash_stacksize - 1) + po_hash_ABORT; + } + +#if po_hash_DEBUG != 0 + if (po_hash_debug) + fprintf(stderr, "Entering state %d\n", po_hash_state); +#endif + + goto po_hash_backup; + po_hash_backup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* po_hash_resume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + po_hash_n = po_hash_pact[po_hash_state]; + if (po_hash_n == po_hash_FLAG) + goto po_hash_default; + + /* Not known => get a lookahead token if don't already have one. */ + + /* po_hash_char is either po_hash_EMPTY or po_hash_EOF + or a valid token in external form. */ + + if (po_hash_char == po_hash_EMPTY) + { +#if po_hash_DEBUG != 0 + if (po_hash_debug) + fprintf(stderr, "Reading a token: "); +#endif + po_hash_char = po_hash_LEX; + } + + /* Convert token to internal form (in po_hash_char1) for indexing tables with */ + + if (po_hash_char <= 0) /* This means end of input. */ + { + po_hash_char1 = 0; + po_hash_char = po_hash_EOF; /* Don't call po_hash_LEX any more */ + +#if po_hash_DEBUG != 0 + if (po_hash_debug) + fprintf(stderr, "Now at end of input.\n"); +#endif + } + else + { + po_hash_char1 = po_hash_TRANSLATE(po_hash_char); + +#if po_hash_DEBUG != 0 + if (po_hash_debug) + { + fprintf (stderr, "Next token is %d (%s", po_hash_char, po_hash_tname[po_hash_char1]); + /* Give the individual parser a way to print the precise meaning + of a token, for further debugging info. */ +#ifdef po_hash_PRINT + po_hash_PRINT (stderr, po_hash_char, po_hash_lval); +#endif + fprintf (stderr, ")\n"); + } +#endif + } + + po_hash_n += po_hash_char1; + if (po_hash_n < 0 || po_hash_n > po_hash_LAST || po_hash_check[po_hash_n] != po_hash_char1) + goto po_hash_default; + + po_hash_n = po_hash_table[po_hash_n]; + + /* po_hash_n is what to do for this token type in this state. + Negative => reduce, -po_hash_n is rule number. + Positive => shift, po_hash_n is new state. + New state is final state => don't bother to shift, + just return success. + 0, or most negative number => error. */ + + if (po_hash_n < 0) + { + if (po_hash_n == po_hash_FLAG) + goto po_hash_errlab; + po_hash_n = -po_hash_n; + goto po_hash_reduce; + } + else if (po_hash_n == 0) + goto po_hash_errlab; + + if (po_hash_n == po_hash_FINAL) + po_hash_ACCEPT; + + /* Shift the lookahead token. */ + +#if po_hash_DEBUG != 0 + if (po_hash_debug) + fprintf(stderr, "Shifting token %d (%s), ", po_hash_char, po_hash_tname[po_hash_char1]); +#endif + + /* Discard the token being shifted unless it is eof. */ + if (po_hash_char != po_hash_EOF) + po_hash_char = po_hash_EMPTY; + + *++po_hash_vsp = po_hash_lval; +#ifdef po_hash_LSP_NEEDED + *++po_hash_lsp = po_hash_lloc; +#endif + + /* count tokens shifted since error; after three, turn off error status. */ + if (po_hash_errstatus) po_hash_errstatus--; + + po_hash_state = po_hash_n; + goto po_hash_newstate; + +/* Do the default action for the current state. */ +po_hash_default: + + po_hash_n = po_hash_defact[po_hash_state]; + if (po_hash_n == 0) + goto po_hash_errlab; + +/* Do a reduction. po_hash_n is the number of a rule to reduce with. */ +po_hash_reduce: + po_hash_len = po_hash_r2[po_hash_n]; + if (po_hash_len > 0) + po_hash_val = po_hash_vsp[1-po_hash_len]; /* implement default value of the action */ + +#if po_hash_DEBUG != 0 + if (po_hash_debug) + { + int i; + + fprintf (stderr, "Reducing via rule %d (line %d), ", + po_hash_n, po_hash_rline[po_hash_n]); + + /* Print the symbols being reduced, and their result. */ + for (i = po_hash_prhs[po_hash_n]; po_hash_rhs[i] > 0; i++) + fprintf (stderr, "%s ", po_hash_tname[po_hash_rhs[i]]); + fprintf (stderr, " -> %s\n", po_hash_tname[po_hash_r1[po_hash_n]]); + } +#endif + + + switch (po_hash_n) { + +case 3: +#line 88 "../../src/po-hash.y" +{ + /* GNU style */ + po_callback_comment_filepos (po_hash_vsp[-2].string, po_hash_vsp[0].number); + free (po_hash_vsp[-2].string); + ; + break;} +case 4: +#line 94 "../../src/po-hash.y" +{ + /* SunOS style */ + po_callback_comment_filepos (po_hash_vsp[-4].string, po_hash_vsp[0].number); + free (po_hash_vsp[-4].string); + ; + break;} +case 5: +#line 100 "../../src/po-hash.y" +{ + /* Solaris style */ + po_callback_comment_filepos (po_hash_vsp[-5].string, po_hash_vsp[0].number); + free (po_hash_vsp[-5].string); + ; + break;} +case 6: +#line 106 "../../src/po-hash.y" +{ + /* GNU style, but STRING is `file'. Esoteric, but it + happened. */ + po_callback_comment_filepos ("file", po_hash_vsp[0].number); + ; + break;} +} + /* the action file gets copied in in place of this dollarsign */ +#line 498 "/usr/lib/bison.simple" + + po_hash_vsp -= po_hash_len; + po_hash_ssp -= po_hash_len; +#ifdef po_hash_LSP_NEEDED + po_hash_lsp -= po_hash_len; +#endif + +#if po_hash_DEBUG != 0 + if (po_hash_debug) + { + short *ssp1 = po_hash_ss - 1; + fprintf (stderr, "state stack now"); + while (ssp1 != po_hash_ssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + + *++po_hash_vsp = po_hash_val; + +#ifdef po_hash_LSP_NEEDED + po_hash_lsp++; + if (po_hash_len == 0) + { + po_hash_lsp->first_line = po_hash_lloc.first_line; + po_hash_lsp->first_column = po_hash_lloc.first_column; + po_hash_lsp->last_line = (po_hash_lsp-1)->last_line; + po_hash_lsp->last_column = (po_hash_lsp-1)->last_column; + po_hash_lsp->text = 0; + } + else + { + po_hash_lsp->last_line = (po_hash_lsp+po_hash_len-1)->last_line; + po_hash_lsp->last_column = (po_hash_lsp+po_hash_len-1)->last_column; + } +#endif + + /* Now "shift" the result of the reduction. + Determine what state that goes to, + based on the state we popped back to + and the rule number reduced by. */ + + po_hash_n = po_hash_r1[po_hash_n]; + + po_hash_state = po_hash_pgoto[po_hash_n - po_hash_NTBASE] + *po_hash_ssp; + if (po_hash_state >= 0 && po_hash_state <= po_hash_LAST && po_hash_check[po_hash_state] == *po_hash_ssp) + po_hash_state = po_hash_table[po_hash_state]; + else + po_hash_state = po_hash_defgoto[po_hash_n - po_hash_NTBASE]; + + goto po_hash_newstate; + +po_hash_errlab: /* here on detecting error */ + + if (! po_hash_errstatus) + /* If not already recovering from an error, report this error. */ + { + ++po_hash_nerrs; + +#ifdef po_hash_ERROR_VERBOSE + po_hash_n = po_hash_pact[po_hash_state]; + + if (po_hash_n > po_hash_FLAG && po_hash_n < po_hash_LAST) + { + int size = 0; + char *msg; + int x, count; + + count = 0; + /* Start X at -po_hash_n if nec to avoid negative indexes in po_hash_check. */ + for (x = (po_hash_n < 0 ? -po_hash_n : 0); + x < (sizeof(po_hash_tname) / sizeof(char *)); x++) + if (po_hash_check[x + po_hash_n] == x) + size += strlen(po_hash_tname[x]) + 15, count++; + msg = (char *) malloc(size + 15); + if (msg != 0) + { + strcpy(msg, "parse error"); + + if (count < 5) + { + count = 0; + for (x = (po_hash_n < 0 ? -po_hash_n : 0); + x < (sizeof(po_hash_tname) / sizeof(char *)); x++) + if (po_hash_check[x + po_hash_n] == x) + { + strcat(msg, count == 0 ? ", expecting `" : " or `"); + strcat(msg, po_hash_tname[x]); + strcat(msg, "'"); + count++; + } + } + po_hash_error(msg); + free(msg); + } + else + po_hash_error ("parse error; also virtual memory exceeded"); + } + else +#endif /* po_hash_ERROR_VERBOSE */ + po_hash_error("parse error"); + } + + goto po_hash_errlab1; +po_hash_errlab1: /* here on error raised explicitly by an action */ + + if (po_hash_errstatus == 3) + { + /* if just tried and failed to reuse lookahead token after an error, discard it. */ + + /* return failure if at end of input */ + if (po_hash_char == po_hash_EOF) + po_hash_ABORT; + +#if po_hash_DEBUG != 0 + if (po_hash_debug) + fprintf(stderr, "Discarding token %d (%s).\n", po_hash_char, po_hash_tname[po_hash_char1]); +#endif + + po_hash_char = po_hash_EMPTY; + } + + /* Else will try to reuse lookahead token + after shifting the error token. */ + + po_hash_errstatus = 3; /* Each real token shifted decrements this */ + + goto po_hash_errhandle; + +po_hash_errdefault: /* current state does not do anything special for the error token. */ + +#if 0 + /* This is wrong; only states that explicitly want error tokens + should shift them. */ + po_hash_n = po_hash_defact[po_hash_state]; /* If its default is to accept any token, ok. Otherwise pop it.*/ + if (po_hash_n) goto po_hash_default; +#endif + +po_hash_errpop: /* pop the current state because it cannot handle the error token */ + + if (po_hash_ssp == po_hash_ss) po_hash_ABORT; + po_hash_vsp--; + po_hash_state = *--po_hash_ssp; +#ifdef po_hash_LSP_NEEDED + po_hash_lsp--; +#endif + +#if po_hash_DEBUG != 0 + if (po_hash_debug) + { + short *ssp1 = po_hash_ss - 1; + fprintf (stderr, "Error: state stack now"); + while (ssp1 != po_hash_ssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + +po_hash_errhandle: + + po_hash_n = po_hash_pact[po_hash_state]; + if (po_hash_n == po_hash_FLAG) + goto po_hash_errdefault; + + po_hash_n += po_hash_TERROR; + if (po_hash_n < 0 || po_hash_n > po_hash_LAST || po_hash_check[po_hash_n] != po_hash_TERROR) + goto po_hash_errdefault; + + po_hash_n = po_hash_table[po_hash_n]; + if (po_hash_n < 0) + { + if (po_hash_n == po_hash_FLAG) + goto po_hash_errpop; + po_hash_n = -po_hash_n; + goto po_hash_reduce; + } + else if (po_hash_n == 0) + goto po_hash_errpop; + + if (po_hash_n == po_hash_FINAL) + po_hash_ACCEPT; + +#if po_hash_DEBUG != 0 + if (po_hash_debug) + fprintf(stderr, "Shifting error token, "); +#endif + + *++po_hash_vsp = po_hash_lval; +#ifdef po_hash_LSP_NEEDED + *++po_hash_lsp = po_hash_lloc; +#endif + + po_hash_state = po_hash_n; + goto po_hash_newstate; +} +#line 113 "../../src/po-hash.y" + + + +int +po_hash_lex () +{ + static char *buf; + static size_t bufmax; + size_t bufpos; + int n; + int c; + + for (;;) + { + c = *cur++; + switch (c) + { + case 0: + --cur; + return 0; + + case ' ': + case '\t': + case '\n': + break; + + case ':': + return COLON; + + case ',': + return COMMA; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + /* Accumulate a number. */ + n = 0; + for (;;) + { + n = n * 10 + c - '0'; + c = *cur++; + switch (c) + { + default: + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + continue; + } + break; + } + --cur; + po_hash_lval.number = n; + return NUMBER; + + default: + /* Accumulate a string. */ + bufpos = 0; + for (;;) + { + if (bufpos >= bufmax) + { + bufmax += 100; + buf = xrealloc (buf, bufmax); + } + buf[bufpos++] = c; + + c = *cur++; + switch (c) + { + default: + continue; + + case 0: + case ':': + case ',': + case ' ': + case '\t': + --cur; + break; + } + break; + } + + if (bufpos >= bufmax) + { + bufmax += 100; + buf = xrealloc (buf, bufmax); + } + buf[bufpos] = 0; + + if (strcmp (buf, "file") == 0 || strcmp (buf, "File") == 0) + return FILE_KEYWORD; + if (strcmp (buf, "line") == 0) + return LINE_KEYWORD; + if (strcmp (buf, "number") == 0) + return NUMBER_KEYWORD; + po_hash_lval.string = xstrdup (buf); + return STRING; + } + } +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/po-hash.gen.h b/debian/gettext-kde/gettext-kde-0.10.35/src/po-hash.gen.h new file mode 100644 index 00000000..4b25ded3 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/po-hash.gen.h @@ -0,0 +1,15 @@ +typedef union +{ + char *string; + int number; +} po_hash_STYPE; +#define STRING 258 +#define NUMBER 259 +#define COLON 260 +#define COMMA 261 +#define FILE_KEYWORD 262 +#define LINE_KEYWORD 263 +#define NUMBER_KEYWORD 264 + + +extern po_hash_STYPE po_hash_lval; diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/po-hash.h b/debian/gettext-kde/gettext-kde-0.10.35/src/po-hash.h new file mode 100644 index 00000000..051ff038 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/po-hash.h @@ -0,0 +1,25 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995, 1996, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + +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, 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. */ + +#ifndef SRC_PO_HASH_H +#define SRC_PO_HASH_H + +int po_hash PARAMS ((const char *__string)); + +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/po-hash.y b/debian/gettext-kde/gettext-kde-0.10.35/src/po-hash.y new file mode 100644 index 00000000..63cd0f6f --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/po-hash.y @@ -0,0 +1,230 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995, 1996, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + +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, 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. */ + +%{ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <stdio.h> + +#include <system.h> +#include "po-hash.h" +#include "po.h" + +%} + +%token STRING +%token NUMBER +%token COLON +%token COMMA +%token FILE_KEYWORD +%token LINE_KEYWORD +%token NUMBER_KEYWORD + +%union +{ + char *string; + int number; +} + +%type <number> NUMBER +%type <string> STRING + +%{ + +static const char *cur; + + +void yyerror PARAMS ((char *)); +int yylex PARAMS ((void)); + + +int +po_hash (s) + const char *s; +{ + extern int yyparse PARAMS ((void)); + + cur = s; + return yyparse (); +} + + +void +yyerror (s) + char *s; +{ + /* Do nothing, the grammar is used as a recogniser. */ +} +%} + +%% + +filepos_line + : /* empty */ + | filepos_line filepos + ; + +filepos + : STRING COLON NUMBER + { + /* GNU style */ + po_callback_comment_filepos ($1, $3); + free ($1); + } + | FILE_KEYWORD COLON STRING COMMA LINE_KEYWORD COLON NUMBER + { + /* SunOS style */ + po_callback_comment_filepos ($3, $7); + free ($3); + } + | FILE_KEYWORD COLON STRING COMMA LINE_KEYWORD NUMBER_KEYWORD COLON NUMBER + { + /* Solaris style */ + po_callback_comment_filepos ($3, $8); + free ($3); + } + | FILE_KEYWORD COLON NUMBER + { + /* GNU style, but STRING is `file'. Esoteric, but it + happened. */ + po_callback_comment_filepos ("file", $3); + } + ; + +%% + + +int +yylex () +{ + static char *buf; + static size_t bufmax; + size_t bufpos; + int n; + int c; + + for (;;) + { + c = *cur++; + switch (c) + { + case 0: + --cur; + return 0; + + case ' ': + case '\t': + case '\n': + break; + + case ':': + return COLON; + + case ',': + return COMMA; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + /* Accumulate a number. */ + n = 0; + for (;;) + { + n = n * 10 + c - '0'; + c = *cur++; + switch (c) + { + default: + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + continue; + } + break; + } + --cur; + yylval.number = n; + return NUMBER; + + default: + /* Accumulate a string. */ + bufpos = 0; + for (;;) + { + if (bufpos >= bufmax) + { + bufmax += 100; + buf = xrealloc (buf, bufmax); + } + buf[bufpos++] = c; + + c = *cur++; + switch (c) + { + default: + continue; + + case 0: + case ':': + case ',': + case ' ': + case '\t': + --cur; + break; + } + break; + } + + if (bufpos >= bufmax) + { + bufmax += 100; + buf = xrealloc (buf, bufmax); + } + buf[bufpos] = 0; + + if (strcmp (buf, "file") == 0 || strcmp (buf, "File") == 0) + return FILE_KEYWORD; + if (strcmp (buf, "line") == 0) + return LINE_KEYWORD; + if (strcmp (buf, "number") == 0) + return NUMBER_KEYWORD; + yylval.string = xstrdup (buf); + return STRING; + } + } +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/po-lex.c b/debian/gettext-kde/gettext-kde-0.10.35/src/po-lex.c new file mode 100644 index 00000000..0d614308 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/po-lex.c @@ -0,0 +1,545 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + + 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, 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. */ + + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <ctype.h> +#include <errno.h> +#include <stdio.h> +#include <sys/types.h> + +#include <libintl.h> +#define _(str) gettext(str) + +#if HAVE_VPRINTF || HAVE_DOPRNT +# if __STDC__ +# include <stdarg.h> +# define VA_START(args, lastarg) va_start(args, lastarg) +# else +# include <varargs.h> +# define VA_START(args, lastarg) va_start(args) +# endif +#else +# define va_alist a1, a2, a3, a4, a5, a6, a7, a8 +# define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8; +#endif + +#include "po-lex.h" +#include "po-gram.h" +#include "system.h" +#include "error.h" +#include "po-gram.gen.h" + + +static FILE *fp; +lex_pos_ty gram_pos; +size_t gram_max_allowed_errors = 20; +static int pass_comments = 0; +static int pass_obsolete_entries = 0; + + +/* Prototypes for local functions. */ +static int lex_getc PARAMS ((void)); +static void lex_ungetc PARAMS ((int __ch)); +static int keyword_p PARAMS ((char *__s)); +static int control_sequence PARAMS ((void)); + + +void +lex_open (fname) + const char *fname; +{ + fp = open_po_file (fname, &gram_pos.file_name); + if (!fp) + error (EXIT_FAILURE, errno, + _("error while opening \"%s\" for reading"), fname); + + gram_pos.line_number = 1; +} + + +void +lex_close () +{ + if (error_message_count > 0) + error (EXIT_FAILURE, 0, _("found %d fatal errors"), error_message_count); + + if (fp != stdin) + fclose (fp); + fp = NULL; + gram_pos.file_name = 0; + gram_pos.line_number = 0; + error_message_count = 0; +} + + +/* CAUTION: If you change this function, you must also make identical + changes to the macro of the same name in src/po-lex.h */ + +#if !__STDC__ || !defined __GNUC__ || __GNUC__ == 1 +/* VARARGS1 */ +void +# if defined VA_START && __STDC__ +po_gram_error (const char *fmt, ...) +# else +po_gram_error (fmt, va_alist) + const char *fmt; + va_dcl +# endif +{ +# ifdef VA_START + va_list ap; + char *buffer; + + VA_START (ap, fmt); + + vasprintf (&buffer, fmt, ap); + va_end (ap); + error_at_line (0, 0, gram_pos.file_name, gram_pos.line_number, "%s", buffer); +# else + error_at_line (0, 0, gram_pos.file_name, gram_pos.line_number, fmt, + a1, a2, a3, a4, a5, a6, a7, a8); +# endif + + /* Some messages need more than one line. Continuation lines are + indicated by using "..." at the start of the string. We don't + increment the error counter for these continuation lines. */ + if (*fmt == '.') + --error_message_count; + else if (error_message_count >= gram_max_allowed_errors) + error (EXIT_FAILURE, 0, _("too many errors, aborting")); +} + + +/* CAUTION: If you change this function, you must also make identical + changes to the macro of the same name in src/po-lex.h */ + +/* VARARGS2 */ +void +# if defined VA_START && __STDC__ +gram_error_at_line (const lex_pos_ty *pp, const char *fmt, ...) +# else +gram_error_at_line (pp, fmt, va_alist) + const lex_pos_ty *pp; + const char *fmt; + va_dcl +# endif +{ +# ifdef VA_START + va_list ap; + char *buffer; + + VA_START (ap, fmt); + + vasprintf (&buffer, fmt, ap); + va_end (ap); + error_at_line (0, 0, pp->file_name, pp->line_number, "%s", buffer); +# else + error_at_line (0, 0, pp->file_name, pp->line_number, fmt, + a1, a2, a3, a4, a5, a6, a7, a8); +# endif + + /* Some messages need more than one line, or more than one location. + Continuation lines are indicated by using "..." at the start of the + string. We don't increment the error counter for these + continuation lines. */ + if (*fmt == '.') + --error_message_count; + else if (error_message_count >= gram_max_allowed_errors) + error (EXIT_FAILURE, 0, _("too many errors, aborting")); +} +#endif + + +static int +lex_getc () +{ + int c; + + for (;;) + { + c = getc (fp); + switch (c) + { + case EOF: + if (ferror (fp)) + error (EXIT_FAILURE, errno, _("error while reading \"%s\""), + gram_pos.file_name); + return EOF; + + case '\n': + ++gram_pos.line_number; + return '\n'; + + case '\\': + c = getc (fp); + if (c != '\n') + { + if (c != EOF) + ungetc (c, fp); + return '\\'; + } + ++gram_pos.line_number; + break; + + default: + return c; + } + } +} + + +static void +lex_ungetc (c) + int c; +{ + switch (c) + { + case EOF: + break; + + case '\n': + --gram_pos.line_number; + /* FALLTHROUGH */ + + default: + ungetc (c, fp); + break; + } +} + + +static int +keyword_p (s) + char *s; +{ + if (!strcmp (s, "domain")) + return DOMAIN; + if (!strcmp (s, "msgid")) + return MSGID; + if (!strcmp (s, "msgstr")) + return MSGSTR; + po_gram_error (_("keyword \"%s\" unknown"), s); + return NAME; +} + + +static int +control_sequence () +{ + int c; + int val; + int max; + + c = lex_getc (); + switch (c) + { + case 'n': + return '\n'; + + case 't': + return '\t'; + + case 'b': + return '\b'; + + case 'r': + return '\r'; + + case 'f': + return '\f'; + + case '\\': + case '"': + return c; + + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + val = 0; + for (max = 0; max < 3; ++max) + { + /* Warning: not portable, can't depend on '0'..'7' ordering. */ + val = val * 8 + c - '0'; + c = lex_getc (); + switch (c) + { + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + continue; + + default: + break; + } + break; + } + lex_ungetc (c); + return val; + + case 'x': case 'X': + c = lex_getc (); + if (c == EOF || !isxdigit (c)) + break; + + val = 0; + for (;;) + { + val *= 16; + if (isdigit (c)) + /* Warning: not portable, can't depend on '0'..'9' ordering */ + val += c - '0'; + else if (isupper (c)) + /* Warning: not portable, can't depend on 'A'..'F' ordering */ + val += c - 'A' + 10; + else + /* Warning: not portable, can't depend on 'a'..'f' ordering */ + val += c - 'a' + 10; + + c = lex_getc (); + switch (c) + { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + continue; + + default: + break; + } + break; + } + return val; + } + po_gram_error (_("illegal control sequence")); + return ' '; +} + + +int +po_gram_lex () +{ + static char *buf; + static size_t bufmax; + int c; + size_t bufpos; + + for (;;) + { + c = lex_getc (); + switch (c) + { + case EOF: + /* Yacc want this for end of file. */ + return 0; + + case ' ': + case '\t': + case '\n': + case '\r': + case '\f': + break; + + case '#': + /* Accumulate comments into a buffer. If we have been asked + to pass comments, generate a COMMENT token, otherwise + discard it. */ + c = lex_getc (); + if (c == '~' && pass_obsolete_entries) + /* A special comment beginning with #~ is found. This + is the format for obsolete entries and if we are + asked to return them is entries not as comments be + simply stop processing the comment here. The + following characters are expected to be well formed. */ + break; + + if (pass_comments) + { + bufpos = 0; + while (1) + { + if (bufpos >= bufmax) + { + bufmax += 100; + buf = xrealloc (buf, bufmax); + } + if (c == EOF || c == '\n') + break; + + buf[bufpos++] = c; + c = lex_getc (); + } + buf[bufpos] = 0; + + po_gram_lval.string = buf; + return COMMENT; + } + else + /* We do this in separate loop because collecting large + comments while they get not passed to the upper layers + is not very effective. */ + while (c != EOF && c != '\n') + c = lex_getc (); + break; + + case '"': + bufpos = 0; + while (1) + { + if (bufpos >= bufmax) + { + bufmax += 100; + buf = xrealloc (buf, bufmax); + } + c = lex_getc (); + if (c == '\n') + { + po_gram_error (_("end-of-line within string")); + break; + } + if (c == EOF) + { + po_gram_error (_("end-of-file within string")); + break; + } + if (c == '"') + break; + + if (c == '\\') + c = control_sequence (); + + buf[bufpos++] = c; + } + buf[bufpos] = 0; + + po_gram_lval.string = xstrdup (buf); + return STRING; + + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case '_': case '$': + bufpos = 0; + for (;;) + { + if (bufpos + 1 >= bufmax) + { + bufmax += 100; + buf = xrealloc (buf, bufmax); + } + buf[bufpos++] = c; + c = lex_getc (); + switch (c) + { + default: + break; + case 'a': case 'b': case 'c': case 'd': + case 'e': case 'f': case 'g': case 'h': + case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': + case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + case 'A': case 'B': case 'C': case 'D': + case 'E': case 'F': case 'G': case 'H': + case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': + case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case '_': case '$': + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + case '8': case '9': + continue; + } + break; + } + lex_ungetc (c); + + buf[bufpos] = 0; + + c = keyword_p (buf); + if (c == NAME) + po_gram_lval.string = xstrdup (buf); + return c; + + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + /* I know, we don't need numbers, yet. */ + bufpos = 0; + for (;;) + { + if (bufpos + 1 >= bufmax) + { + bufmax += 100; + buf = xrealloc (buf, bufmax + 1); + } + buf[bufpos++] = c; + c = lex_getc (); + switch (c) + { + default: + break; + + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + case '8': case '9': + continue; + } + break; + } + lex_ungetc (c); + + buf[bufpos] = 0; + + po_gram_lval.number = atol (buf); + return NUMBER; + + default: + /* This will cause a syntax error. */ + return JUNK; + } + } +} + + +void +po_lex_pass_comments (flag) + int flag; +{ + pass_comments = (flag != 0); +} + + +void +po_lex_pass_obsolete_entries (flag) + int flag; +{ + pass_obsolete_entries = (flag != 0); +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/po-lex.h b/debian/gettext-kde/gettext-kde-0.10.35/src/po-lex.h new file mode 100644 index 00000000..fd95d974 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/po-lex.h @@ -0,0 +1,83 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + + 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, 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. */ + +#ifndef _PO_LEX_H +#define _PO_LEX_H + +#include <sys/types.h> +#include "error.h" + +typedef struct lex_pos_ty lex_pos_ty; +struct lex_pos_ty +{ + char *file_name; + size_t line_number; +}; + + +/* Global variables from po-lex.c. */ +extern lex_pos_ty gram_pos; +extern size_t gram_max_allowed_errors; + + +void lex_open PARAMS ((const char *__fname)); +void lex_close PARAMS ((void)); +int po_gram_lex PARAMS ((void)); +void po_lex_pass_comments PARAMS ((int __flag)); +void po_lex_pass_obsolete_entries PARAMS ((int __flag)); + + +/* GCC is smart enough to allow optimizations like this. */ +#if __STDC__ && defined __GNUC__ && __GNUC__ >= 2 + + +/* CAUTION: If you change this macro, you must also make identical + changes to the function of the same name in src/po-lex.c */ + +# define po_gram_error(fmt, args...) \ + do { \ + error_at_line (0, 0, gram_pos.file_name, gram_pos.line_number, \ + fmt, ## args); \ + if (*fmt == '.') \ + --error_message_count; \ + else if (error_message_count >= gram_max_allowed_errors) \ + error (1, 0, _("too many errors, aborting")); \ + } while (0) + + +/* CAUTION: If you change this macro, you must also make identical + changes to the function of the same name in src/po-lex.c */ + +# define gram_error_at_line(pos, fmt, args...) \ + do { \ + error_at_line (0, 0, (pos)->file_name, (pos)->line_number, \ + fmt, ## args); \ + if (*fmt == '.') \ + --error_message_count; \ + else if (error_message_count >= gram_max_allowed_errors) \ + error (1, 0, _("too many errors, aborting")); \ + } while (0) +#else +void po_gram_error PARAMS ((const char *__fmt, ...)); +void gram_error_at_line PARAMS ((const lex_pos_ty *__pos, const char *__fmt, + ...)); +#endif + + +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/po.c b/debian/gettext-kde/gettext-kde-0.10.35/src/po.c new file mode 100644 index 00000000..2bdadb76 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/po.c @@ -0,0 +1,253 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995, 1996, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + +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, 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. */ + + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <ctype.h> +#include <stdio.h> + +#ifdef HAVE_STDLIB_H +# include <stdlib.h> +#endif + +#include "po.h" +#include "po-hash.h" +#include "system.h" + +/* Prototypes for local functions. */ +static void po_parse_brief PARAMS ((po_ty *__pop)); +static void po_parse_debrief PARAMS ((po_ty *__pop)); + +/* Methods used indirectly by po_scan. */ +static void po_directive_domain PARAMS ((po_ty *__pop, char *__name)); +static void po_directive_message PARAMS ((po_ty *__pop, char *__msgid, + lex_pos_ty *__msgid_pos, + char *__msgstr, + lex_pos_ty *__msgstr_pos)); +static void po_comment PARAMS ((po_ty *__pop, const char *__s)); +static void po_comment_dot PARAMS ((po_ty *__pop, const char *__s)); +static void po_comment_filepos PARAMS ((po_ty *__pop, const char *__name, + int __line)); +static void po_comment_special PARAMS ((po_ty *pop, const char *s)); + +/* Local variables. */ +static po_ty *callback_arg; + + +po_ty * +po_alloc (pomp) + po_method_ty *pomp; +{ + po_ty *pop; + + pop = xmalloc (pomp->size); + pop->method = pomp; + if (pomp->constructor) + pomp->constructor (pop); + return pop; +} + + +void +po_free (pop) + po_ty *pop; +{ + if (pop->method->destructor) + pop->method->destructor (pop); + free (pop); +} + + +void +po_scan (pop, filename) + po_ty *pop; + const char *filename; +{ + extern int po_gram_parse PARAMS ((void)); + + /* The parse will call the po_callback_... functions (see below) + when the various directive are recognised. The callback_arg + variable is used to tell these functions which instance is to + have the relevant method invoked. */ + callback_arg = pop; + + /* Open the file and parse it. */ + lex_open (filename); + po_parse_brief (pop); + po_gram_parse (); + po_parse_debrief (pop); + lex_close (); + callback_arg = 0; +} + + +static void +po_parse_brief (pop) + po_ty *pop; +{ + if (pop->method->parse_brief) + pop->method->parse_brief (pop); +} + + +static void +po_parse_debrief (pop) + po_ty *pop; +{ + if (pop->method->parse_debrief) + pop->method->parse_debrief (pop); +} + + +static void +po_directive_domain (pop, name) + po_ty *pop; + char *name; +{ + if (pop->method->directive_domain) + pop->method->directive_domain (pop, name); +} + + +void +po_callback_domain (name) + char *name; +{ + /* assert(callback_arg); */ + po_directive_domain (callback_arg, name); +} + + +static void +po_directive_message (pop, msgid, msgid_pos, msgstr, msgstr_pos) + po_ty *pop; + char *msgid; + lex_pos_ty *msgid_pos; + char *msgstr; + lex_pos_ty *msgstr_pos; +{ + if (pop->method->directive_message) + pop->method->directive_message (pop, msgid, msgid_pos, msgstr, msgstr_pos); +} + + +void +po_callback_message (msgid, msgid_pos, msgstr, msgstr_pos) + char *msgid; + lex_pos_ty *msgid_pos; + char *msgstr; + lex_pos_ty *msgstr_pos; +{ + /* assert(callback_arg); */ + po_directive_message (callback_arg, msgid, msgid_pos, msgstr, msgstr_pos); +} + + +static void +po_comment_special (pop, s) + po_ty *pop; + const char *s; +{ + if (pop->method->comment_special != NULL) + pop->method->comment_special (pop, s); +} + + +static void +po_comment (pop, s) + po_ty *pop; + const char *s; +{ + if (pop->method->comment != NULL) + pop->method->comment (pop, s); +} + + +static void +po_comment_dot (pop, s) + po_ty *pop; + const char *s; +{ + if (pop->method->comment_dot != NULL) + pop->method->comment_dot (pop, s); +} + + +/* This function is called by po_gram_lex() whenever a comment is + seen. It analyzes the comment to see what sort it is, and then + dispatces it to the appropriate method. */ +void +po_callback_comment (s) + const char *s; +{ + /* assert(callback_arg); */ + if (*s == '.') + po_comment_dot (callback_arg, s + 1); + else if (*s == ':') + { + /* Parse the file location string. If the parse succeeds, the + appropriate callback will be invoked. If the parse fails, + the po_hash_parse function will return non-zero - so pretend + it was a normal comment. */ + if (po_hash (s + 1) == 0) + /* Do nothing, it is a GNU-style file pos line. */ ; + else + po_comment (callback_arg, s + 1); + } + else if (*s == ',' || *s == '!') + /* Get all entries in the special comment line. */ + po_comment_special (callback_arg, s + 1); + else + { + /* It looks like a plain vanilla comment, but Solaris-style file + position lines do, too. Rather than parse the lot, only look + at lines that could start with "# File..." This minimizes + memory leaks on failed parses. If the parse succeeds, the + appropriate callback will be invoked. */ + if (s[0] == ' ' && (s[1] == 'F' || s[1] == 'f') && s[2] == 'i' + && po_hash (s) == 0) + /* Do nothing, it is a Sun-style file pos line. */ ; + else + po_comment (callback_arg, s); + } +} + + +static void +po_comment_filepos (pop, name, line) + po_ty *pop; + const char *name; + int line; +{ + if (pop->method->comment_filepos) + pop->method->comment_filepos (pop, name, line); +} + + +void +po_callback_comment_filepos (name, line) + const char *name; + int line; +{ + /* assert(callback_arg); */ + po_comment_filepos (callback_arg, name, line); +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/po.h b/debian/gettext-kde/gettext-kde-0.10.35/src/po.h new file mode 100644 index 00000000..4800a6f5 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/po.h @@ -0,0 +1,129 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995, 1996, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + +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, 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. */ + +#ifndef SRC_PO_H +#define SRC_PO_H + +#include "po-lex.h" + +/* Note: the _t suffix is reserved by ANSI C, so the _ty suffix is + used to indicate a type name */ + +/* The following pair of structures cooperate to create an "Object" in + the OO sense, we are simply doing it manually, rather than with the + help of an OO compiler. This implementation allows polymorphism + and inheritance - more than enough for the immediate needs. + + This first structure contains pointers to functions. Each function + is a method for the class (base or derived). + + Use a NULL pointer where no action is required. */ + +/* Forward decaration. */ +struct po_ty; + + +typedef struct po_method_ty po_method_ty; +struct po_method_ty +{ + /* how many bytes to malloc for this class */ + size_t size; + + /* what to do immediately after the instance is malloc()ed */ + void (*constructor) PARAMS ((struct po_ty *__pop)); + + /* what to do immediately before the instance is free()ed */ + void (*destructor) PARAMS ((struct po_ty *__pop)); + + /* what to do with a domain directive */ + void (*directive_domain) PARAMS ((struct po_ty *__pop, char *__name)); + + /* what to do with a message directive */ + void (*directive_message) PARAMS ((struct po_ty *__pop, char *__msgid, + lex_pos_ty *__msgid_pos, char *__msgstr, + lex_pos_ty *__msgstr_pos)); + + /* This method is invoked before the parse, but after the file is + opened by the lexer. */ + void (*parse_brief) PARAMS ((struct po_ty *__pop)); + + /* This method is invoked after the parse, but before the file is + closed by the lexer. The intention is to make consistency checks + against the file here, and emit the errors through the lex_error* + functions. */ + void (*parse_debrief) PARAMS ((struct po_ty *__pop)); + + /* What to do with a plain-vanilla comment - the expectation is that + they will be accumulated, and added to the next message + definition seen. Or completely ignored. */ + void (*comment) PARAMS ((struct po_ty *__pop, const char *__s)); + + /* What to do with a comment that starts with a dot (i.e. extracted + by xgettext) - the expectation is that they will be accumulated, + and added to the next message definition seen. Or completely + ignored. */ + void (*comment_dot) PARAMS ((struct po_ty *__pop, const char *__s)); + + /* What to do with a file position seen in a comment (i.e. a message + location comment extracted by xgettext) - the expectation is that + they will be accumulated, and added to the next message + definition seen. Or completely ignored. */ + void (*comment_filepos) PARAMS ((struct po_ty *__pop, const char *__s, + int __line)); + + /* What to do with a comment that starts with a `!' - this is a + special comment. One of the possible uses is to indicate a + inexact translation. */ + void (*comment_special) PARAMS ((struct po_ty *__pop, const char *__s)); +}; + + +/* This next structure defines the base class passed to the methods. + Derived methods will often need to cast their first argument before + using it (this correponds to the implicit ``this'' argument of many + C++ implementations). + + When declaring derived classes, use the PO_BASE_TY define at the + start of the structure, to declare inherited instance variables, + etc. */ + +#define PO_BASE_TY \ + po_method_ty *method; + +typedef struct po_ty po_ty; +struct po_ty +{ + PO_BASE_TY +}; + + +po_ty *po_alloc PARAMS ((po_method_ty *__jtable)); +void po_scan PARAMS ((po_ty *__pop, const char *__filename)); +void po_free PARAMS ((po_ty *__pop)); + +/* Callbacks used by po-gram.y or po-hash.y or po-lex.c, indirectly + from po_scan. */ +void po_callback_domain PARAMS ((char *__name)); +void po_callback_message PARAMS ((char *__msgid, lex_pos_ty *__msgid_pos, + char *__msgstr, lex_pos_ty *__msgstr_pos)); +void po_callback_comment PARAMS ((const char *__s)); +void po_callback_comment_dot PARAMS ((const char *__s)); +void po_callback_comment_filepos PARAMS ((const char *__s, int __line)); + +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/str-list.c b/debian/gettext-kde/gettext-kde-0.10.35/src/str-list.c new file mode 100644 index 00000000..40007452 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/str-list.c @@ -0,0 +1,146 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + +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, 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. */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <stdio.h> + +#include "system.h" +#include "str-list.h" + + +string_list_ty * +string_list_alloc () +{ + string_list_ty *slp; + + slp = (string_list_ty *) xmalloc (sizeof (*slp)); + slp->item = NULL; + slp->nitems = 0; + slp->nitems_max = 0; + + return slp; +} + + +void +string_list_append (slp, s) + string_list_ty *slp; + const char *s; +{ + /* Grow the list. */ + if (slp->nitems >= slp->nitems_max) + { + size_t nbytes; + + slp->nitems_max = slp->nitems_max * 2 + 4; + nbytes = slp->nitems_max * sizeof (slp->item[0]); + slp->item = (const char **) xrealloc (slp->item, nbytes); + } + + /* Add a copy of the string to the end of the list. */ + slp->item[slp->nitems++] = xstrdup (s); +} + + +void +string_list_append_unique (slp, s) + string_list_ty *slp; + const char *s; +{ + size_t j; + + /* Do not if the string is already in the list. */ + for (j = 0; j < slp->nitems; ++j) + if (strcmp (slp->item[j], s) == 0) + return; + + /* Grow the list. */ + if (slp->nitems >= slp->nitems_max) + { + slp->nitems_max = slp->nitems_max * 2 + 4; + slp->item = (const char **) xrealloc (slp->item, + slp->nitems_max + * sizeof (slp->item[0])); + } + + /* Add a copy of the string to the end of the list. */ + slp->item[slp->nitems++] = xstrdup (s); +} + + +void +string_list_free (slp) + string_list_ty *slp; +{ + size_t j; + + for (j = 0; j < slp->nitems; ++j) + free ((char *) slp->item[j]); + if (slp->item != NULL) + free (slp->item); + free (slp); +} + + +char * +string_list_join (slp) + const string_list_ty *slp; +{ + size_t len; + size_t j; + char *result; + size_t pos; + + len = 1; + for (j = 0; j < slp->nitems; ++j) + { + if (j) + ++len; + len += strlen (slp->item[j]); + } + result = xmalloc (len); + pos = 0; + for (j = 0; j < slp->nitems; ++j) + { + if (j) + result[pos++] = ' '; + len = strlen (slp->item[j]); + memcpy (result + pos, slp->item[j], len); + pos += len; + } + result[pos] = 0; + return result; +} + + +int +string_list_member (slp, s) + const string_list_ty *slp; + const char *s; +{ + size_t j; + + for (j = 0; j < slp->nitems; ++j) + if (strcmp (slp->item[j], s) == 0) + return 1; + return 0; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/str-list.h b/debian/gettext-kde/gettext-kde-0.10.35/src/str-list.h new file mode 100644 index 00000000..9e2b9981 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/str-list.h @@ -0,0 +1,50 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995, 1996, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + +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, 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. */ + +#ifndef SRC_STR_LIST_H +#define SRC_STR_LIST_H 1 + +#ifdef STC_HEADERS +# define __need_size_t +# define __need_NULL +# include <stddef.h> +#else +# include <sys/types.h> +# include <stdio.h> +#endif + +/* Type describing list of strings implemented using a dynamic array. */ +typedef struct string_list_ty string_list_ty; +struct string_list_ty +{ + const char **item; + size_t nitems; + size_t nitems_max; +}; + + +string_list_ty *string_list_alloc PARAMS ((void)); +void string_list_append PARAMS ((string_list_ty *__slp, const char *__s)); +void string_list_append_unique PARAMS ((string_list_ty *__slp, + const char *__s)); +void string_list_free PARAMS ((string_list_ty *__slp)); +char *string_list_join PARAMS ((const string_list_ty *__slp)); +int string_list_member PARAMS ((const string_list_ty *__slp, const char *__s)); + +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/xget-lex.c b/debian/gettext-kde/gettext-kde-0.10.35/src/xget-lex.c new file mode 100644 index 00000000..a55850b0 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/xget-lex.c @@ -0,0 +1,1322 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <ctype.h> +#include <errno.h> +#include <stdio.h> + +#ifdef STDC_HEADERS +# include <stdlib.h> +#endif + +#include "dir-list.h" +#include "error.h" +#include "system.h" +#include "libgettext.h" +#include "str-list.h" +#include "xget-lex.h" + +#ifndef errno +extern int errno; +#endif + +#define _(s) gettext(s) + + +/* The ANSI C standard defines several phases of translation: + + 1. Terminate line by \n, regardless of the external representation + of a text line. Stdio does this for us. + + 2. Convert trigraphs to their single character equivalents. + + 3. Concatenate each line ending in backslash (\) with the following + line. + + 4. Replace each comment with a space character. + + 5. Parse each resulting logical line as preprocessing tokens a + white space. + + 6. Recognize and carry out directives (it also expands macros on + non-directive lines, which we do not do here). + + 7. Replaces escape sequences within character strings with their + single character equivalents (we do this in step 5, because we + don't have to worry about the #include argument). + + 8. Concatenates adjacent string literals to form single string + literals (because we don't expand macros, there are a few things + we will miss). + + 9. Converts the remaining preprocessing tokens to C tokens and + discards any white space from the translation unit. + + This lexer implements the above, and presents the scanner (in + xgettext.c) with a stream of C tokens. The comments are + accumulated in a buffer, and given to xgettext when asked for. */ + +enum token_type_ty +{ + token_type_character_constant = 0, + token_type_eof = 1, + token_type_eoln = 2, + token_type_hash = 3, + token_type_lp = 4, + token_type_rp = 5, + token_type_comma = 6, + token_type_name = 7, + token_type_number = 8, + token_type_string_literal = 9, + token_type_symbol = 10, + token_type_white_space = 11 +}; +typedef enum token_type_ty token_type_ty; + +typedef struct token_ty token_ty; +struct token_ty +{ + token_type_ty type; + char *string; + long number; + int line_number; +}; + + +static const char *file_name; +static char *logical_file_name; +static int line_number; +static FILE *fp; +static int trigraphs; +static int cplusplus_comments; +static string_list_ty *comment; +static string_list_ty *keywords; +static int default_keywords = 1; + +/* These are for tracking whether comments count as immediately before + keyword. */ +static int last_comment_line = -1; +static int last_non_comment_line = -1; +static int newline_count = 0; + + +/* Prototypes for local functions. */ +static int phase1_getc PARAMS ((void)); +static void phase1_ungetc PARAMS ((int __c)); +static int phase2_getc PARAMS ((void)); +static void phase2_ungetc PARAMS ((int __c)); +static int phase3_getc PARAMS ((void)); +static void phase3_ungetc PARAMS ((int __c)); +static int phase4_getc PARAMS ((void)); +static void phase4_ungetc PARAMS ((int __c)); +static int phase7_getc PARAMS ((void)); +static void phase7_ungetc PARAMS ((int __c)); +static void phase5_get PARAMS ((token_ty *__tp)); +static void phase5_unget PARAMS ((token_ty *__tp)); +static void phaseX_get PARAMS ((token_ty *__tp)); +static void phase6_get PARAMS ((token_ty *__tp)); +static void phase6_unget PARAMS ((token_ty *__tp)); +static void phase8_get PARAMS ((token_ty *__tp)); + + + +void +xgettext_lex_open (fn) + const char *fn; +{ + char *new_name; + + if (strcmp (fn, "-") == 0) + { + new_name = xstrdup (_("standard input")); + logical_file_name = xstrdup (new_name); + fp = stdin; + } + else if (*fn == '/') + { + new_name = xstrdup (fn); + fp = fopen (fn, "r"); + if (fp == NULL) + error (EXIT_FAILURE, errno, _("\ +error while opening \"%s\" for reading"), fn); + logical_file_name = xstrdup (new_name); + } + else + { + size_t len1, len2; + int j; + const char *dir; + + len2 = strlen (fn); + for (j = 0; ; ++j) + { + dir = dir_list_nth (j); + if (dir == NULL) + error (EXIT_FAILURE, ENOENT, _("\ +error while opening \"%s\" for reading"), fn); + + if (dir[0] =='.' && dir[1] == '\0') + new_name = xstrdup (fn); + else + { + len1 = strlen (dir); + new_name = xmalloc (len1 + len2 + 2); + stpcpy (stpcpy (stpcpy (new_name, dir), "/"), fn); + } + + fp = fopen (new_name, "r"); + if (fp != NULL) + break; + + if (errno != ENOENT) + error (EXIT_FAILURE, errno, _("\ +error while opening \"%s\" for reading"), new_name); + free (new_name); + } + + /* Note that the NEW_NAME variable contains the actual file name + and the logical file name is what is reported by xgettext. In + this case NEW_NAME is set to the file which was found along the + directory search path, and LOGICAL_FILE_NAME is is set to the + file name which was searched for. */ + logical_file_name = xstrdup (fn); + } + + file_name = new_name; + line_number = 1; +} + + +void +xgettext_lex_close () +{ + if (fp != stdin) + fclose (fp); + free ((char *) file_name); + free (logical_file_name); + fp = NULL; + file_name = NULL; + logical_file_name = NULL; + line_number = 0; +} + + +/* 1. Terminate line by \n, regardless of the external representation of + a text line. Stdio does this for us, we just need to check that + there are no I/O errors, and cope with potentially 2 characters of + pushback, not just the one that ungetc can cope with. */ + +/* Maximum used guaranteed to be < 4. */ +static unsigned char phase1_pushback[4]; +static int phase1_pushback_length; + + +static int +phase1_getc () +{ + int c; + + if (phase1_pushback_length) + { + c = phase1_pushback[--phase1_pushback_length]; + if (c == '\n') + ++line_number; + return c; + } + while (1) + { + c = getc (fp); + switch (c) + { + case EOF: + if (ferror (fp)) + { + bomb: + error (EXIT_FAILURE, errno, _("\ +error while reading \"%s\""), file_name); + } + return EOF; + + case '\n': + ++line_number; + return '\n'; + + case '\\': + c = getc (fp); + if (c == EOF) + { + if (ferror (fp)) + goto bomb; + return '\\'; + } + if (c != '\n') + { + ungetc (c, fp); + return '\\'; + } + ++line_number; + break; + + default: + return c; + } + } +} + + +static void +phase1_ungetc (c) + int c; +{ + switch (c) + { + case EOF: + break; + + case '\n': + --line_number; + /* FALLTHROUGH */ + + default: + phase1_pushback[phase1_pushback_length++] = c; + break; + } +} + + +/* 2. Convert trigraphs to their single character equivalents. Most + sane human beings vomit copiously at the mention of trigraphs, which + is why they are on option. */ + +/* Maximum used guaranteed to be < 4. */ +static unsigned char phase2_pushback[4]; +static int phase2_pushback_length; + + +static int +phase2_getc () +{ + int c; + + if (phase2_pushback_length) + return phase2_pushback[--phase2_pushback_length]; + if (!trigraphs) + return phase1_getc (); + + c = phase1_getc (); + if (c != '?') + return c; + c = phase1_getc (); + if (c != '?') + { + phase1_ungetc (c); + return '?'; + } + c = phase1_getc (); + switch (c) + { + case '(': + return '['; + case '/': + return '\\'; + case ')': + return ']'; + case '\'': + return '^'; + case '<': + return '{'; + case '!': + return '|'; + case '>': + return '}'; + case '-': + return '~'; + case '#': + return '='; + } + phase1_ungetc (c); + phase1_ungetc ('?'); + return '?'; +} + + +static void +phase2_ungetc (c) + int c; +{ + if (c != EOF) + phase2_pushback[phase2_pushback_length++] = c; +} + + +/* 3. Concatenate each line ending in backslash (\) with the following + line. Basically, all you need to do is elide "\\\n" sequences from + the input. */ + +/* Maximum used guaranteed to be < 4. */ +static unsigned char phase3_pushback[4]; +static int phase3_pushback_length; + + +static int +phase3_getc () +{ + if (phase3_pushback_length) + return phase3_pushback[--phase3_pushback_length]; + for (;;) + { + int c = phase2_getc (); + if (c != '\\') + return c; + c = phase2_getc (); + if (c != '\n') + { + phase2_ungetc (c); + return '\\'; + } + } +} + + +static void +phase3_ungetc (c) + int c; +{ + if (c != EOF) + phase3_pushback[phase3_pushback_length++] = c; +} + + +/* 4. Replace each comment that is not inside a character constant or + string literal with a space character. We need to remember the + comment for later, because it may be attached to a keyword string. + We also optionally understand C++ comments. */ + +static int +phase4_getc () +{ + static char *buffer; + static size_t bufmax; + size_t buflen; + int c; + int state; + + c = phase3_getc (); + if (c != '/') + return c; + c = phase3_getc (); + switch (c) + { + default: + phase3_ungetc (c); + return '/'; + + case '*': + /* C comment. */ + buflen = 0; + state = 0; + if (comment == NULL) + comment = string_list_alloc (); + while (1) + { + c = phase3_getc (); + if (c == EOF) + break; + /* We skip all leading white space, but not EOLs. */ + if (buflen == 0 && isspace (c) && c != '\n') + continue; + if (buflen >= bufmax) + { + bufmax += 100; + buffer = xrealloc (buffer, bufmax); + } + buffer[buflen++] = c; + switch (c) + { + case '\n': + --buflen; + while (buflen >= 1 && (buffer[buflen - 1] == ' ' + || buffer[buflen - 1] == '\t')) + --buflen; + buffer[buflen] = 0; + string_list_append (comment, buffer); + buflen = 0; + state = 0; + continue; + + case '*': + state = 1; + continue; + + case '/': + if (state == 1) + { + buflen -= 2; + while (buflen >= 1 && (buffer[buflen - 1] == ' ' + || buffer[buflen - 1] == '\t')) + --buflen; + buffer[buflen] = 0; + string_list_append (comment, buffer); + break; + } + /* FALLTHROUGH */ + + default: + state = 0; + continue; + } + break; + } + last_comment_line = newline_count; + return ' '; + + case '/': + /* C++ comment. */ + if (!cplusplus_comments) + { + phase3_ungetc ('/'); + return '/'; + } + buflen = 0; + while (1) + { + c = phase3_getc (); + if (c == '\n' || c == EOF) + break; + if (buflen >= bufmax) + { + bufmax += 100; + buffer = xrealloc (buffer, bufmax); + } + buffer[buflen++] = c; + } + if (buflen >= bufmax) + { + bufmax += 100; + buffer = xrealloc (buffer, bufmax); + } + buffer[buflen] = 0; + if (comment == NULL) + comment = string_list_alloc (); + string_list_append (comment, buffer); + last_comment_line = newline_count; + return '\n'; + } +} + + +static void +phase4_ungetc (c) + int c; +{ + phase3_ungetc (c); +} + + +/* 7. Replace escape sequences within character strings with their + single character equivalents. This is called from phase 5, because + we don't have to worry about the #include argument. There are + pathological cases which could bite us (like the DOS directory + separator), but just pretend it can't happen. */ + +#define P7_QUOTES (1000 + '"') +#define P7_QUOTE (1000 + '\'') +#define P7_NEWLINE (1000 + '\n') + +static int +phase7_getc () +{ + int c, n, j; + + /* Use phase 3, because phase 4 elides comments. */ + c = phase3_getc (); + + /* Return a magic newline indicator, so that we can distinguish + between the user requesting a newline in the string (e.g. using + "\n" or "\15") from the user failing to terminate the string or + character constant. The ANSI C standard says: 3.1.3.4 Character + Constants contain ``any character except single quote, backslash or + newline; or an escape sequence'' and 3.1.4 String Literals contain + ``any character except double quote, backslash or newline; or an + escape sequence''. + + Most compilers give a fatal error in this case, however gcc is + stupidly silent, even though this is a very common typo. OK, so + gcc --pedantic will tell me, but that gripes about too much other + stuff. Could I have a ``gcc -Wnewline-in-string'' option, or + better yet a ``gcc -fno-newline-in-string'' option, please? Gcc is + also inconsistent between string literals and character constants: + you may not embed newlines in character constants; try it, you get + a useful diagnostic. --PMiller */ + if (c == '\n') + return P7_NEWLINE; + + if (c == '"') + return P7_QUOTES; + if (c == '\'') + return P7_QUOTE; + if (c != '\\') + return c; + c = phase3_getc (); + switch (c) + { + default: + /* Unknown escape sequences really should be an error, but just + ignore them, and let the real compiler complain. */ + phase3_ungetc (c); + return '\\'; + + case '"': + case '\'': + case '?': + case '\\': + return c; + + /* The \a and \v escapes were added by the ANSI C Standard. + Prior to the Standard, most compilers did not have them. + Because we need the same program on all platforms we don't + provide support for them here. + + The gcc sources comment that \a is commonly available in + pre-ANSI compilers. --PMiller */ + + case 'b': + return '\b'; + + /* The \e escape is preculiar to gcc, and assumes an ASCII + character set (or superset). We don't provide support for it + here. */ + + case 'f': + return '\f'; + case 'n': + return '\n'; + case 'r': + return '\r'; + case 't': + return '\t'; + + case 'x': + c = phase3_getc (); + switch (c) + { + default: + phase3_ungetc (c); + phase3_ungetc ('x'); + return '\\'; + + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + break; + } + n = 0; + for (;;) + { + switch (c) + { + default: + phase3_ungetc (c); + return n; + break; + + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + n = n * 16 + c - '0'; + break;; + + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + n = n * 16 + 10 + c - 'A'; + break; + + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + n = n * 16 + 10 + c - 'a'; + break; + } + c = phase3_getc (); + } + return n; + + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + n = 0; + for (j = 0; j < 3; ++j) + { + n = n * 8 + c - '0'; + c = phase3_getc (); + switch (c) + { + default: + break; + + case '0': case '1': case '2': case '3': + case '4': case '5': case '6': case '7': + continue; + } + break; + } + phase3_ungetc (c); + return n; + } +} + + +static void +phase7_ungetc (c) + int c; +{ + phase3_ungetc (c); +} + + +/* 5. Parse each resulting logical line as preprocessing tokens and + white space. Preprocessing tokens and C tokens don't always match. */ + +/* Maximum used guaranteed to be < 4. */ +static token_ty phase5_pushback[4]; +static int phase5_pushback_length; + + +static void +phase5_get (tp) + token_ty *tp; +{ + static char *buffer; + static int bufmax; + int bufpos; + int c; + + if (phase5_pushback_length) + { + *tp = phase5_pushback[--phase5_pushback_length]; + return; + } + tp->string = 0; + tp->number = 0; + tp->line_number = line_number; + c = phase4_getc (); + switch (c) + { + case EOF: + tp->type = token_type_eof; + return; + + case '\n': + tp->type = token_type_eoln; + return; + + case ' ': + case '\f': + case '\t': + for (;;) + { + c = phase4_getc (); + switch (c) + { + case ' ': + case '\f': + case '\t': + continue; + + default: + phase4_ungetc (c); + break; + } + break; + } + tp->type = token_type_white_space; + return; + + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': + case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': + case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': + case 'V': case 'W': case 'X': case 'Y': case 'Z': + case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': + case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': + case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': + case 'v': case 'w': case 'x': case 'y': case 'z': + bufpos = 0; + for (;;) + { + if (bufpos >= bufmax) + { + bufmax += 100; + buffer = xrealloc (buffer, bufmax); + } + buffer[bufpos++] = c; + c = phase4_getc (); + switch (c) + { + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + continue; + + default: + phase4_ungetc (c); + break; + } + break; + } + if (bufpos >= bufmax) + { + bufmax += 100; + buffer = xrealloc (buffer, bufmax); + } + buffer[bufpos] = 0; + tp->string = xstrdup (buffer); + tp->type = token_type_name; + return; + + case '.': + c = phase4_getc (); + phase4_ungetc (c); + switch (c) + { + default: + tp->type = token_type_symbol; + return; + + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + c = '.'; + break; + } + /* FALLTHROUGH */ + + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + /* The preprocessing number token is more "generous" than the C + number tokens. This is mostly due to token pasting (another + thing we can ignore here). */ + bufpos = 0; + while (1) + { + if (bufpos >= bufmax) + { + bufmax += 100; + buffer = xrealloc (buffer, bufmax); + } + buffer[bufpos++] = c; + c = phase4_getc (); + switch (c) + { + case 'e': + case 'E': + if (bufpos >= bufmax) + { + bufmax += 100; + buffer = xrealloc (buffer, bufmax); + } + buffer[bufpos++] = c; + c = phase4_getc (); + if (c != '+' || c != '-') + { + phase4_ungetc (c); + break; + } + continue; + + case 'A': case 'B': case 'C': case 'D': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case 'a': case 'b': case 'c': case 'd': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case '.': + continue; + + default: + phase4_ungetc (c); + break; + } + break; + } + if (bufpos >= bufmax) + { + bufmax += 100; + buffer = xrealloc (buffer, bufmax); + } + buffer[bufpos] = 0; + tp->type = token_type_number; + tp->number = atol (buffer); + return; + + case '\'': + /* We could worry about the 'L' before wide character constants, + but ignoring it has no effect unless one of the keywords is + "L". Just pretend it won't happen. Also, we don't need to + remember the character constant. */ + while (1) + { + c = phase7_getc (); + if (c == P7_NEWLINE) + { + error (0, 0, _("%s:%d: warning: unterminated character constant"), + logical_file_name, line_number - 1); + phase7_ungetc ('\n'); + break; + } + if (c == EOF || c == P7_QUOTE) + break; + } + tp->type = token_type_character_constant; + return; + + case '"': + /* We could worry about the 'L' before wide string constants, + but since gettext's argument is not a wide character string, + let the compiler complain about the argument not matching the + prototype. Just pretend it won't happen. */ + bufpos = 0; + while (1) + { + c = phase7_getc (); + if (c == P7_NEWLINE) + { + error (0, 0, _("%s:%d: warning: unterminated string literal"), + logical_file_name, line_number - 1); + phase7_ungetc ('\n'); + break; + } + if (c == EOF || c == P7_QUOTES) + break; + if (c == P7_QUOTE) + c = '\''; + if (bufpos >= bufmax) + { + bufmax += 100; + buffer = xrealloc (buffer, bufmax); + } + buffer[bufpos++] = c; + } + if (bufpos >= bufmax) + { + bufmax += 100; + buffer = xrealloc (buffer, bufmax); + } + buffer[bufpos] = 0; + tp->type = token_type_string_literal; + tp->string = xstrdup (buffer); + return; + + case '(': + tp->type = token_type_lp; + return; + + case ')': + tp->type = token_type_rp; + return; + + case ',': + tp->type = token_type_comma; + return; + + case '#': + tp->type = token_type_hash; + return; + + default: + /* We could carefully recognize each of the 2 and 3 character + operators, but it is not necessary, as we only need to recognize + gettext invocations. Don't bother. */ + tp->type = token_type_symbol; + return; + } +} + + +static void +phase5_unget (tp) + token_ty *tp; +{ + if (tp->type != token_type_eof) + phase5_pushback[phase5_pushback_length++] = *tp; +} + + +/* X. Recognize a leading # symbol. Leave leading hash as a hash, but + turn hash in the middle of a line into a plain symbol token. This + makes the phase 6 easier. */ + +static void +phaseX_get (tp) + token_ty *tp; +{ + static int middle; + token_ty tmp; + + phase5_get (tp); + if (middle) + { + switch (tp->type) + { + case token_type_eoln: + case token_type_eof: + middle = 0; + break; + + case token_type_hash: + tp->type = token_type_symbol; + break; + + default: + break; + } + } + else + { + switch (tp->type) + { + case token_type_eoln: + case token_type_eof: + break; + + case token_type_white_space: + tmp = *tp; + phase5_get (tp); + if (tp->type != token_type_hash) + { + phase5_unget (tp); + *tp = tmp; + middle = 1; + return; + } + + /* Discard the leading white space token, the hash is all + phase 6 is interested in. */ + if (tp->type != token_type_eof && tp->type != token_type_eoln) + middle = 1; + break; + + default: + middle = 1; + break; + } + } +} + + +/* 6. Recognize and carry out directives (it also expands macros on + non-directive lines, which we do not do here). The only directive + we care about is the #line directive. We throw all the others + away. */ + +/* Maximum used guaranteed to be < 4. */ +static token_ty phase6_pushback[4]; +static int phase6_pushback_length; + + +static void +phase6_get (tp) + token_ty *tp; +{ + static token_ty *buf; + static int bufmax; + int bufpos; + int j; + + if (phase6_pushback_length) + { + *tp = phase6_pushback[--phase6_pushback_length]; + return; + } + while (1) + { + /* Get the next token. If it is not a '#' at the beginning of a + line, return immediately. Be careful of white space. */ + phaseX_get (tp); + if (tp->type != token_type_hash) + return; + + /* Accumulate the rest of the directive in a buffer. Work out + what it is later. */ + bufpos = 0; + while (1) + { + phaseX_get (tp); + if (tp->type == token_type_eoln || tp->type == token_type_eof) + break; + + /* White space would be important in the directive, if we + were interested in the #define directive. But we are + going to ignore the #define directive, so just throw + white space away. */ + if (tp->type == token_type_white_space) + continue; + + if (bufpos >= bufmax) + { + bufmax += 100; + buf = xrealloc (buf, bufmax * sizeof (buf[0])); + } + buf[bufpos++] = *tp; + } + + /* If it is a #line directive, with no macros to expand, act on + it. Ignore all other directives. */ + if (bufpos >= 3 && buf[0].type == token_type_name + && strcmp (buf[0].string, "line") == 0 + && buf[1].type == token_type_number + && buf[2].type == token_type_string_literal) + { + free (logical_file_name); + logical_file_name = xstrdup (buf[2].string); + line_number = buf[1].number; + } + if (bufpos >= 2 && buf[0].type == token_type_number + && buf[1].type == token_type_string_literal) + { + free (logical_file_name); + logical_file_name = xstrdup (buf[1].string); + line_number = buf[0].number; + } + + /* Release the storage held by the directive. */ + for (j = 0; j < bufpos; ++j) + { + switch (buf[j].type) + { + case token_type_name: + case token_type_string_literal: + free (buf[j].string); + break; + + default: + break; + } + } + + /* We must reset the selected comments. */ + xgettext_lex_comment_reset (); + } +} + + +static void +phase6_unget (tp) + token_ty *tp; +{ + if (tp->type != token_type_eof) + phase6_pushback[phase6_pushback_length++] = *tp; +} + + +/* 8. Concatenate adjacent string literals to form single string + literals (because we don't expand macros, there are a few things we + will miss). */ + +static void +phase8_get (tp) + token_ty *tp; +{ + phase6_get (tp); + if (tp->type != token_type_string_literal) + return; + while (1) + { + token_ty tmp; + size_t len; + + phase6_get (&tmp); + if (tmp.type == token_type_white_space) + continue; + if (tmp.type == token_type_eoln) + continue; + if (tmp.type != token_type_string_literal) + { + phase6_unget (&tmp); + return; + } + len = strlen (tp->string); + tp->string = xrealloc (tp->string, len + strlen (tmp.string) + 1); + strcpy (tp->string + len, tmp.string); + free (tmp.string); + } +} + + +/* 9. Convert the remaining preprocessing tokens to C tokens and + discards any white space from the translation unit. */ + +void +xgettext_lex (tp) + xgettext_token_ty *tp; +{ + while (1) + { + token_ty token; + + phase8_get (&token); + switch (token.type) + { + case token_type_eof: + newline_count = 0; + last_comment_line = -1; + last_non_comment_line = -1; + tp->type = xgettext_token_type_eof; + return; + + case token_type_white_space: + break; + + case token_type_eoln: + /* We have to track the last occurrence of a string. One + mode of xgettext allows to group an extracted message + with a comment for documentation. The rule which states + which comment is assumed to be grouped with the message + says it should immediately precede it. Our + interpretation: between the last line of the comment and + the line in which the keyword is found must be no line + with non-white space tokens. */ + ++newline_count; + if (last_non_comment_line > last_comment_line) + xgettext_lex_comment_reset (); + break; + + case token_type_name: + last_non_comment_line = newline_count; + + if (default_keywords) + { + xgettext_lex_keyword ("gettext"); + xgettext_lex_keyword ("dgettext"); + xgettext_lex_keyword ("dcgettext"); + xgettext_lex_keyword ("gettext_noop"); + default_keywords = 0; + } + + if (string_list_member (keywords, token.string)) + { + tp->type = (strcmp (token.string, "dgettext") == 0 + || strcmp (token.string, "dcgettext") == 0) + ? xgettext_token_type_keyword2 : xgettext_token_type_keyword1; + } + else + tp->type = xgettext_token_type_symbol; + free (token.string); + return; + + case token_type_lp: + last_non_comment_line = newline_count; + + tp->type = xgettext_token_type_lp; + return; + + case token_type_rp: + last_non_comment_line = newline_count; + tp->type = xgettext_token_type_rp; + return; + + case token_type_comma: + last_non_comment_line = newline_count; + + tp->type = xgettext_token_type_comma; + return; + + case token_type_string_literal: + last_non_comment_line = newline_count; + + tp->type = xgettext_token_type_string_literal; + tp->string = token.string; + tp->line_number = token.line_number; + tp->file_name = logical_file_name; + return; + + default: + last_non_comment_line = newline_count; + + tp->type = xgettext_token_type_symbol; + return; + } + } +} + + +void +xgettext_lex_keyword (name) + char *name; +{ + if (name == NULL) + default_keywords = 0; + else + { + if (keywords == NULL) + keywords = string_list_alloc (); + + string_list_append_unique (keywords, name); + } +} + + +const char * +xgettext_lex_comment (n) + size_t n; +{ + if (comment == NULL || n >= comment->nitems) + return NULL; + return comment->item[n]; +} + + +void +xgettext_lex_comment_reset () +{ + if (comment != NULL) + { + string_list_free (comment); + comment = NULL; + } +} + + +void +xgettext_lex_cplusplus () +{ + cplusplus_comments = 1; +} + + +void +xgettext_lex_trigraphs () +{ + trigraphs = 1; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/xget-lex.h b/debian/gettext-kde/gettext-kde-0.10.35/src/xget-lex.h new file mode 100644 index 00000000..3240957f --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/xget-lex.h @@ -0,0 +1,58 @@ +/* GNU gettext - internationalization aids + Copyright (C) 1995, 1996, 1998 Free Software Foundation, Inc. + + This file was written by Peter Miller <[email protected]> + +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, 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. */ + +#ifndef SRC_XGET_LEX_H +#define SRC_XGET_LEX_H + +enum xgettext_token_type_ty +{ + xgettext_token_type_eof = 0, + xgettext_token_type_keyword1 = 1, + xgettext_token_type_keyword2 = 2, + xgettext_token_type_lp = 3, + xgettext_token_type_rp = 4, + xgettext_token_type_comma = 5, + xgettext_token_type_string_literal = 6, + xgettext_token_type_symbol = 7 +}; +typedef enum xgettext_token_type_ty xgettext_token_type_ty; + +typedef struct xgettext_token_ty xgettext_token_ty; +struct xgettext_token_ty +{ + xgettext_token_type_ty type; + + /* These 3 are only set for xgettext_token_type_string_literal. */ + char *string; + int line_number; + char *file_name; +}; + + +void xgettext_lex_open PARAMS ((const char *__file_name)); +void xgettext_lex_close PARAMS ((void)); +void xgettext_lex PARAMS ((xgettext_token_ty *__tp)); +const char *xgettext_lex_comment PARAMS ((size_t __n)); +void xgettext_lex_comment_reset PARAMS ((void)); +/* void xgettext_lex_filepos PARAMS ((char **, int *)); FIXME needed? */ +void xgettext_lex_keyword PARAMS ((char *__name)); +void xgettext_lex_cplusplus PARAMS ((void)); +void xgettext_lex_trigraphs PARAMS ((void)); + +#endif diff --git a/debian/gettext-kde/gettext-kde-0.10.35/src/xgettext.c b/debian/gettext-kde/gettext-kde-0.10.35/src/xgettext.c new file mode 100644 index 00000000..b44142f4 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/src/xgettext.c @@ -0,0 +1,1433 @@ +/* Extracts strings from C source file to Uniforum style .po file. + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Written by Ulrich Drepper <[email protected]>, April 1995. + + 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, 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. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <ctype.h> +#include <errno.h> +#include <getopt.h> +#include <sys/param.h> +#include <pwd.h> +#include <stdio.h> +#include <time.h> +#include <sys/types.h> + +#ifdef STDC_HEADERS +# include <stdlib.h> +#endif + +#ifdef HAVE_LOCALE_H +# include <locale.h> +#endif + +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif + +#ifndef errno +extern int errno; +#endif + +#include "dir-list.h" +#include "error.h" +#include "hash.h" +#include "getline.h" +#include "system.h" +#include "po.h" +#include "message.h" +#include "xget-lex.h" +#include "printf-parse.h" + +#include "gettext.h" +#include "domain.h" +#include <libintl.h> + +#ifndef _POSIX_VERSION +struct passwd *getpwuid (); +#endif + + +/* A convenience macro. I don't like writing gettext() every time. */ +#define _(str) gettext (str) + + +/* If nonzero add all comments immediately preceding one of the keywords. */ +static int add_all_comments; + +/* If nonzero add comments for file name and line number for each msgid. */ +static int line_comment; + +/* Tag used in comment of prevailing domain. */ +static unsigned char *comment_tag; + +/* Name of default domain file. If not set defaults to messages.po. */ +static char *default_domain; + +/* If called with --debug option the output reflects whether format + string recognition is done automatically or forced by the user. */ +static int do_debug; + +/* Content of .po files with symbols to be excluded. */ +static message_list_ty *exclude; + +/* If nonzero extract all strings. */ +static int extract_all; + +/* Force output of PO file even if empty. */ +static int force_po; + +/* If nonzero a non GNU related user wants to use this. Omit the FSF + copyright in the output. */ +static int foreign_user; + +/* String used as prefix for msgstr. */ +static char *msgstr_prefix; + +/* String used as suffix for msgstr. */ +static char *msgstr_suffix; + +/* Directory in which output files are created. */ +static char *output_dir; + +/* If nonzero omit header with information about this run. */ +static int omit_header; + +/* String containing name the program is called with. */ +const char *program_name; + +/* String length from with on warning are given for possible problem + while exceeding tools limits. */ +static size_t warn_id_len; + +/* Long options. */ +static const struct option long_options[] = +{ + { "add-comments", optional_argument, NULL, 'c' }, + { "add-location", no_argument, &line_comment, 1 }, + { "c++", no_argument, NULL, 'C' }, + { "debug", no_argument, &do_debug, 1 }, + { "default-domain", required_argument, NULL, 'd' }, + { "directory", required_argument, NULL, 'D' }, + { "escape", no_argument, NULL, 'E' }, + { "exclude-file", required_argument, NULL, 'x' }, + { "extract-all", no_argument, &extract_all, 1 }, + { "files-from", required_argument, NULL, 'f' }, + { "force-po", no_argument, &force_po, 1 }, + { "foreign-user", no_argument, &foreign_user, 1 }, + { "help", no_argument, NULL, 'h' }, + { "indent", no_argument, NULL, 'i' }, + { "join-existing", no_argument, NULL, 'j' }, + { "keyword", optional_argument, NULL, 'k' }, + { "language", required_argument, NULL, 'L' }, + { "msgstr-prefix", optional_argument, NULL, 'm' }, + { "msgstr-suffix", optional_argument, NULL, 'M' }, + { "no-escape", no_argument, NULL, 'e' }, + { "no-location", no_argument, &line_comment, 0 }, + { "omit-header", no_argument, &omit_header, 1 }, + { "output", required_argument, NULL, 'o' }, + { "output-dir", required_argument, NULL, 'p' }, + { "sort-by-file", no_argument, NULL, 'F' }, + { "sort-output", no_argument, NULL, 's' }, + { "strict", no_argument, NULL, 'S' }, + { "string-limit", required_argument, NULL, 'l' }, + { "trigraphs", no_argument, NULL, 'T' }, + { "version", no_argument, NULL, 'V' }, + { "width", required_argument, NULL, 'w', }, + { NULL, 0, NULL, 0 } +}; + + +/* Prototypes for local functions. */ +static void usage PARAMS ((int status)) +#if defined __GNUC__ && ((__GNUC__ == 2 && __GNUC_MINOR__ > 4) || __GNUC__ > 2) + __attribute__ ((noreturn)) +#endif +; +static void error_print PARAMS ((void)); +static string_list_ty *read_name_from_file PARAMS ((const char *__file_name)); +static void exclude_directive_domain PARAMS ((po_ty *__pop, char *__name)); +static void exclude_directive_message PARAMS ((po_ty *__pop, char *__msgid, + lex_pos_ty *__msgid_pos, + char *__msgstr, + lex_pos_ty *__msgstr_pos)); +static void read_exclusion_file PARAMS ((char *__file_name)); +static void remember_a_message PARAMS ((message_list_ty *__mlp, + xgettext_token_ty *__tp)); +static void scan_c_file PARAMS ((const char *__file_name, + message_list_ty *__mlp, int __is_cpp_file)); +static void extract_constructor PARAMS ((po_ty *__that)); +static void extract_directive_domain PARAMS ((po_ty *__that, char *__name)); +static void extract_directive_message PARAMS ((po_ty *__that, char *__msgid, + lex_pos_ty *__msgid_pos, + char *__msgstr, + lex_pos_ty *__msgstr_pos)); +static void extract_parse_brief PARAMS ((po_ty *__that)); +static void extract_comment PARAMS ((po_ty *__that, const char *__s)); +static void extract_comment_dot PARAMS ((po_ty *__that, const char *__s)); +static void extract_comment_filepos PARAMS ((po_ty *__that, const char *__name, + int __line)); +static void extract_comment_special PARAMS ((po_ty *that, const char *s)); +static void read_po_file PARAMS ((const char *__file_name, + message_list_ty *__mlp)); +static long difftm PARAMS ((const struct tm *__a, const struct tm *__b)); +static message_ty *construct_header PARAMS ((void)); +static enum is_c_format test_whether_c_format PARAMS ((const char *__s)); + + +/* The scanners must all be functions returning void and taking one + string argument and a message list argument. */ +typedef void (*scanner_fp) PARAMS ((const char *, message_list_ty *)); + +static void scanner_c PARAMS ((const char *, message_list_ty *)); +static void scanner_cxx PARAMS ((const char *, message_list_ty *)); +static const char *extension_to_language PARAMS ((const char *)); +static scanner_fp language_to_scanner PARAMS ((const char *)); + + +int +main (argc, argv) + int argc; + char *argv[]; +{ + int cnt; + int optchar; + int do_help = 0; + int do_version = 0; + message_list_ty *mlp; + int join_existing = 0; + int sort_output = 0; + int sort_by_file = 0; + char *file_name; + const char *files_from = NULL; + string_list_ty *file_list; + char *output_file = NULL; + scanner_fp scanner = NULL; + + /* Set program name for messages. */ + program_name = argv[0]; + error_print_progname = error_print; + warn_id_len = WARN_ID_LEN; + +#ifdef HAVE_SETLOCALE + /* Set locale via LC_ALL. */ + setlocale (LC_ALL, ""); +#endif + + /* Set the text message domain. */ + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + + /* Set initial value of variables. */ + line_comment = -1; + default_domain = MESSAGE_DOMAIN_DEFAULT; + + while ((optchar = getopt_long (argc, argv, + "ac::Cd:D:eEf:Fhijk::l:L:m::M::no:p:sTVw:x:", + long_options, NULL)) != EOF) + switch (optchar) + { + case '\0': /* Long option. */ + break; + case 'a': + extract_all = 1; + break; + case 'c': + if (optarg == NULL) + { + add_all_comments = 1; + comment_tag = NULL; + } + else + { + add_all_comments = 0; + comment_tag = optarg; + /* We ignore leading white space. */ + while (isspace (*comment_tag)) + ++comment_tag; + } + break; + case 'C': + scanner = language_to_scanner ("C++"); + break; + case 'd': + default_domain = optarg; + break; + case 'D': + dir_list_append (optarg); + break; + case 'e': + message_print_style_escape (0); + break; + case 'E': + message_print_style_escape (1); + break; + case 'f': + files_from = optarg; + break; + case 'F': + sort_by_file = 1; + break; + case 'h': + do_help = 1; + break; + case 'i': + message_print_style_indent (); + break; + case 'j': + join_existing = 1; + break; + case 'k': + if (optarg == NULL || *optarg != '\0') + xgettext_lex_keyword (optarg); + break; + case 'l': + { + char *endp; + size_t tmp_val = strtoul (optarg, &endp, 0); + if (endp[0] == '\0') + warn_id_len = tmp_val; + } + break; + case 'L': + scanner = language_to_scanner (optarg); + break; + case 'm': + /* -m takes an optional argument. If none is given "" is assumed. */ + msgstr_prefix = optarg == NULL ? "" : optarg; + break; + case 'M': + /* -M takes an optional argument. If none is given "" is assumed. */ + msgstr_suffix = optarg == NULL ? "" : optarg; + break; + case 'n': + line_comment = 1; + break; + case 'o': + output_file = optarg; + break; + case 'p': + { + size_t len = strlen (optarg); + + if (output_dir != NULL) + free (output_dir); + + if (optarg[len - 1] == '/') + output_dir = xstrdup (optarg); + else + { + asprintf (&output_dir, "%s/", optarg); + if (output_dir == NULL) + /* We are about to construct the absolute path to the + directory for the output files but asprintf failed. */ + error (EXIT_FAILURE, errno, _("while preparing output")); + } + } + break; + case 's': + sort_output = 1; + break; + case 'S': + message_print_style_uniforum (); + break; + case 'T': + xgettext_lex_trigraphs (); + break; + case 'V': + do_version = 1; + break; + case 'w': + { + int value; + char *endp; + value = strtol (optarg, &endp, 10); + if (endp != optarg) + message_page_width_set (value); + } + break; + case 'x': + read_exclusion_file (optarg); + break; + default: + usage (EXIT_FAILURE); + /* NOTREACHED */ + } + + /* Normalize selected options. */ + if (omit_header != 0 && line_comment < 0) + line_comment = 0; + + if (!line_comment && sort_by_file) + error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), + "--no-location", "--sort-by-file"); + + if (sort_output && sort_by_file) + error (EXIT_FAILURE, 0, _("%s and %s are mutually exclusive"), + "--sort-output", "--sort-by-file"); + + if (join_existing && strcmp (default_domain, "-") == 0) + error (EXIT_FAILURE, 0, _("\ +--join-existing cannot be used when output is written to stdout")); + + /* Version information requested. */ + if (do_version) + { + printf ("%s (GNU %s) %s\n", basename (program_name), PACKAGE, VERSION); + /* xgettext: no-wrap */ + printf (_("Copyright (C) %s Free Software Foundation, Inc.\n\ +This is free software; see the source for copying conditions. There is NO\n\ +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ +"), + "1995, 1996, 1997, 1998"); + printf (_("Written by %s.\n"), "Ulrich Drepper"); + exit (EXIT_SUCCESS); + } + + /* Help is requested. */ + if (do_help) + usage (EXIT_SUCCESS); + + /* Test whether we have some input files given. */ + if (files_from == NULL && optind >= argc) + { + error (EXIT_SUCCESS, 0, _("no input file given")); + usage (EXIT_FAILURE); + } + + /* Canonize msgstr prefix/suffix. */ + if (msgstr_prefix != NULL && msgstr_suffix == NULL) + msgstr_suffix = ""; + else if (msgstr_prefix == NULL && msgstr_suffix != NULL) + msgstr_prefix = NULL; + + /* Default output directory is the current directory. */ + if (output_dir == NULL) + output_dir = "."; + + /* Construct the name of the ouput file. If the default domain has + the special name "-" we write to stdout. */ + if (output_file) + { + if (output_file[0] == '/' || + strcmp(output_dir, ".") == 0 || strcmp(output_file, "-") == 0) + file_name = xstrdup (output_file); + else + { + /* Please do NOT add a .po suffix! */ + file_name = xmalloc (strlen (output_dir) + + strlen (default_domain) + 2); + stpcpy (stpcpy (stpcpy (file_name, output_dir), "/"), output_file); + } + } + else if (strcmp (default_domain, "-") == 0) + file_name = "-"; + else + { + file_name = (char *) xmalloc (strlen (output_dir) + + strlen (default_domain) + + sizeof (".po") + 2); + stpcpy (stpcpy (stpcpy (stpcpy (file_name, output_dir), "/"), + default_domain), ".po"); + } + + /* Determine list of files we have to process. */ + if (files_from != NULL) + file_list = read_name_from_file (files_from); + else + file_list = string_list_alloc (); + /* Append names from command line. */ + for (cnt = optind; cnt < argc; ++cnt) + string_list_append_unique (file_list, argv[cnt]); + + /* Allocate a message list to remember all the messages. */ + mlp = message_list_alloc (); + + /* Generate a header, so that we know how and when this PO file was + created. */ + if (!omit_header) + message_list_append (mlp, construct_header ()); + + /* Read in the old messages, so that we can add to them. */ + if (join_existing) + read_po_file (file_name, mlp); + + /* Process all input files. */ + for (cnt = 0; cnt < file_list->nitems; ++cnt) + { + const char *fname; + scanner_fp scan_file; + + fname = file_list->item[cnt]; + + if (scanner) + scan_file = scanner; + else + { + const char *extension; + const char *language; + + /* Work out what the file extension is. */ + extension = strrchr (fname, '/'); + if (!extension) + extension = fname; + extension = strrchr (extension, '.'); + if (extension) + ++extension; + else + extension = ""; + + /* derive the language from the extension, and the scanner + function from the language. */ + language = extension_to_language (extension); + if (language == NULL) + { + error (0, 0, _("\ +warning: file `%s' extension `%s' is unknown; will try C"), fname, extension); + language = "C"; + } + scan_file = language_to_scanner (language); + } + + /* Scan the file. */ + scan_file (fname, mlp); + } + string_list_free (file_list); + + /* Sorting the list of messages. */ + if (sort_by_file) + message_list_sort_by_filepos (mlp); + else if (sort_output) + message_list_sort_by_msgid (mlp); + + /* Write the PO file. */ + message_list_print (mlp, file_name, force_po, do_debug); + + exit (EXIT_SUCCESS); +} + + +/* Display usage information and exit. */ +static void +usage (status) + int status; +{ + if (status != EXIT_SUCCESS) + fprintf (stderr, _("Try `%s --help' for more information.\n"), + program_name); + else + { + /* xgettext: no-wrap */ + printf (_("\ +Usage: %s [OPTION] INPUTFILE ...\n\ +Extract translatable string from given input files.\n\ +\n\ +Mandatory arguments to long options are mandatory for short options too.\n\ + -a, --extract-all extract all strings\n\ + -c, --add-comments[=TAG] place comment block with TAG (or those\n\ + preceding keyword lines) in output file\n\ + -C, --c++ shorthand for --language=C++\n\ + --debug more detailed formatstring recognision result\n\ + -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n\ + -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n\ + -e, --no-escape do not use C escapes in output (default)\n\ + -E, --escape use C escapes in output, no extended chars\n\ + -f, --files-from=FILE get list of input files from FILE\n\ + --force-po write PO file even if empty\n\ + --foreign-user omit FSF copyright in output for foreign user\n\ + -F, --sort-by-file sort output by file location\n"), + program_name); + /* xgettext: no-wrap */ + printf (_("\ + -h, --help display this help and exit\n\ + -i, --indent write the .po file using indented style\n\ + -j, --join-existing join messages with existing file\n\ + -k, --keyword[=WORD] additonal keyword to be looked for (without\n\ + WORD means not to use default keywords)\n\ + -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n\ + -L, --language=NAME recognise the specified language (C, C++, PO),\n\ + otherwise is guessed from file extension\n\ + -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n\ + -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n\ + --no-location do not write '#: filename:line' lines\n"), + WARN_ID_LEN); + /* xgettext: no-wrap */ + fputs (_("\ + -n, --add-location generate '#: filename:line' lines (default)\n\ + --omit-header don't write header with `msgid \"\"' entry\n\ + -o, --output=FILE write output to specified file\n\ + -p, --output-dir=DIR output files will be placed in directory DIR\n\ + -s, --sort-output generate sorted output and remove duplicates\n\ + --strict write out strict Uniforum conforming .po file\n\ + -T, --trigraphs understand ANSI C trigraphs for input\n\ + -V, --version output version information and exit\n\ + -w, --width=NUMBER set output page width\n\ + -x, --exclude-file=FILE entries from FILE are not extracted\n\ +\n\ +If INPUTFILE is -, standard input is read.\n"), stdout); + fputs (_("Report bugs to <[email protected]>.\n"), + stdout); + } + + exit (status); +} + + +/* The address of this function will be assigned to the hook in the error + functions. */ +static void +error_print () +{ + /* We don't want the program name to be printed in messages. */ +} + + +/* Read list of files to process from file. */ +static string_list_ty * +read_name_from_file (file_name) + const char *file_name; +{ + size_t line_len = 0; + char *line_buf = NULL; + FILE *fp; + string_list_ty *result; + + if (strcmp (file_name, "-") == 0) + fp = stdin; + else + { + fp = fopen (file_name, "r"); + if (fp == NULL) + error (EXIT_FAILURE, errno, + _("error while opening \"%s\" for reading"), file_name); + } + + result = string_list_alloc (); + + while (!feof (fp)) + { + /* Read next line from file. */ + int len = getline (&line_buf, &line_len, fp); + + /* In case of an error leave loop. */ + if (len < 0) + break; + + /* Remove trailing '\n'. */ + if (len > 0 && line_buf[len - 1] == '\n') + line_buf[--len] = '\0'; + + /* Test if we have to ignore the line. */ + if (*line_buf == '\0' || *line_buf == '#') + continue; + + string_list_append_unique (result, line_buf); + } + + /* Free buffer allocated through getline. */ + if (line_buf != NULL) + free (line_buf); + + /* Close input stream. */ + if (fp != stdin) + fclose (fp); + + return result; +} + + +static void +exclude_directive_domain (pop, name) + po_ty *pop; + char *name; +{ + po_gram_error (_("this file may not contain domain directives")); +} + + +static void +exclude_directive_message (pop, msgid, msgid_pos, msgstr, msgstr_pos) + po_ty *pop; + char *msgid; + lex_pos_ty *msgid_pos; + char *msgstr; + lex_pos_ty *msgstr_pos; +{ + message_ty *mp; + + /* See if this message ID has been seen before. */ + if (exclude == NULL) + exclude = message_list_alloc (); + mp = message_list_search (exclude, msgid); + if (mp != NULL) + free (msgid); + else + { + mp = message_alloc (msgid); + /* Do not free msgid. */ + message_list_append (exclude, mp); + } + + /* All we care about is the msgid. Throw the msgstr away. + Don't even check for duplicate msgids. */ + free (msgstr); +} + + +/* So that the one parser can be used for multiple programs, and also + use good data hiding and encapsulation practices, an object + oriented approach has been taken. An object instance is allocated, + and all actions resulting from the parse will be through + invocations of method functions of that object. */ + +static po_method_ty exclude_methods = +{ + sizeof (po_ty), + NULL, /* constructor */ + NULL, /* destructor */ + exclude_directive_domain, + exclude_directive_message, + NULL, /* parse_brief */ + NULL, /* parse_debrief */ + NULL, /* comment */ + NULL, /* comment_dot */ + NULL, /* comment_filepos */ + NULL, /* comment_special */ +}; + + +static void +read_exclusion_file (file_name) + char *file_name; +{ + po_ty *pop; + + pop = po_alloc (&exclude_methods); + po_scan (pop, file_name); + po_free (pop); +} + + +static void +remember_a_message (mlp, tp) + message_list_ty *mlp; + xgettext_token_ty *tp; +{ + enum is_c_format is_c_format = undecided; + enum is_c_format do_wrap = undecided; + char *msgid; + message_ty *mp; + char *msgstr; + + msgid = tp->string; + + /* See whether we shall exclude this message. */ + if (exclude != NULL && message_list_search (exclude, msgid) != NULL) + { + /* Tell the lexer to reset its comment buffer, so that the next + message gets the correct comments. */ + xgettext_lex_comment_reset (); + + return; + } + + /* See if we have seen this message before. */ + mp = message_list_search (mlp, msgid); + if (mp != NULL) + { + free (msgid); + is_c_format = mp->is_c_format; + do_wrap = mp->do_wrap; + } + else + { + static lex_pos_ty pos = { __FILE__, __LINE__ }; + + /* Allocate a new message and append the message to the list. */ + mp = message_alloc (msgid); + /* Do not free msgid. */ + message_list_append (mlp, mp); + + /* Construct the msgstr from the prefix and suffix, otherwise use the + empty string. */ + if (msgstr_prefix) + { + msgstr = (char *) xmalloc (strlen (msgstr_prefix) + + strlen (msgid) + + strlen(msgstr_suffix) + 1); + stpcpy (stpcpy (stpcpy (msgstr, msgstr_prefix), msgid), + msgstr_suffix); + } + else + msgstr = ""; + message_variant_append (mp, MESSAGE_DOMAIN_DEFAULT, msgstr, &pos); + } + + /* Ask the lexer for the comments it has seen. Only do this for the + first instance, otherwise there could be problems; especially if + the same comment appears before each. */ + if (!mp->comment_dot) + { + int j; + + for (j = 0; ; ++j) + { + const char *s = xgettext_lex_comment (j); + if (s == NULL) + break; + + /* To reduce the possibility of unwanted matches be do a two + step match: the line must contains `xgettext:' and one of + the possible format description strings. */ + if (strstr (s, "xgettext:") != NULL) + { + is_c_format = parse_c_format_description_string (s); + do_wrap = parse_c_width_description_string (s); + + /* If we found a magic string we don't print it. */ + if (is_c_format != undecided || do_wrap != undecided) + continue; + } + if (add_all_comments + || (comment_tag != NULL && strncmp (s, comment_tag, + strlen (comment_tag)) == 0)) + message_comment_dot_append (mp, s); + } + } + + /* If not already decided, examine the msgid. */ + if (is_c_format == undecided) + is_c_format = test_whether_c_format (mp->msgid); + + mp->is_c_format = is_c_format; + mp->do_wrap = do_wrap == no ? no : yes; /* By default we wrap. */ + + /* Remember where we saw this msgid. */ + if (line_comment) + message_comment_filepos (mp, tp->file_name, tp->line_number); + + /* Tell the lexer to reset its comment buffer, so that the next + message gets the correct comments. */ + xgettext_lex_comment_reset (); +} + + +static void +scan_c_file(filename, mlp, is_cpp_file) + const char *filename; + message_list_ty *mlp; + int is_cpp_file; +{ + int state; + char *msgid = 0; + + /* Inform scanner whether we have C++ files or not. */ + if (is_cpp_file) + xgettext_lex_cplusplus (); + + /* The file is broken into tokens. Scan the token stream, looking for + a keyword, followed by a left paren, followed by a string. When we + see this sequence, we have something to remember. We assume we are + looking at a valid C or C++ program, and leave the complaints about + the grammar to the compiler. */ + xgettext_lex_open (filename); + + /* Start state is 0. */ + state = 0; + + while (1) + { + xgettext_token_ty token; + + /* A simple state machine is used to do the recognising: + State 0 = waiting for something to happen + State 1 = seen one of our keywords with string in first parameter + State 2 = was in state 1 and now saw a left paren + State 3 = seen one of our keywords with string in second parameter + State 4 = was in state 3 and now saw a left paren + State 5 = waiting for comma after being in state 4 + State 6 = saw comma after being in state 5 + State 7 = after comma and being in state 2 + State 8 = after string and being in state 7 + */ + xgettext_lex (&token); + + switch (token.type) + { + case xgettext_token_type_keyword1: + state = 1; + continue; + + case xgettext_token_type_keyword2: + state = 3; + continue; + + case xgettext_token_type_lp: + switch (state) + { + case 1: + state = 2; + break; + case 3: + state = 4; + break; + default: + state = 0; + } + continue; + + case xgettext_token_type_rp: + if (state == 2 || state == 8) { + token.string = strdup(msgid); + remember_a_message (mlp, &token); + free(msgid); + msgid = 0; + state = 0; + } + continue; + + case xgettext_token_type_comma: + switch (state) { + case 5: + state = 6; + break; + case 2: + state = 7; + break; + case 8: { + char *newstring = (char*)malloc(strlen(msgid) + 2); + strcpy(newstring, "_n:"); + strcat(newstring, msgid + 2); + free(msgid); + token.string = newstring; + remember_a_message (mlp, &token); + msgid = 0; + state = 0; + break; + } + default: + state = 0; + break; + } + continue; + + case xgettext_token_type_string_literal: + if (extract_all || state == 2 || state == 6) + { + if (msgid) + free(msgid); + msgid = strdup(token.string); + // state = 0; + } + else if (state == 7) + { + if (msgid) { + char *newstring = (char*)malloc(strlen(msgid) + strlen(token.string) + 20); + sprintf(newstring, "_: %s\n%s", msgid, token.string); + free(msgid); + free(token.string); + token.string = msgid = newstring; + state = 8; + } + } + else + { + free (token.string); + state = (state == 4 || state == 5) ? 5 : 0; + } + continue; + + case xgettext_token_type_symbol: + state = (state == 4 || state == 5) ? 5 : 0; + continue; + + default: + state = 0; + continue; + + case xgettext_token_type_eof: + break; + } + + break; + } + + /* Close scanner. */ + xgettext_lex_close (); +} + + +typedef struct extract_class_ty extract_class_ty; +struct extract_class_ty +{ + /* Inherited instance variables and methods. */ + PO_BASE_TY + + /* Cumulative list of messages. */ + message_list_ty *mlp; + + /* Cumulative comments for next message. */ + string_list_ty *comment; + string_list_ty *comment_dot; + + int is_fuzzy; + int is_c_format; + int do_wrap; + + int filepos_count; + lex_pos_ty *filepos; +}; + + +static void +extract_constructor (that) + po_ty *that; +{ + extract_class_ty *this = (extract_class_ty *) that; + + this->mlp = NULL; /* actually set in read_po_file, below */ + this->comment = NULL; + this->comment_dot = NULL; + this->is_fuzzy = 0; + this->is_c_format = undecided; + this->do_wrap = undecided; + this->filepos_count = 0; + this->filepos = NULL; +} + + +static void +extract_directive_domain (that, name) + po_ty *that; + char *name; +{ + po_gram_error (_("this file may not contain domain directives")); +} + + +static void +extract_directive_message (that, msgid, msgid_pos, msgstr, msgstr_pos) + po_ty *that; + char *msgid; + lex_pos_ty *msgid_pos; + char *msgstr; + lex_pos_ty *msgstr_pos; +{ + extract_class_ty *this = (extract_class_ty *)that; + message_ty *mp; + message_variant_ty *mvp; + size_t j; + + /* See whether we shall exclude this message. */ + if (exclude != NULL && message_list_search (exclude, msgid) != NULL) + goto discard; + + /* If the msgid is the empty string, it is the old header. + Throw it away, we have constructed a new one. */ + if (*msgid == '\0') + { + discard: + free (msgid); + free (msgstr); + if (this->comment != NULL) + string_list_free (this->comment); + if (this->comment_dot != NULL) + string_list_free (this->comment_dot); + if (this->filepos != NULL) + free (this->filepos); + this->comment = NULL; + this->comment_dot = NULL; + this->filepos_count = 0; + this->filepos = NULL; + this->is_fuzzy = 0; + this->is_c_format = undecided; + this->do_wrap = undecided; + return; + } + + /* See if this message ID has been seen before. */ + mp = message_list_search (this->mlp, msgid); + if (mp) + free (msgid); + else + { + mp = message_alloc (msgid); + message_list_append (this->mlp, mp); + } + + /* Add the accumulated comments to the message. Clear the + accumulation in preparation for the next message. */ + if (this->comment != NULL) + { + for (j = 0; j < this->comment->nitems; ++j) + message_comment_append (mp, this->comment->item[j]); + string_list_free (this->comment); + this->comment = NULL; + } + if (this->comment_dot != NULL) + { + for (j = 0; j < this->comment_dot->nitems; ++j) + message_comment_dot_append (mp, this->comment_dot->item[j]); + string_list_free (this->comment_dot); + this->comment_dot = NULL; + } + mp->is_fuzzy = this->is_fuzzy; + mp->is_c_format = this->is_c_format; + mp->do_wrap = this->do_wrap; + for (j = 0; j < this->filepos_count; ++j) + { + lex_pos_ty *pp; + + pp = &this->filepos[j]; + message_comment_filepos (mp, pp->file_name, pp->line_number); + free (pp->file_name); + } + if (this->filepos != NULL) + free (this->filepos); + this->filepos_count = 0; + this->filepos = NULL; + this->is_fuzzy = 0; + this->is_c_format = undecided; + this->do_wrap = undecided; + + /* See if this domain has been seen for this message ID. */ + mvp = message_variant_search (mp, MESSAGE_DOMAIN_DEFAULT); + if (mvp != NULL && strcmp (msgstr, mvp->msgstr) != 0) + { + gram_error_at_line (msgid_pos, _("duplicate message definition")); + gram_error_at_line (&mvp->pos, _("\ +...this is the location of the first definition")); + free (msgstr); + } + else + message_variant_append (mp, MESSAGE_DOMAIN_DEFAULT, msgstr, msgstr_pos); +} + + +static void +extract_parse_brief (that) + po_ty *that; +{ + po_lex_pass_comments (1); +} + + +static void +extract_comment (that, s) + po_ty *that; + const char *s; +{ + extract_class_ty *this = (extract_class_ty *) that; + + if (this->comment == NULL) + this->comment = string_list_alloc (); + string_list_append (this->comment, s); +} + + +static void +extract_comment_dot (that, s) + po_ty *that; + const char *s; +{ + extract_class_ty *this = (extract_class_ty *) that; + + if (this->comment_dot == NULL) + this->comment_dot = string_list_alloc (); + string_list_append (this->comment_dot, s); +} + + +static void +extract_comment_filepos (that, name, line) + po_ty *that; + const char *name; + int line; +{ + extract_class_ty *this = (extract_class_ty *) that; + size_t nbytes; + lex_pos_ty *pp; + + /* Write line numbers only if -n option is given. */ + if (line_comment != 0) + { + nbytes = (this->filepos_count + 1) * sizeof (this->filepos[0]); + this->filepos = xrealloc (this->filepos, nbytes); + pp = &this->filepos[this->filepos_count++]; + pp->file_name = xstrdup (name); + pp->line_number = line; + } +} + + +static void +extract_comment_special (that, s) + po_ty *that; + const char *s; +{ + extract_class_ty *this = (extract_class_ty *) that; + + if (strstr (s, "fuzzy") != NULL) + this->is_fuzzy = 1; + this->is_c_format = parse_c_format_description_string (s); + this->do_wrap = parse_c_width_description_string (s); +} + + +/* So that the one parser can be used for multiple programs, and also + use good data hiding and encapsulation practices, an object + oriented approach has been taken. An object instance is allocated, + and all actions resulting from the parse will be through + invocations of method functions of that object. */ + +static po_method_ty extract_methods = +{ + sizeof (extract_class_ty), + extract_constructor, + NULL, /* destructor */ + extract_directive_domain, + extract_directive_message, + extract_parse_brief, + NULL, /* parse_debrief */ + extract_comment, + extract_comment_dot, + extract_comment_filepos, + extract_comment_special +}; + + +/* Read the contents of the specified .po file into a message list. */ + +static void +read_po_file (file_name, mlp) + const char *file_name; + message_list_ty *mlp; +{ + po_ty *pop = po_alloc (&extract_methods); + ((extract_class_ty *) pop)->mlp = mlp; + po_scan (pop, file_name); + po_free (pop); +} + + +#define TM_YEAR_ORIGIN 1900 + +/* Yield A - B, measured in seconds. */ +static long +difftm (a, b) + const struct tm *a; + const struct tm *b; +{ + int ay = a->tm_year + (TM_YEAR_ORIGIN - 1); + int by = b->tm_year + (TM_YEAR_ORIGIN - 1); + /* Some compilers cannot handle this as a single return statement. */ + long days = ( + /* difference in day of year */ + a->tm_yday - b->tm_yday + /* + intervening leap days */ + + ((ay >> 2) - (by >> 2)) + - (ay / 100 - by / 100) + + ((ay / 100 >> 2) - (by / 100 >> 2)) + /* + difference in years * 365 */ + + (long) (ay - by) * 365l); + + return 60l * (60l * (24l * days + (a->tm_hour - b->tm_hour)) + + (a->tm_min - b->tm_min)) + + (a->tm_sec - b->tm_sec); +} + + +static message_ty * +construct_header () +{ + time_t now; + struct tm local_time; + message_ty *mp; + char *msgstr; + static lex_pos_ty pos = { __FILE__, __LINE__, }; + char tz_sign; + long tz_min; + + mp = message_alloc (""); + + if (foreign_user) + message_comment_append (mp, "\ +SOME DESCRIPTIVE TITLE.\n\ +FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.\n"); + else + message_comment_append (mp, "\ +SOME DESCRIPTIVE TITLE.\n\ +Copyright (C) YEAR Free Software Foundation, Inc.\n\ +FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.\n"); + + mp->is_fuzzy = 1; + + time (&now); + local_time = *localtime (&now); + tz_sign = '+'; + tz_min = difftm (&local_time, gmtime (&now)) / 60; + if (tz_min < 0) + { + tz_min = -tz_min; + tz_sign = '-'; + } + + asprintf (&msgstr, "\ +Project-Id-Version: PACKAGE VERSION\n\ +POT-Creation-Date: %d-%02d-%02d %02d:%02d%c%02d%02d\n\ +PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n\ +Last-Translator: FULL NAME <EMAIL@ADDRESS>\n\ +Language-Team: LANGUAGE <[email protected]>\n\ +MIME-Version: 1.0\n\ +Content-Type: text/plain; charset=CHARSET\n\ +Content-Transfer-Encoding: ENCODING\n", + local_time.tm_year + TM_YEAR_ORIGIN, + local_time.tm_mon + 1, + local_time.tm_mday, + local_time.tm_hour, + local_time.tm_min, + tz_sign, tz_min / 60, tz_min % 60); + + if (msgstr == NULL) + error (EXIT_FAILURE, errno, _("while preparing output")); + + message_variant_append (mp, MESSAGE_DOMAIN_DEFAULT, msgstr, &pos); + + return mp; +} + + +/* We make a pessimistic guess whether the given string is a format + string or not. Pessimistic means here that with the first + occurence of an unknown format element we say `impossible'. */ +static enum is_c_format +test_whether_c_format (s) + const char *s; +{ + struct printf_spec spec; + + if (s == NULL || *(s = find_spec (s)) == '\0') + /* We return `possible' here because sometimes strings are used + with printf even if they don't contain any format specifier. + If the translation in this case would contain a specifier, this + would result in an error. */ + return impossible; + + for (s = find_spec (s); *s != '\0'; s = spec.next_fmt) + { + size_t dummy; + + (void) parse_one_spec (s, 0, &spec, &dummy); + if (strchr ("iduoxXeEfgGcspnm", spec.info.spec) == NULL) + return impossible; + } + + return possible; +} + + +static void + scanner_c (filename, mlp) + const char *filename; + message_list_ty *mlp; +{ + scan_c_file (filename, mlp, 0); +} + + +static void +scanner_cxx (filename, mlp) + const char *filename; + message_list_ty *mlp; +{ + scan_c_file (filename, mlp, 1); +} + + +#define SIZEOF(a) (sizeof(a) / sizeof(a[0])) +#define ENDOF(a) ((a) + SIZEOF(a)) + + +static scanner_fp +language_to_scanner (name) + const char *name; +{ + typedef struct table_ty table_ty; + struct table_ty + { + const char *name; + scanner_fp func; + }; + + static table_ty table[] = + { + { "C", scanner_c, }, + { "C++", scanner_cxx, }, + { "PO", read_po_file, }, + /* Here will follow more languages and their scanners: awk, perl, + etc... Make sure new scanners honor the --exlude-file option. */ + }; + + table_ty *tp; + + for (tp = table; tp < ENDOF(table); ++tp) + { + if (strcasecmp(name, tp->name) == 0) + return tp->func; + } + error (EXIT_FAILURE, 0, _("language `%s' unknown"), name); + /* NOTREACHED */ + return NULL; +} + + +static const char * +extension_to_language (extension) + const char *extension; +{ + typedef struct table_ty table_ty; + struct table_ty + { + const char *extension; + const char *language; + }; + + static table_ty table[] = + { + { "c", "C", }, + { "C", "C++", }, + { "c++", "C++", }, + { "cc", "C++", }, + { "cxx", "C++", }, + { "h", "C", }, + { "po", "PO", }, + { "pot", "PO", }, + { "pox", "PO", }, + /* Here will follow more file extensions: sh, pl, tcl ... */ + }; + + table_ty *tp; + + for (tp = table; tp < ENDOF(table); ++tp) + { + if (strcmp(extension, tp->extension) == 0) + return tp->language; + } + return NULL; +} diff --git a/debian/gettext-kde/gettext-kde-0.10.35/stamp-h.in b/debian/gettext-kde/gettext-kde-0.10.35/stamp-h.in new file mode 100644 index 00000000..9788f702 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/stamp-h.in @@ -0,0 +1 @@ +timestamp diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/ChangeLog b/debian/gettext-kde/gettext-kde-0.10.35/tests/ChangeLog new file mode 100644 index 00000000..2310d0dc --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/ChangeLog @@ -0,0 +1,385 @@ +1997-08-01 15:46 Ulrich Drepper <[email protected]> + + * Makefile.am (AUTOMAKE_OPTIONS): Require version 1.2. + +1997-05-01 03:30 Ulrich Drepper <[email protected]> + + * msgmerge-2: Update message after last change of the program code. + + * Makefile.am (TESTS_ENVIRONMENT): Define environment variable + specifying program names to take care of --program-prefix option + to configure. + +Fri Dec 6 14:10:05 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (TESTS_ENVIRONMENT): Add $(SHELL) to explicitly use + the shell for starting the shell script. + +Fri Nov 22 00:35:58 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (TESTS_ENVIRONMENT): Change references to checks/ + into tests/. + * gettext-1: Likewise. + * gettext-2: Likewise. + * msgfmt-1: Likewise. + * msgfmt-2: Likewise. + * xgettext-1: Likewise. + +Tue Nov 12 17:36:50 1996 Ulrich Drepper <[email protected]> + + * msgmerge-1: Fix typo. + Reported by Guido Flohr <[email protected]>. + +Tue Sep 3 18:03:54 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (cmline_TESTS): Remove. Not used in automake-1.1. + + * Makefile.am (TESTS_ENVIRONMENT): Add definition of PATH to find + newly built programs. Reported by Kaveh R. Ghazi. + +Sun Sep 1 04:43:56 1996 Ulrich Drepper <[email protected]> + + * gettext-1, gettext-2, msgcmp-1, msgcmp-2, msgfmt-1, + msgfmt-2, msgfmt-3, msgfmt-4, msgmerge-1, msgmerge-2, + msgmerge-3, msgmerge-4, msgmerge-5, msgunfmt-1, + xgettext-1, xgettext-2, xgettext-3, xgettext-4, + xgettext-5, xgettext-6, xgettext-7, xgettext-8, + xgettext-9: Correct file mode preservation script. + +Sat Aug 31 05:17:29 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (TESTS_ENVIRONMENT): Define top_srcdir variable for + test files. + + * xgettext-1: Don't define top_srcdir from argument. Assume it in + environment. + * xgettext-3: Likewise. + * gettext-1: Likewise. + * gettext-2: Likewise. + * msgcmp-1: Likewise. + * msgcmp-2: Likewise. + +Sun Aug 18 18:53:02 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (distdir): It's not anymore necessary to explicitely + mention the dependency. + +Mon Jul 15 22:16:03 1996 Ulrich Drepper <[email protected]> + + * gettext-1, gettext-2, msgcmp-1, msgcmp-2, msgfmt-1, msgfmt-2, + msgfmt-3, msgfmt-4, msgmerge-1, msgmerge-2, msgmerge-3, + msgmerge-4, msgmerge-5, msgunfmt-1, xgettext-1, xgettext-2, + xgettext-3, xgettext-4, xgettext-5, xgettext-6, xgettext-7, + xgettext-8, xgettext-9: Change all `${xxx:-yyy}' to (hopefully) + portable `: ${xxx=yyy}'. Thank you, Ultrix. + +Sat Jul 6 02:01:56 1996 Ulrich Drepper <[email protected]> + + * msgfmt-1, msgfmt-2: Add \n to end of first message to prevent + error message of new msgfmt. + + * msgfmt-1 (tmpfiles): Correct argument to gettext. + +Thu Jun 20 12:48:32 1996 Ulrich Drepper <[email protected]> + + * msgmerge-5: Correct result. + +Wed Jun 19 03:09:27 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (TESTS): Add msgmerge-5. + + * msgmerge-5: New file. + +Fri Jun 14 18:23:51 1996 Ulrich Drepper <[email protected]> + + * msgcmp-1: Correct again wrong kind of redirection: use > + instead of &>. Reported by Kaveh R. Ghazi. + +Fri Jun 14 03:44:01 1996 Ulrich Drepper <[email protected]> + + * msgfmt-1, msgfmt-2, gettext-1, gettext-2: Don't set LANG to + `checks' but instead `LANGUAGE'. Some systems warn about a + non-existing locale `checks', but LANGUAGE is a GNU extension. + Reported by Kaveh R. Ghazi. + + * gettext-2, msgfmt-2: Work around echo's not knowing about + -n option. Reported by Kaveh R. Ghazi. + +Tue Jun 11 15:29:28 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (AUTOMAKE_OPTIONS): Add variable. Must be defined + in all subdirs. + +Thu Jun 6 23:40:58 1996 Ulrich Drepper <[email protected]> + + * msgcmp-1: Use &> instead of >& for avoiding error messages on + screen. Reported by Kaveh Ghazi. + +Wed Jun 5 03:51:47 1996 Ulrich Drepper <[email protected]> + + * gettext-1, gettext-2, msgcmp-1, msgcmp-2, msgfmt-1, msgfmt-2, + msgfmt-3, msgfmt-4, msgmerge-1, msgmerge-2, msgmerge-3, + msgmerge-4, msgunfmt-1, xgettext-1, xgettext-2, xgettext-3, + xgettext-4, xgettext-5, xgettext-6, xgettext-7, xgettext-8, + xgettext-9: Add Noah's ELisp trick to preserve the executable + bits. + +Tue Jun 4 23:56:41 1996 Ulrich Drepper <[email protected]> + + * msgmerge-1: Adjust ok file after enable wrapping. + +Tue Jun 4 01:00:14 1996 Ulrich Drepper <[email protected]> + + * msgmerge-3: Change for situation now that translator comments + are copied. + +Mon Jun 3 19:40:25 1996 Ulrich Drepper <[email protected]> + + * Makefile.am (distdir): Make sure xg-test1.ok.po file is up to + date before distributing. + + * msgmerge-4: Initial revision. + +Mon Jun 3 01:11:03 1996 Ulrich Drepper <[email protected]> + + * Makefile.am: New file. + +Sun Jun 2 21:10:16 1996 Ulrich Drepper <[email protected]> + + * msgfmt-2, xgettext-2, msgfmt-1 (tmpfiles): Correct file names. + + * msgfmt-1, msgfmt-2, gettext-2, msgfmt-4, msgfmt-3, msgcmp-2, + msgmerge-2, msgmerge-1, msgmerge-3, msgunfmt-1, Makefile.am, + msgcmp-1, xgettext-2, xgettext-1, xgettext-3, xgettext-4, + xgettext-5, xgettext-6, xgettext-7, xgettext-8, xgettext-9, + gettext-1: Initial revision. New test suite for use in automake + generated Makefiles. + +Fri Apr 5 19:48:53 1996 Ulrich Drepper <drepper@myware> + + * xg-test8.ok: Adapt for fuzzy flag normalization. + + * xg-test8.in.po: Add text so that fuzzy gets copied. + + * Makefile.in (msgmerge): Call msgmerge with -q parameter. + + * mf-test4.in.po: Fill in fields in header entry because of checks + in msgfmt. + +Tue Apr 2 18:52:23 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Add mf-test4.in.po. + (all-gettest): New goal. Same as all. + (msgfmt-4): New test for msgfmt. + +Tue Apr 2 10:42:09 1996 Ulrich Drepper <drepper@myware> + + * xg-test2.po, xg-test4.ok, xg-test5.ok, xg-test6.ok, xg-test7.ok, + xg-test8.ok, xg-test9.ok: Adapt for recent xgettext. No more + `possible' comments anymore. + +Sun Mar 31 23:49:14 1996 Fran�ois Pinard <[email protected]> + + * Makefile.in (xgettext-3): Add echo command. + +Thu Mar 28 18:45:29 1996 Ulrich Drepper <drepper@myware> + + * xg-test9.ok, xg-test8.ok, xg-test7.ok, xg-test6.ok, xg-test5.ok, + xg-test4.ok: Adopt for change in C format string detection. + + * xg-test2.in.c: Add some no-c-format lines to test C format flag + handling. + * xg-test2.ok-po: Adopt result for above change. + + * Makefile.in (DIFF): Define as `diff $(DIFFARGS)'. This permits + to set DIFFARGS=-u in the environment and get rid of those + unreadable context diffs. + +Wed Mar 27 03:24:43 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (xgettext-9): Add new test for xgettext. This one + test extraction of comments. + (TESTSRCS): Add xg-test9.c + (OKFILES): Add xg-test9.ok + + * xg-test9.c, xg-test9.ok: New files. Input and expected result + for test 9 of xgettext. + +Tue Mar 26 00:00:34 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in: Add test 3 for msgmerge. + * mm-test3.in1, mm-test3.in2, mm-test3.ok: New files. + Test 3 for msgmerge. Tests handling of obsolete entries. + + * Makefile.in: Use reasonable names for msgfmt tests. Suggested + by Franc,ois Pinard. + + * Makefile.in (msgunfmt-1): New msgunfmt program interface + requires -o option. + +Mon Mar 25 03:27:12 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (check): Rewritten by Franc,ois Pinard. + + * xg-test8.ok, xg-test8.in.po: Adopt for new implementation of + special comments. + +Sun Mar 24 01:51:42 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in: Add check 8 for xgettext. Adopt for input file + type recognision of xgettext by renaming files to *.c, *.cc, or + *.C. + +Fri Mar 1 13:32:53 1996 Ulrich Drepper <drepper@myware> + + * mm-test2.ok: New error message format. + +Tue Dec 19 22:13:03 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (Makefile): Explicitly use $(SHELL) for running + shell scripts. + +Sat Dec 9 12:18:07 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (clean): Correct xg-text2.po to xg-test2.po. + Reported by Eric Backus. + +Mon Dec 4 01:05:50 1995 Ulrich Drepper <drepper@myware> + + * mm-test1.ok: + For now we have long lines. Undo this change when LINE_WIDTH in + acconfig.h is changed back. + +Sun Dec 3 03:09:43 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (clean): Add xg-test7.po. + + * xg-test7.ok, xg-test7.in: Initial revision + + * Makefile.in (check): Add another test for xgettext. + +Fri Nov 17 00:21:37 1995 Ulrich Drepper <drepper@myware> + + * mm-test1.in1, mm-test1.in2, mm-test1.ok, mm-test2.in1, + mm-test2.in2, mm-test2.ok, mu-test1.in, xg-test4.in, xg-test4.ok, + xg-test5.in, xg-test5.ok, xg-test6.in, xg-test6.ok: + Initial revision. + + * Makefile.in: Add additional test by Peter Miller. + +Sat Nov 11 17:58:42 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (clean): Remove xg-text2.po. + + * xg-test2.ok.po: Adapt for new xgettext. + +Thu Nov 9 00:56:57 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist): + Write newly created xg-test1.ok.po file to $(srcdir). + +Tue Nov 7 01:33:49 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (check): + Make message for successful completion more visible. + +Sun Nov 5 19:40:18 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist-gettext): Make synonym for dist. + +Sun Nov 5 11:37:20 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (dist): Suppress error message when ln failed. + Get files from $(srcdir) explicitly. + +Sun Oct 29 12:22:48 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (check): + In msgcmp test2 pipe result through sed to remove $(prefix). + + * Makefile.in (check): + Add some missing $(srcdir)/. Reported by Franc,ois Pinard. + +Sat Oct 28 15:35:36 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: Remove Emacs local variables setting. + + * Makefile.in (check): + Don't print out command for msgcmp test 1 because it contains + the word `failed'. + + * mc-test1.in1, mc-test1.in2, mc-test2.in1, mc-test2.in2, + mc-test2.ok, test5.po, xg-test1.ok.po, xg-test2.in, xg-test2.ok.po: + Initial revision. + + * Makefile.in (MSGCMP): + New variable. The file name includes actions on env.vars + because be test for the error messages we get. + (TESTSRCS, OKFILES): Add files for new tests. + (check): Add some test. Taken from Peter Miller's version. + +Fri Oct 27 02:10:46 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (check): Buglix's sh workaround by Christian von Roques. + +Wed Sep 20 09:30:46 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (check): Add test for -x option of xgettext. + (clean): Remove test file for above test. + +Tue Aug 15 06:06:51 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (check): + Correct TEXTDOMAINDIR value for msgfmt tests: is really `..', but + $(top_srcdir) for the gettext tests. + +Mon Aug 14 23:51:53 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (install-src): New no-op goal. + +Wed Aug 9 00:48:08 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (check): + After extending the locale specification by processing `LANGUAGE' + it is necessary to clear this environment variable, too. + +Fri Aug 4 16:31:58 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (clean): Remove LC_MESSAGES/gen.mo. + + * Makefile.in (dist): Change mode of LC_MESSAGE directory to 777. + Remove `copying instead' message. + +Wed Aug 2 23:35:08 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (check): Add check for msgfmt and gettext. + + * test2.ok, test1.ok: Initial revision. + +Sat Jul 15 23:45:53 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: Change head comment. + (check): Remove msgfmt tests for now (does not handle + big<->little endian difference). + (check): Add success messages. + (install, uninstall): Add missing dummy goals. + +Sat Jul 15 00:24:55 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (OKFILES, check, clean): + Use shortened names for .mo files. + + * module1.po (help_domain, error_domain): + Shorten names for file systems with 14 char limit. + + * module2.po (error_domain, window_domain): + Shorten names for file systems with 14 char limit. + +Thu Jul 13 00:54:14 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Add ChangeLog and OKFILES. + +Wed Jul 12 22:12:05 1995 Ulrich Drepper <drepper@myware> + + * module2.po, module1.po, help_domain.ok, error_domain.ok, + window_domain.ok, messages.ok, Makefile.in: Initial revision. diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/Makefile.am b/debian/gettext-kde/gettext-kde-0.10.35/tests/Makefile.am new file mode 100644 index 00000000..98e970a6 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/Makefile.am @@ -0,0 +1,43 @@ +## Makefile for the check subdirectory of the GNU NLS Utilities +## Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2, 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. + +## Process this file with automake to produce Makefile.in. + +AUTOMAKE_OPTIONS = 1.2 gnits + +TESTS = gettext-1 gettext-2 msgcmp-1 msgcmp-2 msgfmt-1 msgfmt-2 msgfmt-3 \ + msgfmt-4 msgmerge-1 msgmerge-2 msgmerge-3 msgmerge-4 msgmerge-5 \ + msgunfmt-1 xgettext-1 xgettext-2 xgettext-3 xgettext-4 xgettext-5 \ + xgettext-6 xgettext-7 xgettext-8 xgettext-9 + +EXTRA_DIST = $(TESTS) test.mo xg-test1.ok.po + +XGETTEXT = ../src/xgettext + +TESTS_ENVIRONMENT = top_srcdir=$(top_srcdir) PATH=../src:$$PATH \ + GETTEXT=`echo gettext|sed '$(transform)'` \ + XGETTEXT=`echo xgettext|sed '$(transform)'` \ + MSGFMT=`echo msgfmt|sed '$(transform)'` \ + MSGCMP=`echo msgcmp|sed '$(transform)'` \ + MSGMERGE=`echo msgmerge|sed '$(transform)'` \ + MSGUNFMT=`echo msgunfmt|sed '$(transform)'` $(SHELL) + +xg-test1.ok.po: $(top_srcdir)/src/xgettext.c $(top_srcdir)/src/msgfmt.c \ + $(top_srcdir)/src/gettextp.c + $(XGETTEXT) -d xg-test1.ok -p $(srcdir) -k_ --omit-header \ + $(top_srcdir)/src/xgettext.c $(top_srcdir)/src/msgfmt.c \ + $(top_srcdir)/src/gettextp.c diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/Makefile.in b/debian/gettext-kde/gettext-kde-0.10.35/tests/Makefile.in new file mode 100644 index 00000000..e71f714a --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/Makefile.in @@ -0,0 +1,237 @@ +# Makefile.in generated automatically by automake 1.3 from Makefile.am + +# Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DISTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +ACLOCAL_VERSION = @ACLOCAL_VERSION@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +DATADIRNAME = @DATADIRNAME@ +EMACS = @EMACS@ +GENCAT = @GENCAT@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GT_NO = @GT_NO@ +GT_YES = @GT_YES@ +INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ +INSTOBJEXT = @INSTOBJEXT@ +INTLDEPS = @INTLDEPS@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +LD = @LD@ +LIBOBJS = @LIBOBJS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +NM = @NM@ +PACKAGE = @PACKAGE@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +YACC = @YACC@ +aclocaldir = @aclocaldir@ +l = @l@ +lispdir = @lispdir@ + +AUTOMAKE_OPTIONS = 1.2 gnits + +TESTS = gettext-1 gettext-2 msgcmp-1 msgcmp-2 msgfmt-1 msgfmt-2 msgfmt-3 \ + msgfmt-4 msgmerge-1 msgmerge-2 msgmerge-3 msgmerge-4 msgmerge-5 \ + msgunfmt-1 xgettext-1 xgettext-2 xgettext-3 xgettext-4 xgettext-5 \ + xgettext-6 xgettext-7 xgettext-8 xgettext-9 + +EXTRA_DIST = $(TESTS) test.mo xg-test1.ok.po + +XGETTEXT = ../src/xgettext + +TESTS_ENVIRONMENT = top_srcdir=$(top_srcdir) PATH=../src:$$PATH \ + GETTEXT=`echo gettext|sed '$(transform)'` \ + XGETTEXT=`echo xgettext|sed '$(transform)'` \ + MSGFMT=`echo msgfmt|sed '$(transform)'` \ + MSGCMP=`echo msgcmp|sed '$(transform)'` \ + MSGMERGE=`echo msgmerge|sed '$(transform)'` \ + MSGUNFMT=`echo msgunfmt|sed '$(transform)'` $(SHELL) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +DIST_COMMON = ChangeLog Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP = --best +all: Makefile + +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnits --include-deps tests/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +tags: TAGS +TAGS: + + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = tests + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done +check-TESTS: $(TESTS) + @failed=0; all=0; \ + srcdir=$(srcdir); export srcdir; \ + for tst in $(TESTS); do \ + if test -f $$tst; then dir=.; \ + else dir="$(srcdir)"; fi; \ + if $(TESTS_ENVIRONMENT) $$dir/$$tst; then \ + all=`expr $$all + 1`; \ + echo "PASS: $$tst"; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + fi; \ + done; \ + if test "$$failed" -eq 0; then \ + banner="All $$all tests passed"; \ + else \ + banner="$$failed of $$all tests failed"; \ + fi; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0 +info: +dvi: +check: all + $(MAKE) check-TESTS +installcheck: +install-exec: + @$(NORMAL_INSTALL) + +install-data: + @$(NORMAL_INSTALL) + +install: install-exec install-data all + @: + +uninstall: + +install-strip: + $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' INSTALL_SCRIPT='$(INSTALL_PROGRAM)' install +installdirs: + + +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -rm -f Makefile $(DISTCLEANFILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +mostlyclean: mostlyclean-generic + +clean: clean-generic mostlyclean + +distclean: distclean-generic clean + -rm -f config.status + -rm -f libtool + +maintainer-clean: maintainer-clean-generic distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +.PHONY: tags distdir check-TESTS info dvi installcheck install-exec \ +install-data install uninstall all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +xg-test1.ok.po: $(top_srcdir)/src/xgettext.c $(top_srcdir)/src/msgfmt.c \ + $(top_srcdir)/src/gettextp.c + $(XGETTEXT) -d xg-test1.ok -p $(srcdir) -k_ --omit-header \ + $(top_srcdir)/src/xgettext.c $(top_srcdir)/src/msgfmt.c \ + $(top_srcdir)/src/gettextp.c + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/gettext-1 b/debian/gettext-kde/gettext-kde-0.10.35/tests/gettext-1 new file mode 100755 index 00000000..2e8b9677 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/gettext-1 @@ -0,0 +1,47 @@ +#! /bin/sh +# One argument is required which is the path to the toplevel directory +# of the distribution. + +TEXTDOMAINDIR=.. +LANGUAGE=tests +LC_ALL= +LC_MESSAGES= +LANG= +export TEXTDOMAINDIR LANGUAGE LC_ALL LC_MESSAGES LANG + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +# Create binary test file in correct position. +tmpfiles="LC_MESSAGES" +test -d LC_MESSAGES || mkdir LC_MESSAGES +cp $top_srcdir/tests/test.mo LC_MESSAGES + +tmpfiles="$tmpfiles gt-test1.out" +: ${GETTEXT=gettext} +${GETTEXT} test 'SYS_(C)' > gt-test1.out + +# Create correct file. +tmpfile="$tmpfiles gtmf-test1.ok" +cat <<EOF > gtmf-test1.ok +MSGFMT(3) portable message object file compiler +Copyright (C) 1995 Free Software Foundation +Report bugs to <[email protected]> +EOF + +: ${DIFF=diff} +${DIFF} gtmf-test1.ok gt-test1.out +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/gettext-2 b/debian/gettext-kde/gettext-kde-0.10.35/tests/gettext-2 new file mode 100755 index 00000000..87f40229 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/gettext-2 @@ -0,0 +1,55 @@ +#! /bin/sh +# One argument is required which is the path to the toplevel directory +# of the distribution. + +TEXTDOMAINDIR=.. +LANGUAGE=tests +LC_ALL= +LC_MESSAGES= +LANG= +export TEXTDOMAINDIR LANGUAGE LC_ALL LC_MESSAGES LANG + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says [email protected]. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +# Create binary test file in correct position. +tmpfiles="LC_MESSAGES" +test -d LC_MESSAGES || mkdir LC_MESSAGES +cp $top_srcdir/tests/test.mo LC_MESSAGES + +tmpfiles="$tmpfiles gt-test2.out" +: ${GETTEXT=gettext} +${GETTEXT} test 'error 3' > gt-test2.out + +# Create correct file. +tmpfile="$tmpfiles gtmf-test2.ok" +echo $ac_n "error 3 translation$ac_c" > gtmf-test2.ok + +: ${DIFF=diff} +${DIFF} gtmf-test2.ok gt-test2.out +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/msgcmp-1 b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgcmp-1 new file mode 100755 index 00000000..55683a0a --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgcmp-1 @@ -0,0 +1,34 @@ +#! /bin/sh +# One argument is required which is the path to the toplevel directory +# of the distribution. + +tmpfiles="mc-test1.in1 mc-test1.in2" +cat <<EOF > mc-test1.in1 +msgid "one" msgstr "first" +msgid "two" msgstr "second" +msgid "three" msgstr "third" +EOF + +cat <<EOF > mc-test1.in2 +msgid "three" msgstr "" +msgid "one" msgstr "" +msgid "two" msgstr "" +EOF + +: ${MSGCMP=msgcmp} +${MSGCMP} mc-test1.in1 mc-test1.in2 > /dev/null 2>&1 +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/msgcmp-2 b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgcmp-2 new file mode 100755 index 00000000..b0bbc919 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgcmp-2 @@ -0,0 +1,53 @@ +#! /bin/sh +# One argument is required which is the path to the toplevel directory +# of the distribution. + +LANGUAGE= +LC_ALL= +LC_MESSAGES= +LANG= +export LANGUAGE LC_ALL LC_MESSAGES LANG + +tmpfiles="mc-test2.in1 mc-test2.in2" +cat <<EOF > mc-test2.in1 +msgid "one" msgstr "first" +msgid "two" msgstr "second" +msgid "three" msgstr "third" +msgid "four" msgstr "fourth" +EOF + +cat <<EOF > mc-test2.in2 +msgid "thre" msgstr "" #i.e. pretend a typo in the program +msgid "one" msgstr "" +msgid "two" msgstr "" +EOF + +tmpfiles="$tmpfiles mc-test2.out" +: ${MSGCMP=msgcmp} +${MSGCMP} mc-test2.in1 mc-test2.in2 > mc-test2.out 2>&1 + +tmpfiles="$tmpfiles mc-test2.ok" +cat <<EOF > mc-test2.ok +mc-test2.in2:1: this message is used but not defined... +mc-test2.in1:3: ...but this definition is similar +mc-test2.in1:4: warning: this message is not used +found 1 fatal errors +EOF + +: ${DIFF=diff} +${DIFF} mc-test2.ok mc-test2.out +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/msgfmt-1 b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgfmt-1 new file mode 100755 index 00000000..033843d9 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgfmt-1 @@ -0,0 +1,80 @@ +#! /bin/sh + +TEXTDOMAINDIR=.. +LANGUAGE=tests +LC_ALL= +LC_MESSAGES= +LANG= +export TEXTDOMAINDIR LANGUAGE LC_ALL LC_MESSAGES LANG + +tmpfiles="LC_MESSAGES" +test -d LC_MESSAGES || mkdir LC_MESSAGES + +tmpfiles="$tmpfiles module1.po module2.po" +cat <<EOF > module1.po +#default domain "messages.mo" +msgid "SYS_(C)\n" +msgstr "MSGFMT(3) portable message object file compiler\n" +"Copyright (C) 1995 Free Software Foundation\n" +"Report bugs to <[email protected]>\n" +msgid "msg 1" +msgstr "msg 1 translation" +# +domain "help_dom" +msgid "help 2 %d" +msgstr "help 2 translation" +# +domain "error_dom" +msgid "error 3" +msgstr "error 3 translation" +EOF + +cat <<EOF > module2.po +# --- +#default domain "messages.mo" +msgid "mesg 4" +msgstr "mesg 4 translation" +# +domain "error_dom" +msgid "error 3" +msgstr "alternate error 2 translation" +msgid "error 5" +msgstr "error 5 translation" +# +domain "window_dom" +msgid "window 6" +msgstr "window 6 translation" +EOF + +: ${MSGFMT=msgfmt} +${MSGFMT} module1.po module2.po -o LC_MESSAGES/gen.mo + +tmpfiles="$tmpfiles mf-test1.out" +: ${GETTEXT=gettext} +${GETTEXT} gen 'SYS_(C) +' > mf-test1.out + +tmpfiles="$tmpfiles gtmf-test1.ok" +cat <<EOF > gtmf-test1.ok +MSGFMT(3) portable message object file compiler +Copyright (C) 1995 Free Software Foundation +Report bugs to <[email protected]> +EOF + +: ${DIFF=diff} +${DIFF} gtmf-test1.ok mf-test1.out +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/msgfmt-2 b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgfmt-2 new file mode 100755 index 00000000..5acc2dbb --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgfmt-2 @@ -0,0 +1,89 @@ +#! /bin/sh + +TEXTDOMAINDIR=.. +LANGUAGE=tests +LC_ALL= +LC_MESSAGES= +LANG= +export TEXTDOMAINDIR LANGUAGE LC_ALL LC_MESSAGES LANG + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says [email protected]. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="LC_MESSAGES" +test -d LC_MESSAGES || mkdir LC_MESSAGES + +tmpfiles="$tmpfiles module1.po module2.po" +cat <<EOF > module1.po +#default domain "messages.mo" +msgid "SYS_(C)\n" +msgstr "MSGFMT(3) portable message object file compiler\n" +"Copyright (C) 1995 Free Software Foundation\n" +"Report bugs to <[email protected]>\n" +msgid "msg 1" +msgstr "msg 1 translation" +# +domain "help_dom" +msgid "help 2 %d" +msgstr "help 2 translation" +# +domain "error_dom" +msgid "error 3" +msgstr "error 3 translation" +EOF + +cat <<EOF > module2.po +# --- +#default domain "messages.mo" +msgid "mesg 4" +msgstr "mesg 4 translation" +# +domain "error_dom" +msgid "error 3" +msgstr "alternate error 2 translation" +msgid "error 5" +msgstr "error 5 translation" +# +domain "window_dom" +msgid "window 6" +msgstr "window 6 translation" +EOF + +: ${MSGFMT=msgfmt} +${MSGFMT} module1.po module2.po -o LC_MESSAGES/gen.mo + +tmpfiles="$tmpfiles mf-test2.out" +: ${GETTEXT=gettext} +${GETTEXT} gen 'error 3' > mf-test2.out + +tmpfiles="$tmpfiles gtmf-test2.ok" +echo $ac_n "error 3 translation$ac_c" > gtmf-test2.ok + +: ${DIFF=diff} +${DIFF} gtmf-test2.ok mf-test2.out +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/msgfmt-3 b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgfmt-3 new file mode 100755 index 00000000..3aeb9d11 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgfmt-3 @@ -0,0 +1,39 @@ +#! /bin/sh + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="mf-test3.po" +cat <<EOF >mf-test3.po +# +# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +# xxxxxxxxxxxxxxxxxxxx +# +# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +msgid "" +msgstr "" +EOF + +tmpfiles="$tmpfiles mftest3.mo" +: ${MSGFMT=msgfmt} +${MSGFMT} mf-test3.po -o mftest3.mo + +test ! -f mftest3.mo +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/msgfmt-4 b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgfmt-4 new file mode 100755 index 00000000..2a22faca --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgfmt-4 @@ -0,0 +1,51 @@ +#! /bin/sh + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="mf-test4.po" +cat <<EOF >mf-test4.po +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: msgfmt test 4\n" +"PO-Revision-Date: 1996-04-05 19:47+0200\n" +"Last-Translator: Ulrich Drepper <[email protected]>\n" +"Language-Team: test <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" +# +#, no-c-format +msgid "no percent" +msgstr "but here %d is one" +# +#, c-format +msgid "in the %d normal %c order %s\n" +msgstr "but %2$c not %3$s here %1$d\n" +# +# If no c-format is given no check is wanted, not only if no-c-format is there. +msgid "This is a string %s" +msgstr "...but this $s not" +EOF + +: ${MSGFMT=msgfmt} +${MSGFMT} mf-test4.po -o /dev/null 2> /dev/null +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/msgmerge-1 b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgmerge-1 new file mode 100755 index 00000000..65ea1e59 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgmerge-1 @@ -0,0 +1,81 @@ +#! /bin/sh + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="mm-test1.in1 mm-test1.in2" +cat <<EOF > mm-test1.in1 +# first +#. this should be discarded +msgid "1" +msgstr "1x" +# second +#: bogus:1 +msgid "2" +msgstr "this is a really long msgstr " + "used to test the wrapping to " + "make sure it works after all " + "what is a test for if not to test things?" +# third +msgid "3" +msgstr "3z" +EOF + +cat <<EOF > mm-test1.in2 +#. this is the first +#: snark.c:345 +msgid "1" +msgstr "" +#. this is the second +#: hunt.c:759 +msgid "2" +msgstr "" +#. this is the third +#: boojum.c:300 +msgid "3" +msgstr "" +EOF + +tmpfiles="$tmpfiles mm-test1.out" +: ${MSGMERGE=msgmerge} +${MSGMERGE} -q mm-test1.in1 mm-test1.in2 -o mm-test1.out + +tmpfiles="$tmpfiles mm-test1.ok" +cat << EOF > mm-test1.ok +# first +#. this is the first +#: snark.c:345 +msgid "1" +msgstr "1x" + +# second +#. this is the second +#: hunt.c:759 +msgid "2" +msgstr "" +"this is a really long msgstr used to test the wrapping to make sure it works " +"after all what is a test for if not to test things?" + +# third +#. this is the third +#: boojum.c:300 +msgid "3" +msgstr "3z" +EOF + +: ${DIFF=diff} +${DIFF} mm-test1.ok mm-test1.out +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/msgmerge-2 b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgmerge-2 new file mode 100644 index 00000000..73f82495 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgmerge-2 @@ -0,0 +1,52 @@ +#! /bin/sh + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +LANGUAGE= +LC_ALL= +LC_MESSAGES= +LANG= +export LANGUAGE LC_ALL LC_MESSAGES LANG + +tmpfiles="mm-test2.in1 mm-test2.in2" +cat <<EOF > mm-test2.in1 +msgid "2" msgstr "2" +msgid "3" msgstr "3" +msgid "2" msgstr "ha ha" +EOF + +cat <<EOF > mm-test2.in2 +msgid "1" msgstr "" +msgid "2" msgstr "" +msgid "3" msgstr "" +EOF + +tmpfiles="$tmpfiles mm-test2.out" +: ${MSGMERGE=msgmerge} +${MSGMERGE} -q mm-test2.in1 mm-test2.in2 -o /dev/stdout \ + 2> mm-test2.out + +tmpfiles="$tmpfiles mm-test2.ok" +cat << EOF > mm-test2.ok +mm-test2.in1:3: duplicate message definition +mm-test2.in1:1: ...this is the location of the first definition +found 1 fatal errors +EOF + +: ${DIFF=diff} +${DIFF} mm-test2.ok mm-test2.out +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/msgmerge-3 b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgmerge-3 new file mode 100755 index 00000000..3a3dd4f7 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgmerge-3 @@ -0,0 +1,92 @@ +#! /bin/sh + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="mm-test3.in1 mm-test3.in2" +cat <<EOF > mm-test3.in1 +# +# def.po +# +#: file:100 +msgid "" +"not existing" +msgstr "but with translation" + +#: file2:101 +msgid "not existing without translation" +msgstr "" + +#: file3:102 +msgid "still existing" +msgstr "translation" + +#: should-not-be-here:10 +#~ msgid "former obsolete" +#~ msgstr "" +#~ "but again useful" + +#~ msgid "this stays obsolete" +#~ msgstr "even after running msgmerge" + +# +# trailing comments should be removed +EOF + +cat <<EOF > mm-test3.in2 +# +# ref.po +# +#: file3:102 +msgid "still existing" +msgstr "here is normally no comment" + +#: file4:10 +msgid "" +"former obsolete" +msgstr "" + +# +# trailing comments should be removed, even here +EOF + +tmpfiles="$tmpfiles mm-test3.out" +: ${MSGMERGE=msgmerge} +${MSGMERGE} -q mm-test3.in1 mm-test3.in2 -o mm-test3.out + +tmpfiles="$tmpfiles mm-test3.ok" +cat << EOF > mm-test3.ok +#: file3:102 +msgid "still existing" +msgstr "translation" + +#: file4:10 +msgid "former obsolete" +msgstr "but again useful" + +# +# def.po +# +#~ msgid "not existing" +#~ msgstr "but with translation" + +#~ msgid "this stays obsolete" +#~ msgstr "even after running msgmerge" +EOF + +: ${DIFF=diff} +${DIFF} mm-test3.ok mm-test3.out +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/msgmerge-4 b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgmerge-4 new file mode 100755 index 00000000..63c0551b --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgmerge-4 @@ -0,0 +1,65 @@ +#! /bin/sh + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="mm-test4.in1.po mm-test4.in2.po" +cat <<EOF > mm-test4.in1.po +msgid "one" +msgstr "eins" +# This comment should be copied. +msgid "two" +msgstr "zwei" + + +# And this one, too. +#~ msgid "four" +#~ msgstr "vier" +EOF + +cat <<EOF > mm-test4.in2.po +msgid "one" +msgstr "" +# This is a comment in the POT file. +msgid "three" +msgstr "" +EOF + +tmpfiles="$tmpfiles mm-test4.out" +: ${MSGMERGE=msgmerge} +${MSGMERGE} -q mm-test4.in1.po mm-test4.in2.po -o mm-test4.out + +tmpfiles="$tmpfiles mm-test4.ok" +cat <<EOF > mm-test4.ok +msgid "one" +msgstr "eins" + +# This is a comment in the POT file. +msgid "three" +msgstr "" + +# This comment should be copied. +#~ msgid "two" +#~ msgstr "zwei" + +# And this one, too. +#~ msgid "four" +#~ msgstr "vier" +EOF + +: ${DIFF=diff} +${DIFF} mm-test4.ok mm-test4.out +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/msgmerge-5 b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgmerge-5 new file mode 100755 index 00000000..45cca000 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgmerge-5 @@ -0,0 +1,83 @@ +#! /bin/sh + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="mm-test5.in1.po mm-test5.in2.po" +cat <<EOF > mm-test5.in1.po +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Content-Transfer-Encoding: ENCODING\n" +"MIME-Version: 1.0\n" +"Test: bla bla\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" +"Language-Team: LANGUAGE <[email protected]>\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Project-Id-Version: PACKAGE VERSION\n" + +msgid "" +"whatever, doesn't matter\n" +msgstr "" +"blah blah blah blah blah blah blah blah blah blah blah blah blah bla bla bla\n" +EOF + +cat <<EOF > mm-test5.in2.po +msgid "" +msgstr "" + +msgid "" +"whatever, doesn't matter\n" +msgstr "" +"blah blah blah blah blah blah blah blah blah blah blah blah blah bla bla bla\n" +EOF + +tmpfiles="$tmpfiles mm-test5.out" +: ${MSGMERGE=msgmerge} +${MSGMERGE} -q mm-test5.in1.po mm-test5.in2.po -o mm-test5.out + +tmpfiles="$tmpfiles mm-test5.ok" +cat <<EOF > mm-test5.ok +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: ENCODING\n" +"Test: bla bla\n" + +msgid "whatever, doesn't matter\n" +msgstr "" +"blah blah blah blah blah blah blah blah blah blah blah blah blah bla bla " +"bla\n" +EOF + +: ${DIFF=diff} +${DIFF} mm-test5.ok mm-test5.out +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/msgunfmt-1 b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgunfmt-1 new file mode 100755 index 00000000..89ffffd0 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/msgunfmt-1 @@ -0,0 +1,56 @@ +#! /bin/sh + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="mu-test1.in" +cat <<EOF > mu-test1.in +msgid "eight" +msgstr "eighth" + +msgid "five" +msgstr "fifth" + +msgid "four" +msgstr "fourth" + +msgid "one" +msgstr "first" + +msgid "seven" +msgstr "seventh" + +msgid "six" +msgstr "sixth" + +msgid "three" +msgstr "third" + +msgid "two" +msgstr "second" +EOF + +tmpfiles="$tmpfiles mu-test1.mo" +: ${MSGFMT=msgfmt} +${MSGFMT} mu-test1.in -o mu-test1.mo + +tmpfiles="$tmpfiles mu-test1.out" +: ${MSGUNFMT=msgunfmt} +${MSGUNFMT} mu-test1.mo -o mu-test1.out + +: ${DIFF=diff} +${DIFF} mu-test1.in mu-test1.out +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/test.mo b/debian/gettext-kde/gettext-kde-0.10.35/tests/test.mo Binary files differnew file mode 100644 index 00000000..f8dbf704 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/test.mo diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/xg-test1.ok.po b/debian/gettext-kde/gettext-kde-0.10.35/tests/xg-test1.ok.po new file mode 100644 index 00000000..70f1609d --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/xg-test1.ok.po @@ -0,0 +1,232 @@ +msgid "while preparing output" +msgstr "" + +#, c-format +msgid "%s and %s are mutually exclusive" +msgstr "" + +msgid "--join-existing cannot be used when output is written to stdout" +msgstr "" + +#, c-format, no-wrap +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" + +#, c-format +msgid "Written by %s.\n" +msgstr "" + +msgid "no input file given" +msgstr "" + +#, c-format +msgid "warning: file `%s' extension `%s' is unknown; will try C" +msgstr "" + +#, c-format +msgid "Try `%s --help' for more information.\n" +msgstr "" + +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] INPUTFILE ...\n" +"Extract translatable string from given input files.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --extract-all extract all strings\n" +" -c, --add-comments[=TAG] place comment block with TAG (or those\n" +" preceding keyword lines) in output file\n" +" -C, --c++ shorthand for --language=C++\n" +" --debug more detailed formatstring recognision result\n" +" -d, --default-domain=NAME use NAME.po for output (instead of messages.po)\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -e, --no-escape do not use C escapes in output (default)\n" +" -E, --escape use C escapes in output, no extended chars\n" +" -f, --files-from=FILE get list of input files from FILE\n" +" --force-po write PO file even if empty\n" +" --foreign-user omit FSF copyright in output for foreign user\n" +" -F, --sort-by-file sort output by file location\n" +msgstr "" + +#, c-format, no-wrap +msgid "" +" -h, --help display this help and exit\n" +" -i, --indent write the .po file using indented style\n" +" -j, --join-existing join messages with existing file\n" +" -k, --keyword[=WORD] additonal keyword to be looked for (without\n" +" WORD means not to use default keywords)\n" +" -l, --string-limit=NUMBER set string length limit to NUMBER instead %u\n" +" -L, --language=NAME recognise the specified language (C, C++, PO),\n" +" otherwise is guessed from file extension\n" +" -m, --msgstr-prefix[=STRING] use STRING or \"\" as prefix for msgstr entries\n" +" -M, --msgstr-suffix[=STRING] use STRING or \"\" as suffix for msgstr entries\n" +" --no-location do not write '#: filename:line' lines\n" +msgstr "" + +#, no-wrap +msgid "" +" -n, --add-location generate '#: filename:line' lines (default)\n" +" --omit-header don't write header with `msgid \"\"' entry\n" +" -o, --output=FILE write output to specified file\n" +" -p, --output-dir=DIR output files will be placed in directory DIR\n" +" -s, --sort-output generate sorted output and remove duplicates\n" +" --strict write out strict Uniforum conforming .po file\n" +" -T, --trigraphs understand ANSI C trigraphs for input\n" +" -V, --version output version information and exit\n" +" -w, --width=NUMBER set output page width\n" +" -x, --exclude-file=FILE entries from FILE are not extracted\n" +"\n" +"If INPUTFILE is -, standard input is read.\n" +msgstr "" + +msgid "Report bugs to <[email protected]>.\n" +msgstr "" + +#, c-format +msgid "error while opening \"%s\" for reading" +msgstr "" + +msgid "this file may not contain domain directives" +msgstr "" + +msgid "duplicate message definition" +msgstr "" + +msgid "...this is the location of the first definition" +msgstr "" + +#, c-format +msgid "language `%s' unknown" +msgstr "" + +#, c-format +msgid "error while opening \"%s\" for writing" +msgstr "" + +#, c-format +msgid "%d translated messages" +msgstr "" + +#, c-format +msgid ", %d fuzzy translations" +msgstr "" + +#, c-format +msgid ", %d untranslated messages" +msgstr "" + +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] filename.po ...\n" +"Generate binary message catalog from textual translation description.\n" +"\n" +"Mandatory arguments to long options are mandatory for short options too.\n" +" -a, --alignment=NUMBER align strings to NUMBER bytes (default: %d)\n" +" -c, --check perform language dependent checks on strings\n" +" -D, --directory=DIRECTORY add DIRECTORY to list for input files search\n" +" -f, --use-fuzzy use fuzzy entries in output\n" +" -h, --help display this help and exit\n" +" --no-hash binary file will not include the hash table\n" +" -o, --output-file=FILE specify output file name as FILE\n" +" --statistics print statistics about translations\n" +" --strict enable strict Uniforum mode\n" +" -v, --verbose list input file anomalies\n" +" -V, --version output version information and exit\n" +"\n" +"Giving the -v option more than once increases the verbosity level.\n" +"\n" +"If input file is -, standard input is read. If output file is -,\n" +"output is written to standard output.\n" +msgstr "" + +msgid "while creating hash table" +msgstr "" + +#, c-format +msgid "%s: warning: no header entry found" +msgstr "" + +#, c-format +msgid "domain name \"%s\" not suitable as file name" +msgstr "" + +#, c-format +msgid "domain name \"%s\" not suitable as file name: will use prefix" +msgstr "" + +#, c-format +msgid "`domain %s' directive ignored" +msgstr "" + +msgid "empty `msgstr' entry ignored" +msgstr "" + +msgid "fuzzy `msgstr' entry ignored" +msgstr "" + +#, c-format +msgid "headerfield `%s' missing in header" +msgstr "" + +#, c-format +msgid "header field `%s' should start at beginning of line" +msgstr "" + +msgid "some header fields still have the initial default value" +msgstr "" + +#, c-format +msgid "field `%s' still has initial default value" +msgstr "" + +#, c-format +msgid "%s: warning: source file contains fuzzy translation" +msgstr "" + +msgid "`msgid' and `msgstr' entries do not both begin with '\\n'" +msgstr "" + +msgid "`msgid' and `msgstr' entries do not both end with '\\n'" +msgstr "" + +msgid "number of format specifications in `msgid' and `msgstr' does not match" +msgstr "" + +#, c-format +msgid "format specifications for argument %u are not the same" +msgstr "" + +msgid "missing arguments" +msgstr "" + +msgid "too many arguments" +msgstr "" + +#, c-format, no-wrap +msgid "" +"Usage: %s [OPTION] [[[TEXTDOMAIN] MSGID] | [-s [MSGID]...]]\n" +" -d, --domain=TEXTDOMAIN retrieve translated messages from TEXTDOMAIN\n" +" -e enable expansion of some escape sequences\n" +" -E (ignored for compatibility)\n" +" -h, --help display this help and exit\n" +" -n suppress trailing newline\n" +" -V, --version display version information and exit\n" +" [TEXTDOMAIN] MSGID retrieve translated message corresponding\n" +" to MSGID from TEXTDOMAIN\n" +msgstr "" + +#, c-format, no-wrap +msgid "" +"\n" +"If the TEXTDOMAIN parameter is not given, the domain is determined from the\n" +"environment variable TEXTDOMAIN. If the message catalog is not found in the\n" +"regular directory, another location can be specified with the environment\n" +"variable TEXTDOMAINDIR.\n" +"When used with the -s option the program behaves like the `echo' command.\n" +"But it does not simply copy its arguments to stdout. Instead those messages\n" +"found in the selected catalog are translated.\n" +"Standard search directory: %s\n" +msgstr "" diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-1 b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-1 new file mode 100755 index 00000000..84cb1e87 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-1 @@ -0,0 +1,28 @@ +#! /bin/sh +# One argument is required which is the path to the toplevel directory +# of the distribution. + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="xg-test1.po" +: ${XGETTEXT=xgettext} +${XGETTEXT} -d xg-test1 -k_ --omit-header \ + $top_srcdir/src/xgettext.c $top_srcdir/src/msgfmt.c $top_srcdir/src/gettextp.c + +: ${DIFF=diff} +${DIFF} $top_srcdir/tests/xg-test1.ok.po xg-test1.po +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-2 b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-2 new file mode 100755 index 00000000..c525a663 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-2 @@ -0,0 +1,51 @@ +#! /bin/sh + +tmpfiles="xg-test2.in.c" +cat <<EOF > xg-test2.in.c +This is a test of the xgettext functionality. +/* xgettext:no-c-format */ +_("extract me") +Sometimes keywords can be spread apart +xgettext:no-c-format +_ ( "what about me" ) +And even further on accasion +_ +( +"hello" +) +EOF + +tmpfiles="$tmpfiles xg-test2.po" +: ${XGETTEXT=xgettext} +${XGETTEXT} -d xg-test2 -k_ --omit-header xg-test2.in.c + +tmpfiles="$tmpfiles xg-test2.ok" +cat <<EOF > xg-test2.ok +#, no-c-format +msgid "extract me" +msgstr "" + +msgid "what about me" +msgstr "" + +msgid "hello" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} xg-test2.ok xg-test2.po +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-3 b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-3 new file mode 100755 index 00000000..50e7a108 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-3 @@ -0,0 +1,28 @@ +#! /bin/sh +# One argument is required which is the path to the toplevel directory +# of the distribution. + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="zero-domain.po" +rm -f zero-domain.po +: ${XGETTEXT=xgettext} +${XGETTEXT} -k_ -d zero-domain -x $top_srcdir/po/gettext.pot \ + $top_srcdir/src/xgettext.c + +test ! -f zero-domain.po +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-4 b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-4 new file mode 100755 index 00000000..62eeb560 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-4 @@ -0,0 +1,44 @@ +#! /bin/sh + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="xg-test4.in.c" +cat <<EOF > xg-test4.in.c +#line 42 "bozo" +main(){printf(gettext("Hello, World!\n"));} +# 6 "clown" +gettext("nothing"); +EOF + +tmpfiles="$tmpfiles xg-test4.po" +: ${XGETTEXT=xgettext} +${XGETTEXT} --omit-header --add-location xg-test4.in.c -d xg-test4 + +tmpfiles="$tmpfiles xg-test4.ok" +cat <<EOF > xg-test4.ok +#: bozo:42 +msgid "Hello, World!\n" +msgstr "" + +#: clown:6 +msgid "nothing" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} xg-test4.ok xg-test4.po +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-5 b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-5 new file mode 100755 index 00000000..d231fe83 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-5 @@ -0,0 +1,36 @@ +#! /bin/sh + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="$tmpfiles xg-test5.in.c" +cat <<EOF > xg-test5.in.c +main()??<printf(gettext("Hello, " "World!" "??/n")); ??> +EOF + +tmpfiles="$tmpfiles xg-test5.po" +: ${XGETTEXT=xgettext} +${XGETTEXT} --omit-header --trigraphs xg-test5.in.c -d xg-test5 + +tmpfiles="$tmpfiles xg-test5.ok" +cat <<EOF > xg-test5.ok +msgid "Hello, World!\n" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} xg-test5.ok xg-test5.po +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-6 b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-6 new file mode 100755 index 00000000..88a139a0 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-6 @@ -0,0 +1,38 @@ +#! /bin/sh + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="$tmpfiles xg-test6.in.cc" +cat <<EOF > xg-test6.in.cc +main(){printf(gettext/*puke*/(/*barf*/"Hello, " "World!" "\n")); } +EOF + +tmpfiles="$tmpfiles xg-test6.po" +: ${XGETTEXT=xgettext} +${XGETTEXT} --omit-header --add-comments xg-test6.in.cc -d xg-test6 + +tmpfiles="$tmpfiles xg-test6.ok" +cat <<EOF > xg-test6.ok +#. puke +#. barf +msgid "Hello, World!\n" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} xg-test6.ok xg-test6.po +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-7 b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-7 new file mode 100755 index 00000000..b456f646 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-7 @@ -0,0 +1,58 @@ +#! /bin/sh + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="$tmpfiles xg-test7.in.C" +cat <<EOF > xg-test7.in.C +/* This comment will not be extracted. */ +gettext ("help"); + +/* XXX: But this one will. */ +gettext_noop ("me"); + +//XXX: ..and this +dcgettext ("foo", "quick", LC_MESSAGES); + + /* not not not */ +dgettext ("bar", "!"); +EOF + +tmpfiles="$tmpfiles xg-test7.po" +: ${XGETTEXT=xgettext} +${XGETTEXT} --omit-header --add-comments=XXX xg-test7.in.C \ + -d xg-test7 + +tmpfiles="$tmpfiles xg-test7.ok" +cat <<EOF > xg-test7.ok +msgid "help" +msgstr "" + +#. XXX: But this one will. +msgid "me" +msgstr "" + +#. XXX: ..and this +msgid "quick" +msgstr "" + +msgid "!" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} xg-test7.ok xg-test7.po +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-8 b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-8 new file mode 100755 index 00000000..eb4f4f21 --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-8 @@ -0,0 +1,91 @@ +#! /bin/sh + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="$tmpfiles xg-test8.in.po xg-test8.c xg-test8.cc" +cat <<EOF > xg-test8.in.po +#: file1.c:199 +#, fuzzy +msgid "extract me" +msgstr "some text to get fuzzy copied to result" + +#: file2.cc:200 +msgid "what about me" +msgstr "" + +#: file3.c:10 +#, c-format, fuzzy +msgid "hello" +msgstr "Again some text for fuzzy" +EOF + +cat <<EOF > xg-test8.c +#include <libintl.h> +#include <stdio.h> +int +main (int argc, char *argv[]) +{ + printf (dcgettext ("hello", "Hello, world.")); + return 0; +} +EOF + +cat <<EOF > xg-test8.cc +#include <iostream.h> +#include <libintl.h> +#include <locale.h> +int +main (int argc, char *argv[]) +{ + cout << dcgettext ("hello", "Hello world!", LC_MESSAGES) << endl; + return 0; +} +EOF + +tmpfiles="$tmpfiles xg-test8.po" +: ${XGETTEXT=xgettext} +${XGETTEXT} --omit-header -n xg-test8.in.po \ + xg-test8.c xg-test8.cc -d xg-test8 + +tmpfiles="$tmpfiles xg-test8.ok" +cat <<EOF > xg-test8.ok +#: file1.c:199 +#, fuzzy +msgid "extract me" +msgstr "some text to get fuzzy copied to result" + +#: file2.cc:200 +msgid "what about me" +msgstr "" + +#: file3.c:10 +#, fuzzy, c-format +msgid "hello" +msgstr "Again some text for fuzzy" + +#: xg-test8.c:6 +msgid "Hello, world." +msgstr "" + +#: xg-test8.cc:7 +msgid "Hello world!" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} xg-test8.ok xg-test8.po +result=$? + +rm -fr $tmpfiles + +exit $result + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-9 b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-9 new file mode 100755 index 00000000..c1d17dca --- /dev/null +++ b/debian/gettext-kde/gettext-kde-0.10.35/tests/xgettext-9 @@ -0,0 +1,97 @@ +#! /bin/sh + +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="$tmpfiles xg-test9.c" +cat <<EOF > xg-test9.c +int +main() +{ + /* This is a comment which immediately before a keyword. */ + gettext ("1"); + + // This + // one + // too + // although many blank lines come before the token itself. + + + + + gettext("2"); + + /* this one also counts */ gettext ("3"); + + gettext("4"); + + /* this one is also copied */ nada + gettext ("5"); + + /* I hope you do not see the following */ + break; + gettext("6"); + + /* An unnice + multi-line comment */ evil; + gettext("7"); +} +EOF + +tmpfiles="$tmpfiles xg-test9.po" +: ${XGETTEXT=xgettext} +${XGETTEXT} --omit-header -c --c++ -d xg-test9 xg-test9.c + +tmpfiles="$tmpfiles xg-test9.ok" +cat <<EOF > xg-test9.ok +#. This is a comment which immediately before a keyword. +msgid "1" +msgstr "" + +#. This +#. one +#. too +#. although many blank lines come before the token itself. +msgid "2" +msgstr "" + +#. this one also counts +msgid "3" +msgstr "" + +msgid "4" +msgstr "" + +#. this one is also copied +msgid "5" +msgstr "" + +msgid "6" +msgstr "" + +#. An unnice +#. multi-line comment +msgid "7" +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} xg-test9.ok xg-test9.po +result=$? + +rm -fr $tmpfiles + +exit $result + +Local Variables: + nuke-trailing-whitespace-p:nil +End: + +# Preserve executable bits for this shell script. +# Thanks to Noah Friedman for this great trick. +Local Variables: +eval:(defun frobme () (set-file-modes buffer-file-name file-mode)) +eval:(make-local-variable 'file-mode) +eval:(setq file-mode (file-modes (buffer-file-name))) +eval:(make-local-variable 'after-save-hook) +eval:(add-hook 'after-save-hook 'frobme) +End: diff --git a/debian/gettext-kde/gettext-kde_0.10.35.orig.tar.xz b/debian/gettext-kde/gettext-kde_0.10.35.orig.tar.xz Binary files differnew file mode 100644 index 00000000..73600a28 --- /dev/null +++ b/debian/gettext-kde/gettext-kde_0.10.35.orig.tar.xz |