summaryrefslogtreecommitdiff
path: root/package/gettext-tiny
diff options
context:
space:
mode:
authorWaldemar Brodkorb <mail@waldemar-brodkorb.de>2013-10-03 19:52:47 +0200
committerWaldemar Brodkorb <mail@waldemar-brodkorb.de>2013-10-03 19:52:47 +0200
commitae8520cfbb9cce8cfe38b00b52f202584ae1fab4 (patch)
treef03f2553582d3647393f0c1617c74ae0438192ab /package/gettext-tiny
parent05a7f514cca7e6858e5f5dd46cecd0c3bd6f9f71 (diff)
update samba to latest version, use stub gettext-tiny; use utf8 charset by default for vfat
Diffstat (limited to 'package/gettext-tiny')
-rw-r--r--package/gettext-tiny/Makefile22
-rw-r--r--package/gettext-tiny/src/LICENSE21
-rw-r--r--package/gettext-tiny/src/Makefile73
-rwxr-xr-xpackage/gettext-tiny/src/create-dist.sh21
-rw-r--r--package/gettext-tiny/src/docs/gettext.html18036
-rw-r--r--package/gettext-tiny/src/docs/msgfmt.txt74
-rw-r--r--package/gettext-tiny/src/docs/msgmerge.txt81
-rw-r--r--package/gettext-tiny/src/docs/xgettext.txt101
-rw-r--r--package/gettext-tiny/src/include/libintl.h61
-rw-r--r--package/gettext-tiny/src/libintl/libintl.c82
-rw-r--r--package/gettext-tiny/src/src/StringEscape.c111
-rw-r--r--package/gettext-tiny/src/src/StringEscape.h7
-rw-r--r--package/gettext-tiny/src/src/msgfmt.c278
-rw-r--r--package/gettext-tiny/src/src/msgmerge.c222
-rw-r--r--package/gettext-tiny/src/src/poparser.c144
-rw-r--r--package/gettext-tiny/src/src/poparser.h36
-rwxr-xr-xpackage/gettext-tiny/src/src/xgettext.sh112
17 files changed, 19482 insertions, 0 deletions
diff --git a/package/gettext-tiny/Makefile b/package/gettext-tiny/Makefile
new file mode 100644
index 000000000..a61061cd6
--- /dev/null
+++ b/package/gettext-tiny/Makefile
@@ -0,0 +1,22 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:= gettext-tiny
+PKG_VERSION:= 0.1
+PKG_RELEASE:= 1
+PKG_DESCR:= Gettext stub and replacement
+PKG_SECTION:= libs
+PKG_URL:= https://github.com/rofl0r/gettext-tiny
+
+WRKDIST= ${WRKDIR}/${PKG_NAME}-${PKG_VERSION}
+NO_DISTFILES:= 1
+
+include $(TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,GETTEXT_TINY,gettext-tiny,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+
+CONFIG_STYLE:= manual
+
+include ${TOPDIR}/mk/pkg-bottom.mk
diff --git a/package/gettext-tiny/src/LICENSE b/package/gettext-tiny/src/LICENSE
new file mode 100644
index 000000000..465ec8a88
--- /dev/null
+++ b/package/gettext-tiny/src/LICENSE
@@ -0,0 +1,21 @@
+Copyright (C) 2012 rofl0r
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/package/gettext-tiny/src/Makefile b/package/gettext-tiny/src/Makefile
new file mode 100644
index 000000000..6709ad1e8
--- /dev/null
+++ b/package/gettext-tiny/src/Makefile
@@ -0,0 +1,73 @@
+prefix=/usr
+bindir=$(prefix)/bin
+includedir=$(prefix)/include
+libdir=$(prefix)/lib
+sysconfdir=$(prefix)/etc
+
+LIBSRC = $(sort $(wildcard libintl/*.c))
+PROGSRC = $(sort $(wildcard src/*.c))
+
+PARSEROBJS = src/poparser.o src/StringEscape.o
+PROGOBJS = $(PROGSRC:.c=.o)
+LIBOBJS = $(LIBSRC:.c=.o)
+OBJS = $(PROGOBJS) $(LIBOBJS)
+
+
+HEADERS = libintl.h
+ALL_INCLUDES = $(HEADERS)
+
+ALL_LIBS=libintl.a
+ALL_TOOLS=msgfmt msgmerge xgettext
+
+CFLAGS?=-O0 -fPIC
+
+AR ?= $(CROSS_COMPILE)ar
+RANLIB ?= $(CROSS_COMPILE)ranlib
+CC ?= $(CROSS_COMPILE)cc
+
+-include config.mak
+
+BUILDCFLAGS=$(CFLAGS)
+
+all: $(ALL_LIBS) $(ALL_TOOLS)
+
+install: $(ALL_LIBS:lib%=$(DESTDIR)$(libdir)/lib%) $(ALL_INCLUDES:%=$(DESTDIR)$(includedir)/%) $(ALL_TOOLS:%=$(DESTDIR)$(bindir)/%)
+
+clean:
+ rm -f $(ALL_LIBS)
+ rm -f $(OBJS)
+ rm -f $(ALL_TOOLS)
+
+%.o: %.c
+ $(CC) $(BUILDCFLAGS) -c -o $@ $<
+
+libintl.a: $(LIBOBJS)
+ rm -f $@
+ $(AR) rc $@ $(LIBOBJS)
+ $(RANLIB) $@
+
+msgmerge: $(OBJS)
+ $(CC) $(LDFLAGS) -static -o $@ src/msgmerge.o $(PARSEROBJS)
+
+msgfmt: $(OBJS)
+ $(CC) $(LDFLAGS) -static -o $@ src/msgfmt.o $(PARSEROBJS)
+
+xgettext:
+ cp src/xgettext.sh ./xgettext
+
+$(DESTDIR)$(libdir)/%.a: %.a
+ mkdir -p $(DESTDIR)$(libdir)
+ install -m 755 $< $@
+
+$(DESTDIR)$(includedir)/%.h: include/%.h
+ mkdir -p $(DESTDIR)$(includedir)
+ install -m 644 $< $@
+
+$(DESTDIR)$(bindir)/%: %
+ mkdir -p $(DESTDIR)$(bindir)
+ install -m 755 $< $@
+
+.PHONY: all clean install
+
+
+
diff --git a/package/gettext-tiny/src/create-dist.sh b/package/gettext-tiny/src/create-dist.sh
new file mode 100755
index 000000000..b1d1b7a89
--- /dev/null
+++ b/package/gettext-tiny/src/create-dist.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+if [[ -z "$VER" ]] ; then
+ echo set VER!
+ exit
+fi
+me=`pwd`
+
+proj=gettext-tiny
+projver=${proj}-${VER}
+
+tempdir=/tmp/${proj}-0000
+rm -rf $tempdir
+mkdir -p $tempdir
+
+cd $tempdir
+git clone http://github.com/rofl0r/$proj $projver
+rm -rf $projver/.git
+rm -rf $projver/docs
+
+tar cjf $proj.tar.bz2 $projver/
+mv $proj.tar.bz2 $me/$projver.tar.bz2
diff --git a/package/gettext-tiny/src/docs/gettext.html b/package/gettext-tiny/src/docs/gettext.html
new file mode 100644
index 000000000..05d4c9c43
--- /dev/null
+++ b/package/gettext-tiny/src/docs/gettext.html
@@ -0,0 +1,18036 @@
+<html lang="en">
+<head>
+<title>GNU `gettext' utilities</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<meta name="description" content="GNU `gettext' utilities">
+<meta name="generator" content="makeinfo 4.13">
+<link title="Top" rel="top" href="#Top">
+<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
+<meta http-equiv="Content-Style-Type" content="text/css">
+<style type="text/css"><!--
+ pre.display { font-family:inherit }
+ pre.format { font-family:inherit }
+ pre.smalldisplay { font-family:inherit; font-size:smaller }
+ pre.smallformat { font-family:inherit; font-size:smaller }
+ pre.smallexample { font-size:smaller }
+ pre.smalllisp { font-size:smaller }
+ span.sc { font-variant:small-caps }
+ span.roman { font-family:serif; font-weight:normal; }
+ span.sansserif { font-family:sans-serif; font-weight:normal; }
+--></style>
+</head>
+<body>
+<h1 class="settitle">GNU `gettext' utilities</h1>
+ <div class="contents">
+<h2>Table of Contents</h2>
+<ul>
+<li><a name="toc_Top" href="#Top">GNU <code>gettext</code> utilities</a>
+<li><a name="toc_Introduction" href="#Introduction">1 Introduction</a>
+<ul>
+<li><a href="#Why">1.1 The Purpose of GNU <code>gettext</code></a>
+<li><a href="#Concepts">1.2 I18n, L10n, and Such</a>
+<li><a href="#Aspects">1.3 Aspects in Native Language Support</a>
+<li><a href="#Files">1.4 Files Conveying Translations</a>
+<li><a href="#Overview">1.5 Overview of GNU <code>gettext</code></a>
+</li></ul>
+<li><a name="toc_Users" href="#Users">2 The User's View</a>
+<ul>
+<li><a href="#System-Installation">2.1 Operating System Installation</a>
+<li><a href="#Setting-the-GUI-Locale">2.2 Setting the Locale Used by GUI Programs</a>
+<li><a href="#Setting-the-POSIX-Locale">2.3 Setting the Locale through Environment Variables</a>
+<ul>
+<li><a href="#Locale-Names">2.3.1 Locale Names</a>
+<li><a href="#Locale-Environment-Variables">2.3.2 Locale Environment Variables</a>
+<li><a href="#The-LANGUAGE-variable">2.3.3 Specifying a Priority List of Languages</a>
+</li></ul>
+<li><a href="#Installing-Localizations">2.4 Installing Translations for Particular Programs</a>
+</li></ul>
+<li><a name="toc_PO-Files" href="#PO-Files">3 The Format of PO Files</a>
+<li><a name="toc_Sources" href="#Sources">4 Preparing Program Sources</a>
+<ul>
+<li><a href="#Importing">4.1 Importing the <code>gettext</code> declaration</a>
+<li><a href="#Triggering">4.2 Triggering <code>gettext</code> Operations</a>
+<li><a href="#Preparing-Strings">4.3 Preparing Translatable Strings</a>
+<li><a href="#Mark-Keywords">4.4 How Marks Appear in Sources</a>
+<li><a href="#Marking">4.5 Marking Translatable Strings</a>
+<li><a href="#c_002dformat-Flag">4.6 Special Comments preceding Keywords</a>
+<li><a href="#Special-cases">4.7 Special Cases of Translatable Strings</a>
+<li><a href="#Bug-Report-Address">4.8 Letting Users Report Translation Bugs</a>
+<li><a href="#Names">4.9 Marking Proper Names for Translation</a>
+<li><a href="#Libraries">4.10 Preparing Library Sources</a>
+</li></ul>
+<li><a name="toc_Template" href="#Template">5 Making the PO Template File</a>
+<ul>
+<li><a href="#xgettext-Invocation">5.1 Invoking the <code>xgettext</code> Program</a>
+<ul>
+<li><a href="#xgettext-Invocation">5.1.1 Input file location</a>
+<li><a href="#xgettext-Invocation">5.1.2 Output file location</a>
+<li><a href="#xgettext-Invocation">5.1.3 Choice of input file language</a>
+<li><a href="#xgettext-Invocation">5.1.4 Input file interpretation</a>
+<li><a href="#xgettext-Invocation">5.1.5 Operation mode</a>
+<li><a href="#xgettext-Invocation">5.1.6 Language specific options</a>
+<li><a href="#xgettext-Invocation">5.1.7 Output details</a>
+<li><a href="#xgettext-Invocation">5.1.8 Informative output</a>
+</li></ul>
+</li></ul>
+<li><a name="toc_Creating" href="#Creating">6 Creating a New PO File</a>
+<ul>
+<li><a href="#msginit-Invocation">6.1 Invoking the <code>msginit</code> Program</a>
+<ul>
+<li><a href="#msginit-Invocation">6.1.1 Input file location</a>
+<li><a href="#msginit-Invocation">6.1.2 Output file location</a>
+<li><a href="#msginit-Invocation">6.1.3 Input file syntax</a>
+<li><a href="#msginit-Invocation">6.1.4 Output details</a>
+<li><a href="#msginit-Invocation">6.1.5 Informative output</a>
+</li></ul>
+<li><a href="#Header-Entry">6.2 Filling in the Header Entry</a>
+</li></ul>
+<li><a name="toc_Updating" href="#Updating">7 Updating Existing PO Files</a>
+<ul>
+<li><a href="#msgmerge-Invocation">7.1 Invoking the <code>msgmerge</code> Program</a>
+<ul>
+<li><a href="#msgmerge-Invocation">7.1.1 Input file location</a>
+<li><a href="#msgmerge-Invocation">7.1.2 Operation mode</a>
+<li><a href="#msgmerge-Invocation">7.1.3 Output file location</a>
+<li><a href="#msgmerge-Invocation">7.1.4 Output file location in update mode</a>
+<li><a href="#msgmerge-Invocation">7.1.5 Operation modifiers</a>
+<li><a href="#msgmerge-Invocation">7.1.6 Input file syntax</a>
+<li><a href="#msgmerge-Invocation">7.1.7 Output details</a>
+<li><a href="#msgmerge-Invocation">7.1.8 Informative output</a>
+</li></ul>
+</li></ul>
+<li><a name="toc_Editing" href="#Editing">8 Editing PO Files</a>
+<ul>
+<li><a href="#KBabel">8.1 KDE's PO File Editor</a>
+<li><a href="#Gtranslator">8.2 GNOME's PO File Editor</a>
+<li><a href="#PO-Mode">8.3 Emacs's PO File Editor</a>
+<ul>
+<li><a href="#Installation">8.3.1 Completing GNU <code>gettext</code> Installation</a>
+<li><a href="#Main-PO-Commands">8.3.2 Main PO mode Commands</a>
+<li><a href="#Entry-Positioning">8.3.3 Entry Positioning</a>
+<li><a href="#Normalizing">8.3.4 Normalizing Strings in Entries</a>
+<li><a href="#Translated-Entries">8.3.5 Translated Entries</a>
+<li><a href="#Fuzzy-Entries">8.3.6 Fuzzy Entries</a>
+<li><a href="#Untranslated-Entries">8.3.7 Untranslated Entries</a>
+<li><a href="#Obsolete-Entries">8.3.8 Obsolete Entries</a>
+<li><a href="#Modifying-Translations">8.3.9 Modifying Translations</a>
+<li><a href="#Modifying-Comments">8.3.10 Modifying Comments</a>
+<li><a href="#Subedit">8.3.11 Details of Sub Edition</a>
+<li><a href="#C-Sources-Context">8.3.12 C Sources Context</a>
+<li><a href="#Auxiliary">8.3.13 Consulting Auxiliary PO Files</a>
+</li></ul>
+<li><a href="#Compendium">8.4 Using Translation Compendia</a>
+<ul>
+<li><a href="#Creating-Compendia">8.4.1 Creating Compendia</a>
+<ul>
+<li><a href="#Creating-Compendia">8.4.1.1 Concatenate PO Files</a>
+<li><a href="#Creating-Compendia">8.4.1.2 Extract a Message Subset from a PO File</a>
+</li></ul>
+<li><a href="#Using-Compendia">8.4.2 Using Compendia</a>
+<ul>
+<li><a href="#Using-Compendia">8.4.2.1 Initialize a New Translation File</a>
+<li><a href="#Using-Compendia">8.4.2.2 Update an Existing Translation File</a>
+</li></ul>
+</li></ul>
+</li></ul>
+<li><a name="toc_Manipulating" href="#Manipulating">9 Manipulating PO Files</a>
+<ul>
+<li><a href="#msgcat-Invocation">9.1 Invoking the <code>msgcat</code> Program</a>
+<ul>
+<li><a href="#msgcat-Invocation">9.1.1 Input file location</a>
+<li><a href="#msgcat-Invocation">9.1.2 Output file location</a>
+<li><a href="#msgcat-Invocation">9.1.3 Message selection</a>
+<li><a href="#msgcat-Invocation">9.1.4 Input file syntax</a>
+<li><a href="#msgcat-Invocation">9.1.5 Output details</a>
+<li><a href="#msgcat-Invocation">9.1.6 Informative output</a>
+</li></ul>
+<li><a href="#msgconv-Invocation">9.2 Invoking the <code>msgconv</code> Program</a>
+<ul>
+<li><a href="#msgconv-Invocation">9.2.1 Input file location</a>
+<li><a href="#msgconv-Invocation">9.2.2 Output file location</a>
+<li><a href="#msgconv-Invocation">9.2.3 Conversion target</a>
+<li><a href="#msgconv-Invocation">9.2.4 Input file syntax</a>
+<li><a href="#msgconv-Invocation">9.2.5 Output details</a>
+<li><a href="#msgconv-Invocation">9.2.6 Informative output</a>
+</li></ul>
+<li><a href="#msggrep-Invocation">9.3 Invoking the <code>msggrep</code> Program</a>
+<ul>
+<li><a href="#msggrep-Invocation">9.3.1 Input file location</a>
+<li><a href="#msggrep-Invocation">9.3.2 Output file location</a>
+<li><a href="#msggrep-Invocation">9.3.3 Message selection</a>
+<li><a href="#msggrep-Invocation">9.3.4 Input file syntax</a>
+<li><a href="#msggrep-Invocation">9.3.5 Output details</a>
+<li><a href="#msggrep-Invocation">9.3.6 Informative output</a>
+<li><a href="#msggrep-Invocation">9.3.7 Examples</a>
+</li></ul>
+<li><a href="#msgfilter-Invocation">9.4 Invoking the <code>msgfilter</code> Program</a>
+<ul>
+<li><a href="#msgfilter-Invocation">9.4.1 Input file location</a>
+<li><a href="#msgfilter-Invocation">9.4.2 Output file location</a>
+<li><a href="#msgfilter-Invocation">9.4.3 The filter</a>
+<li><a href="#msgfilter-Invocation">9.4.4 Useful <var>filter-option</var>s when the <var>filter</var> is &lsquo;<samp><span class="samp">sed</span></samp>&rsquo;</a>
+<li><a href="#msgfilter-Invocation">9.4.5 Built-in <var>filter</var>s</a>
+<li><a href="#msgfilter-Invocation">9.4.6 Input file syntax</a>
+<li><a href="#msgfilter-Invocation">9.4.7 Output details</a>
+<li><a href="#msgfilter-Invocation">9.4.8 Informative output</a>
+<li><a href="#msgfilter-Invocation">9.4.9 Examples</a>
+</li></ul>
+<li><a href="#msguniq-Invocation">9.5 Invoking the <code>msguniq</code> Program</a>
+<ul>
+<li><a href="#msguniq-Invocation">9.5.1 Input file location</a>
+<li><a href="#msguniq-Invocation">9.5.2 Output file location</a>
+<li><a href="#msguniq-Invocation">9.5.3 Message selection</a>
+<li><a href="#msguniq-Invocation">9.5.4 Input file syntax</a>
+<li><a href="#msguniq-Invocation">9.5.5 Output details</a>
+<li><a href="#msguniq-Invocation">9.5.6 Informative output</a>
+</li></ul>
+<li><a href="#msgcomm-Invocation">9.6 Invoking the <code>msgcomm</code> Program</a>
+<ul>
+<li><a href="#msgcomm-Invocation">9.6.1 Input file location</a>
+<li><a href="#msgcomm-Invocation">9.6.2 Output file location</a>
+<li><a href="#msgcomm-Invocation">9.6.3 Message selection</a>
+<li><a href="#msgcomm-Invocation">9.6.4 Input file syntax</a>
+<li><a href="#msgcomm-Invocation">9.6.5 Output details</a>
+<li><a href="#msgcomm-Invocation">9.6.6 Informative output</a>
+</li></ul>
+<li><a href="#msgcmp-Invocation">9.7 Invoking the <code>msgcmp</code> Program</a>
+<ul>
+<li><a href="#msgcmp-Invocation">9.7.1 Input file location</a>
+<li><a href="#msgcmp-Invocation">9.7.2 Operation modifiers</a>
+<li><a href="#msgcmp-Invocation">9.7.3 Input file syntax</a>
+<li><a href="#msgcmp-Invocation">9.7.4 Informative output</a>
+</li></ul>
+<li><a href="#msgattrib-Invocation">9.8 Invoking the <code>msgattrib</code> Program</a>
+<ul>
+<li><a href="#msgattrib-Invocation">9.8.1 Input file location</a>
+<li><a href="#msgattrib-Invocation">9.8.2 Output file location</a>
+<li><a href="#msgattrib-Invocation">9.8.3 Message selection</a>
+<li><a href="#msgattrib-Invocation">9.8.4 Attribute manipulation</a>
+<li><a href="#msgattrib-Invocation">9.8.5 Input file syntax</a>
+<li><a href="#msgattrib-Invocation">9.8.6 Output details</a>
+<li><a href="#msgattrib-Invocation">9.8.7 Informative output</a>
+</li></ul>
+<li><a href="#msgen-Invocation">9.9 Invoking the <code>msgen</code> Program</a>
+<ul>
+<li><a href="#msgen-Invocation">9.9.1 Input file location</a>
+<li><a href="#msgen-Invocation">9.9.2 Output file location</a>
+<li><a href="#msgen-Invocation">9.9.3 Input file syntax</a>
+<li><a href="#msgen-Invocation">9.9.4 Output details</a>
+<li><a href="#msgen-Invocation">9.9.5 Informative output</a>
+</li></ul>
+<li><a href="#msgexec-Invocation">9.10 Invoking the <code>msgexec</code> Program</a>
+<ul>
+<li><a href="#msgexec-Invocation">9.10.1 Input file location</a>
+<li><a href="#msgexec-Invocation">9.10.2 Input file syntax</a>
+<li><a href="#msgexec-Invocation">9.10.3 Informative output</a>
+</li></ul>
+<li><a href="#Colorizing">9.11 Highlighting parts of PO files</a>
+<ul>
+<li><a href="#The-_002d_002dcolor-option">9.11.1 The <code>--color</code> option</a>
+<li><a href="#The-TERM-variable">9.11.2 The environment variable <code>TERM</code></a>
+<li><a href="#The-_002d_002dstyle-option">9.11.3 The <code>--style</code> option</a>
+<li><a href="#Style-rules">9.11.4 Style rules for PO files</a>
+<li><a href="#Customizing-less">9.11.5 Customizing <code>less</code> for viewing PO files</a>
+</li></ul>
+<li><a href="#libgettextpo">9.12 Writing your own programs that process PO files</a>
+</li></ul>
+<li><a name="toc_Binaries" href="#Binaries">10 Producing Binary MO Files</a>
+<ul>
+<li><a href="#msgfmt-Invocation">10.1 Invoking the <code>msgfmt</code> Program</a>
+<ul>
+<li><a href="#msgfmt-Invocation">10.1.1 Input file location</a>
+<li><a href="#msgfmt-Invocation">10.1.2 Operation mode</a>
+<li><a href="#msgfmt-Invocation">10.1.3 Output file location</a>
+<li><a href="#msgfmt-Invocation">10.1.4 Output file location in Java mode</a>
+<li><a href="#msgfmt-Invocation">10.1.5 Output file location in C# mode</a>
+<li><a href="#msgfmt-Invocation">10.1.6 Output file location in Tcl mode</a>
+<li><a href="#msgfmt-Invocation">10.1.7 Input file syntax</a>
+<li><a href="#msgfmt-Invocation">10.1.8 Input file interpretation</a>
+<li><a href="#msgfmt-Invocation">10.1.9 Output details</a>
+<li><a href="#msgfmt-Invocation">10.1.10 Informative output</a>
+</li></ul>
+<li><a href="#msgunfmt-Invocation">10.2 Invoking the <code>msgunfmt</code> Program</a>
+<ul>
+<li><a href="#msgunfmt-Invocation">10.2.1 Operation mode</a>
+<li><a href="#msgunfmt-Invocation">10.2.2 Input file location</a>
+<li><a href="#msgunfmt-Invocation">10.2.3 Input file location in Java mode</a>
+<li><a href="#msgunfmt-Invocation">10.2.4 Input file location in C# mode</a>
+<li><a href="#msgunfmt-Invocation">10.2.5 Input file location in Tcl mode</a>
+<li><a href="#msgunfmt-Invocation">10.2.6 Output file location</a>
+<li><a href="#msgunfmt-Invocation">10.2.7 Output details</a>
+<li><a href="#msgunfmt-Invocation">10.2.8 Informative output</a>
+</li></ul>
+<li><a href="#MO-Files">10.3 The Format of GNU MO Files</a>
+</li></ul>
+<li><a name="toc_Programmers" href="#Programmers">11 The Programmer's View</a>
+<ul>
+<li><a href="#catgets">11.1 About <code>catgets</code></a>
+<ul>
+<li><a href="#Interface-to-catgets">11.1.1 The Interface</a>
+<li><a href="#Problems-with-catgets">11.1.2 Problems with the <code>catgets</code> Interface?!</a>
+</li></ul>
+<li><a href="#gettext">11.2 About <code>gettext</code></a>
+<ul>
+<li><a href="#Interface-to-gettext">11.2.1 The Interface</a>
+<li><a href="#Ambiguities">11.2.2 Solving Ambiguities</a>
+<li><a href="#Locating-Catalogs">11.2.3 Locating Message Catalog Files</a>
+<li><a href="#Charset-conversion">11.2.4 How to specify the output character set <code>gettext</code> uses</a>
+<li><a href="#Contexts">11.2.5 Using contexts for solving ambiguities</a>
+<li><a href="#Plural-forms">11.2.6 Additional functions for plural forms</a>
+<li><a href="#Optimized-gettext">11.2.7 Optimization of the *gettext functions</a>
+</li></ul>
+<li><a href="#Comparison">11.3 Comparing the Two Interfaces</a>
+<li><a href="#Using-libintl_002ea">11.4 Using libintl.a in own programs</a>
+<li><a href="#gettext-grok">11.5 Being a <code>gettext</code> grok</a>
+<li><a href="#Temp-Programmers">11.6 Temporary Notes for the Programmers Chapter</a>
+<ul>
+<li><a href="#Temp-Implementations">11.6.1 Temporary - Two Possible Implementations</a>
+<li><a href="#Temp-catgets">11.6.2 Temporary - About <code>catgets</code></a>
+<li><a href="#Temp-WSI">11.6.3 Temporary - Why a single implementation</a>
+<li><a href="#Temp-Notes">11.6.4 Temporary - Notes</a>
+</li></ul>
+</li></ul>
+<li><a name="toc_Translators" href="#Translators">12 The Translator's View</a>
+<ul>
+<li><a href="#Trans-Intro-0">12.1 Introduction 0</a>
+<li><a href="#Trans-Intro-1">12.2 Introduction 1</a>
+<li><a href="#Discussions">12.3 Discussions</a>
+<li><a href="#Organization">12.4 Organization</a>
+<ul>
+<li><a href="#Central-Coordination">12.4.1 Central Coordination</a>
+<li><a href="#National-Teams">12.4.2 National Teams</a>
+<ul>
+<li><a href="#Sub_002dCultures">12.4.2.1 Sub-Cultures</a>
+<li><a href="#Organizational-Ideas">12.4.2.2 Organizational Ideas</a>
+</li></ul>
+<li><a href="#Mailing-Lists">12.4.3 Mailing Lists</a>
+</li></ul>
+<li><a href="#Information-Flow">12.5 Information Flow</a>
+<li><a href="#Translating-plural-forms">12.6 Translating plural forms</a>
+<li><a href="#Prioritizing-messages">12.7 Prioritizing messages: How to determine which messages to translate first</a>
+</li></ul>
+<li><a name="toc_Maintainers" href="#Maintainers">13 The Maintainer's View</a>
+<ul>
+<li><a href="#Flat-and-Non_002dFlat">13.1 Flat or Non-Flat Directory Structures</a>
+<li><a href="#Prerequisites">13.2 Prerequisite Works</a>
+<li><a href="#gettextize-Invocation">13.3 Invoking the <code>gettextize</code> Program</a>
+<li><a href="#Adjusting-Files">13.4 Files You Must Create or Alter</a>
+<ul>
+<li><a href="#po_002fPOTFILES_002ein">13.4.1 <samp><span class="file">POTFILES.in</span></samp> in <samp><span class="file">po/</span></samp></a>
+<li><a href="#po_002fLINGUAS">13.4.2 <samp><span class="file">LINGUAS</span></samp> in <samp><span class="file">po/</span></samp></a>
+<li><a href="#po_002fMakevars">13.4.3 <samp><span class="file">Makevars</span></samp> in <samp><span class="file">po/</span></samp></a>
+<li><a href="#po_002fRules_002d_002a">13.4.4 Extending <samp><span class="file">Makefile</span></samp> in <samp><span class="file">po/</span></samp></a>
+<li><a href="#configure_002eac">13.4.5 <samp><span class="file">configure.ac</span></samp> at top level</a>
+<li><a href="#config_002eguess">13.4.6 <samp><span class="file">config.guess</span></samp>, <samp><span class="file">config.sub</span></samp> at top level</a>
+<li><a href="#mkinstalldirs">13.4.7 <samp><span class="file">mkinstalldirs</span></samp> at top level</a>
+<li><a href="#aclocal">13.4.8 <samp><span class="file">aclocal.m4</span></samp> at top level</a>
+<li><a href="#acconfig">13.4.9 <samp><span class="file">acconfig.h</span></samp> at top level</a>
+<li><a href="#config_002eh_002ein">13.4.10 <samp><span class="file">config.h.in</span></samp> at top level</a>
+<li><a href="#Makefile">13.4.11 <samp><span class="file">Makefile.in</span></samp> at top level</a>
+<li><a href="#src_002fMakefile">13.4.12 <samp><span class="file">Makefile.in</span></samp> in <samp><span class="file">src/</span></samp></a>
+<li><a href="#lib_002fgettext_002eh">13.4.13 <samp><span class="file">gettext.h</span></samp> in <samp><span class="file">lib/</span></samp></a>
+</li></ul>
+<li><a href="#autoconf-macros">13.5 Autoconf macros for use in <samp><span class="file">configure.ac</span></samp></a>
+<ul>
+<li><a href="#AM_005fGNU_005fGETTEXT">13.5.1 AM_GNU_GETTEXT in <samp><span class="file">gettext.m4</span></samp></a>
+<li><a href="#AM_005fGNU_005fGETTEXT_005fVERSION">13.5.2 AM_GNU_GETTEXT_VERSION in <samp><span class="file">gettext.m4</span></samp></a>
+<li><a href="#AM_005fGNU_005fGETTEXT_005fNEED">13.5.3 AM_GNU_GETTEXT_NEED in <samp><span class="file">gettext.m4</span></samp></a>
+<li><a href="#AM_005fGNU_005fGETTEXT_005fINTL_005fSUBDIR">13.5.4 AM_GNU_GETTEXT_INTL_SUBDIR in <samp><span class="file">intldir.m4</span></samp></a>
+<li><a href="#AM_005fPO_005fSUBDIRS">13.5.5 AM_PO_SUBDIRS in <samp><span class="file">po.m4</span></samp></a>
+<li><a href="#AM_005fXGETTEXT_005fOPTION">13.5.6 AM_XGETTEXT_OPTION in <samp><span class="file">po.m4</span></samp></a>
+<li><a href="#AM_005fICONV">13.5.7 AM_ICONV in <samp><span class="file">iconv.m4</span></samp></a>
+</li></ul>
+<li><a href="#CVS-Issues">13.6 Integrating with CVS</a>
+<ul>
+<li><a href="#Distributed-CVS">13.6.1 Avoiding version mismatch in distributed development</a>
+<li><a href="#Files-under-CVS">13.6.2 Files to put under CVS version control</a>
+<li><a href="#autopoint-Invocation">13.6.3 Invoking the <code>autopoint</code> Program</a>
+<ul>
+<li><a href="#autopoint-Invocation">13.6.3.1 Options</a>
+<li><a href="#autopoint-Invocation">13.6.3.2 Informative output</a>
+</li></ul>
+</li></ul>
+<li><a href="#Release-Management">13.7 Creating a Distribution Tarball</a>
+</li></ul>
+<li><a name="toc_Installers" href="#Installers">14 The Installer's and Distributor's View</a>
+<li><a name="toc_Programming-Languages" href="#Programming-Languages">15 Other Programming Languages</a>
+<ul>
+<li><a href="#Language-Implementors">15.1 The Language Implementor's View</a>
+<li><a href="#Programmers-for-other-Languages">15.2 The Programmer's View</a>
+<li><a href="#Translators-for-other-Languages">15.3 The Translator's View</a>
+<ul>
+<li><a href="#c_002dformat">15.3.1 C Format Strings</a>
+<li><a href="#objc_002dformat">15.3.2 Objective C Format Strings</a>
+<li><a href="#sh_002dformat">15.3.3 Shell Format Strings</a>
+<li><a href="#python_002dformat">15.3.4 Python Format Strings</a>
+<li><a href="#lisp_002dformat">15.3.5 Lisp Format Strings</a>
+<li><a href="#elisp_002dformat">15.3.6 Emacs Lisp Format Strings</a>
+<li><a href="#librep_002dformat">15.3.7 librep Format Strings</a>
+<li><a href="#scheme_002dformat">15.3.8 Scheme Format Strings</a>
+<li><a href="#smalltalk_002dformat">15.3.9 Smalltalk Format Strings</a>
+<li><a href="#java_002dformat">15.3.10 Java Format Strings</a>
+<li><a href="#csharp_002dformat">15.3.11 C# Format Strings</a>
+<li><a href="#awk_002dformat">15.3.12 awk Format Strings</a>
+<li><a href="#object_002dpascal_002dformat">15.3.13 Object Pascal Format Strings</a>
+<li><a href="#ycp_002dformat">15.3.14 YCP Format Strings</a>
+<li><a href="#tcl_002dformat">15.3.15 Tcl Format Strings</a>
+<li><a href="#perl_002dformat">15.3.16 Perl Format Strings</a>
+<li><a href="#php_002dformat">15.3.17 PHP Format Strings</a>
+<li><a href="#gcc_002dinternal_002dformat">15.3.18 GCC internal Format Strings</a>
+<li><a href="#gfc_002dinternal_002dformat">15.3.19 GFC internal Format Strings</a>
+<li><a href="#qt_002dformat">15.3.20 Qt Format Strings</a>
+<li><a href="#qt_002dplural_002dformat">15.3.21 Qt Format Strings</a>
+<li><a href="#kde_002dformat">15.3.22 KDE Format Strings</a>
+<li><a href="#boost_002dformat">15.3.23 Boost Format Strings</a>
+</li></ul>
+<li><a href="#Maintainers-for-other-Languages">15.4 The Maintainer's View</a>
+<li><a href="#List-of-Programming-Languages">15.5 Individual Programming Languages</a>
+<ul>
+<li><a href="#C">15.5.1 C, C++, Objective C</a>
+<li><a href="#sh">15.5.2 sh - Shell Script</a>
+<ul>
+<li><a href="#Preparing-Shell-Scripts">15.5.2.1 Preparing Shell Scripts for Internationalization</a>
+<li><a href="#gettext_002esh">15.5.2.2 Contents of <code>gettext.sh</code></a>
+<li><a href="#gettext-Invocation">15.5.2.3 Invoking the <code>gettext</code> program</a>
+<li><a href="#ngettext-Invocation">15.5.2.4 Invoking the <code>ngettext</code> program</a>
+<li><a href="#envsubst-Invocation">15.5.2.5 Invoking the <code>envsubst</code> program</a>
+<li><a href="#eval_005fgettext-Invocation">15.5.2.6 Invoking the <code>eval_gettext</code> function</a>
+<li><a href="#eval_005fngettext-Invocation">15.5.2.7 Invoking the <code>eval_ngettext</code> function</a>
+</li></ul>
+<li><a href="#bash">15.5.3 bash - Bourne-Again Shell Script</a>
+<li><a href="#Python">15.5.4 Python</a>
+<li><a href="#Common-Lisp">15.5.5 GNU clisp - Common Lisp</a>
+<li><a href="#clisp-C">15.5.6 GNU clisp C sources</a>
+<li><a href="#Emacs-Lisp">15.5.7 Emacs Lisp</a>
+<li><a href="#librep">15.5.8 librep</a>
+<li><a href="#Scheme">15.5.9 GNU guile - Scheme</a>
+<li><a href="#Smalltalk">15.5.10 GNU Smalltalk</a>
+<li><a href="#Java">15.5.11 Java</a>
+<li><a href="#C_0023">15.5.12 C#</a>
+<li><a href="#gawk">15.5.13 GNU awk</a>
+<li><a href="#Pascal">15.5.14 Pascal - Free Pascal Compiler</a>
+<li><a href="#wxWidgets">15.5.15 wxWidgets library</a>
+<li><a href="#YCP">15.5.16 YCP - YaST2 scripting language</a>
+<li><a href="#Tcl">15.5.17 Tcl - Tk's scripting language</a>
+<li><a href="#Perl">15.5.18 Perl</a>
+<ul>
+<li><a href="#General-Problems">15.5.18.1 General Problems Parsing Perl Code</a>
+<li><a href="#Default-Keywords">15.5.18.2 Which keywords will xgettext look for?</a>
+<li><a href="#Special-Keywords">15.5.18.3 How to Extract Hash Keys</a>
+<li><a href="#Quote_002dlike-Expressions">15.5.18.4 What are Strings And Quote-like Expressions?</a>
+<li><a href="#Interpolation-I">15.5.18.5 Invalid Uses Of String Interpolation</a>
+<li><a href="#Interpolation-II">15.5.18.6 Valid Uses Of String Interpolation</a>
+<li><a href="#Parentheses">15.5.18.7 When To Use Parentheses</a>
+<li><a href="#Long-Lines">15.5.18.8 How To Grok with Long Lines</a>
+<li><a href="#Perl-Pitfalls">15.5.18.9 Bugs, Pitfalls, And Things That Do Not Work</a>
+</li></ul>
+<li><a href="#PHP">15.5.19 PHP Hypertext Preprocessor</a>
+<li><a href="#Pike">15.5.20 Pike</a>
+<li><a href="#GCC_002dsource">15.5.21 GNU Compiler Collection sources</a>
+</li></ul>
+<li><a href="#List-of-Data-Formats">15.6 Internationalizable Data</a>
+<ul>
+<li><a href="#POT">15.6.1 POT - Portable Object Template</a>
+<li><a href="#RST">15.6.2 Resource String Table</a>
+<li><a href="#Glade">15.6.3 Glade - GNOME user interface description</a>
+</li></ul>
+</li></ul>
+<li><a name="toc_Conclusion" href="#Conclusion">16 Concluding Remarks</a>
+<ul>
+<li><a href="#History">16.1 History of GNU <code>gettext</code></a>
+<li><a href="#References">16.2 Related Readings</a>
+</li></ul>
+<li><a name="toc_Language-Codes" href="#Language-Codes">Appendix A Language Codes</a>
+<ul>